Esiste un limite al numero di thread che possono essere generati contemporaneamente?

2

Ieri mi sono imbattuto in questa domanda: Come posso chiamare robocopy all'interno di uno script python per copiare in massa più cartelle? , e anche se potrebbe essere un buon esercizio per il multithreading.

Ho pensato di generare il maggior numero di thread dei file necessari per essere copiato, ogni routine con un sistema di gestione delle eccezioni per impedire l'arresto dell'intero processo di copia (e log -uso mutex sul file di log - se c'è stato un errore).

La mia domanda: C'è un limite al numero di thread che puoi generare quasi simultaneamente? Se sì, qual è il fattore limitante?

La mia domanda è incentrata sul desktop del PC, ma accolgo con favore qualsiasi risposta su hardware diverso (sistemi embedded, cluster di calcolo, ecc.).

    
posta lucasg 01.11.2012 - 14:43
fonte

1 risposta

4

Una rapida query su google ha rivelato questo articolo sui limiti dei processi e discussioni in Windows. Sembra abbastanza approfondito, e ci sono altri articoli su come spingere i limiti nella stessa serie.

Non l'ho letto, ma da quello che ho guardato, su un sistema a 32 bit sarai solo in grado di creare un po 'più di 2000 thread e quindi ti verrà a mancare la memoria (o piuttosto, lo spazio dell'indirizzo , perché un processo a 32 bit ha un limite di indirizzo di 2 GB). E questo è solo per i thread vuoti, che non fanno nulla.

Inoltre, per una copia di una routine che genera un numero così elevato di thread potrebbe devastare le prestazioni. Non solo ci sarebbe un'enorme quantità di commutazione di contesto in corso, ma anche il disco di origine sarebbe sballato dal momento che tutti i thread hanno cercato di leggerlo allo stesso tempo. Potrebbe essere meglio per un SSD, ma significherebbe comunque un'enorme coda di I / O da mantenere.

Tutto sommato non sto dicendo che un'operazione di copia di file non possa trarre vantaggio dal multithreading, ma la creazione cieca di un thread per ogni file non risolve nulla. Perché in un'operazione di copia non è la CPU il collo di bottiglia: è il disco (o la rete, se stai copiando sulla rete). Quindi qualsiasi ottimizzazione dovrebbe prima risolvere questi problemi.

    
risposta data 01.11.2012 - 14:55
fonte

Leggi altre domande sui tag