2014-05-10 3 views
1

Je voudrais savoir comment fonctionne le multitraitement. Est-ce que cela signifie que je peux exécuter simultanément 8 separate process, si j'ai 8 core CPU?Comment fonctionne le multiprocesseur python?

Par exemple, voici mes informations de processeur.

[email protected]:~$ lscpu 
Architecture:   x86_64 
CPU op-mode(s):  32-bit, 64-bit 
Byte Order:   Little Endian 
CPU(s):    1 
On-line CPU(s) list: 0 
Thread(s) per core: 1 
Core(s) per socket: 1 
Socket(s):    1 
NUMA node(s):   1 
Vendor ID:    GenuineIntel 
CPU family:   6 
Model:     42 
Stepping:    7 
CPU MHz:    2294.762 
BogoMIPS:    4589.52 
Virtualization:  VT-x 
L1d cache:    32K 
L1i cache:    32K 
L2 cache:    256K 
L3 cache:    3072K 
NUMA node0 CPU(s):  0 

Voici mon cpuinfo

[email protected]:~$ cat /proc/cpuinfo 
processor : 0 
vendor_id : GenuineIntel 
cpu family : 6 
model  : 42 
model name : Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz 
stepping : 7 
microcode : 0x23 
cpu MHz  : 2294.762 
cache size : 3072 KB 
physical id : 0 
siblings : 1 
core id  : 0 
cpu cores : 1 
apicid  : 0 
initial apicid : 0 
fpu  : yes 
fpu_exception : yes 
cpuid level : 13 
wp  : yes 
flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid 
bogomips : 4589.52 
clflush size : 64 
cache_alignment : 64 
address sizes : 36 bits physical, 48 bits virtual 
power management: 

Comme vous pouvez le voir, mon nombre de CPU (s) est 1.

Est-ce que cela signifie que le multitraitement est inutile dans ma situation?

+0

S'il s'agit d'une CPU hyperthreaded, vous serez toujours en mesure d'exécuter deux processus simultanément. Mais en général, vous pourrez exécuter simultanément autant de processus que de processeurs logiques sur votre machine. Je suppose que vous avez un CPU hyperthreaded dans ce cas, donc le multiprocessing ne devrait pas être _useless_ - juste pas utile _ – inspectorG4dget

+0

s'il vous plaît nous montrer aussi 'cat/proc/cpuinfo' – Pavel

+0

@Pavel mis à jour ma question – Giri

Répondre

2

Vous pouvez exécuter N thread simultanément si vous avez N cœurs (si threads par core = 1). Bien que si vous essayez d'exécuter plus de threads que vous avez de processeurs, le système d'exploitation exécutera vos threads les uns après les autres par de petites «tranches» et ils sembleront fonctionner en parallèle.
Donc le multi-thread ne permettra pas à votre code d'être plus rapide dans ce cas, mais c'est souvent intéressant, vous pouvez par exemple avoir un thread qui attend le disque pour répondre tandis qu'un autre attend le réseau ...
i3-2350M devrait être 2 noyaux/2 fils par noyau, donc 4 threads fonctionnant en même temps.

+0

Hmm. Merci .. Donc, si j'achète 4 processeur de base, est-ce que cela signifie que je peux exécuter 16 threads? Quand vous parlez de "thread", vous ne parlez pas de multi-threading à droite? – Giri

+0

Je parle de multi-threading, un thread est une «séquence d'instructions» dans un processus (deux threads dans le même processus partagent l'espace mémoire). Un processus a au moins un thread. Sur mon ordinateur portable actuel, j'ai 4 cœurs (deux threads par cœur) capables d'exécuter 8 threads simultanément, bien que 'ps -ef | wc 'montre que j'ai actuellement 266 processus. Le multi-threading est une technique de programmation où vous créez plusieurs threads pour gérer un problème, ils s'exécuteront tous en parallèle (vraiment en parallèle si vous avez assez de cœurs, apparemment en parallèle sinon). –

+0

Un thread passe généralement le plus clair de son temps à attendre une ressource (disque, réseau, autre E/S, verrou, ...) de sorte que le nombre réel de threads utilisant le processeur en même temps est souvent encore faible. Des outils tels que nmon ou vmstat peuvent vous montrer ceci ('r' dans vmstat). –

Questions connexes