In un processo di Windows esiste un limite per i thread da utilizzare alla volta. In caso affermativo qual è il numero massimo di thread che possono essere utilizzati per processo?Qual è il numero massimo di thread che un processo può avere in windows
risposta
non c'è limite, che io sappia, ma ci sono due limiti pratici:
- Lo spazio virtuale per le pile. Ad esempio in 32-bit lo spazio virtuale del processo è 4 GB, ma solo circa 2G sono disponibili per uso generale. Per impostazione predefinita, ogni thread riserva 1 MB di spazio di stack, quindi il valore massimo è di 2000 thread. Ovviamente è possibile modificare le dimensioni della pila e abbassarla in modo da inserire più thread (parametro
dwStackSize
inCreateThread
o opzione/STACK
nel comando linker). Se si utilizza un sistema a 64 bit questo limite praticamente scompare. - L'overhead del programma di pianificazione. Una volta che hai letto le migliaia di thread, solo la loro programmazione manterrà quasi il 100% del tempo della tua CPU, quindi sono comunque quasi inutili. Questo non è un limite difficile, solo il tuo programma sarà più lento e lento più thread creerai.
Bene, dipende dallo stato del thread. 6000 thread bloccati ha effetto zero sul funzionamento della mia macchina. Inoltre, non riesco a vedere come, anche se i thread fossero pronti/funzionanti, sarebbe molto importante se avessi 16 thread o 1600 - i miei 4/8 core sarebbero usciti al massimo in entrambi i casi. –
@MartinJames: perché gli algoritmi utilizzati dallo scheduler del kernel decidono cosa eseguire la scala successiva con le dimensioni della tabella thread. Indubbiamente i dettagli variano con la versione di Windows, ma ricordo di aver creato 2000 thread in WinXP facendo solo 'for (;;) Sleep (1000)' e l'utilizzo della CPU era superiore all'80%. – rodrigo
IIRC, la struttura del thread readdt è fondamentalmente una matrice ordinata prioritaria di code di puntatori ai blocchi di informazioni sui thread. Se una coda ha 2000 voci ma ci sono solo quattro core, lo shuttling intorno ai thread su un interrupt del timer richiede semplicemente di spingere i "vecchi" quattro thread nella parte posteriore e scoppiare quattro "nuovi" dalla parte anteriore - non importa come lunga la coda è. Non ci vorrà molto tempo? –
Il limite effettivo è determinato dalla quantità di memoria disponibile in vari modi. Non vi è alcun limite di "non si può avere più di questo" su thread o processi in Windows, ma ci sono dei limiti alla quantità di memoria che è possibile utilizzare all'interno del sistema e, quando si esaurisce, non è possibile crearne altri filettature.
Vedere questo blog da Mark Russinovich: http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx
- 1. Qual è il valore massimo di un numero in Lua?
- 2. Numero massimo di thread
- 3. Qual è il numero massimo di connessioni?
- 4. Qual è il numero massimo di blocchi possibile in CUDA?
- 5. Qual è il numero massimo teorico di connessioni TCP aperte che una moderna macchina Linux può avere
- 6. Qual è il numero massimo di righe che una singola tabella SQL Server può memorizzare?
- 7. Numero massimo di thread Android
- 8. Qual è il numero massimo di file per jar?
- 9. Numero massimo di unità in Windows?
- 10. Come ottenere il numero di thread in un processo Java
- 11. Numero massimo di appadaggi caricati in un unico processo
- 12. Come limitare il numero massimo di thread paralleli in perl
- 13. Qual è il numero massimo di connessioni cURL impostato da?
- 14. Qual è il numero massimo di connessioni TCP/IP simultanee di Windows?
- 15. Qual è il numero massimo teorico di connessioni HTTP simultanee (simultanee) in un server Go?
- 16. In un tasso di cambio valuta qual è il numero massimo di posizioni decimali utilizzate?
- 17. Il thread è un concetto di Windows?
- 18. Qual è il ritardo massimo per setInterval?
- 19. Numero massimo di caratteri che il costruttore di stringhe può contenere
- 20. Qual è il punto di avere wmemcpy?
- 21. Qual è il numero massimo di caratteri in un messaggio USSD?
- 22. Qual è il numero massimo di elementi o dimensioni del file per un documento HTML?
- 23. Qual è il livello massimo di ereditarietà in java?
- 24. Qual è il numero massimo di caratteri consentiti in un attributo XML?
- 25. Qual è l'intervallo di valori che un float può avere in Python?
- 26. Qual è il valore massimo di NSInteger?
- 27. Il thread di Windows Win32 è sicuro?
- 28. qual è la differenza tra pool di thread di Windows e pool di thread CLR
- 29. Aumentare il numero di thread per processo di lavoro IIS
- 30. Esiste un limite massimo di bucket che può avere un progetto Google Cloud Storage?
Hai provato https://www.google.de/#q=What+is+the+maximum+number+of+threads+a+process+ puoi + avere + in + windows già? –
Ho provato questo. Il mio ultimo 64 bit Vista rifiuta di creare più di ~ 7000 thread, non ricordo la cifra esatta. –