Si sta raggiungendo un limite rigido. Come altri hanno già detto ci possono essere due limitazioni:
- il numero di thread un processo può generare è limitata dal sistema operativo (globale o per ogni processo)
- la memoria è limitata e ogni filo riserva propria stack (in genere pochi MB e 4 MB * 900 -> 3,6 Go)
Per inciso, questo è ciò che è così interessante sulle routine di Google Go. Invece di generare il maggior numero possibile di thread, il runtime Go adatta il numero di thread al numero di core disponibili e multiplex manualmente le routine su questi thread fisici.
Inoltre, le routine sono leggere (prenotando solo 4 KB ciascuna) perché non utilizzano uno stack tradizionale (scomparsa dello Stack Overflow!), Il che significa che è possibile estendere in modo efficace alcune routine su una macchina tipica e non ti costerà molto.
Se si desidera sperimentare con estrema parallelismo:
- trovare il modo di ridurre lo spazio di stack allocato per thread (attenzione di Stack Overflow)
- interruttore to Go, o trovare un'altra lingua routine
attuazione
fonte
2010-10-15 07:21:58
Probabilmente esiste un limite del sistema operativo. Verifica con il manuale del tuo sistema. –
Solo per interesse, a cosa servono i 900 thread? –
@Mark: sembra un'istanza di thread 900 di Dining Philosophers. –