Vous atteignez une limite stricte. Comme d'autres ont dit qu'il peut y avoir deux limites:
- le nombre de threads d'un processus peut Spawn est limité par le système d'exploitation (soit globalement, soit par processus)
- la mémoire disponible est limitée et chaque thread se réserve sa propre pile (généralement quelques Mo, et 4 Mo * 900 -> 3,6 Go)
Incidemment, c'est ce qui est si intéressant au sujet des routines Google Go. Au lieu de générer autant de thread que possible, Go Runtime adaptera le nombre de threads au nombre de cœurs disponibles et multiplexera manuellement les routines sur ces threads physiques. En outre, les routines sont légères (elles ne réservent que 4 Ko chacune) car elles n'utilisent pas de pile traditionnelle (disparition du dépassement de pile!), Ce qui signifie que vous pouvez efficacement parcourir quelques milliers de routines sur une machine standard et cela ne vous coûtera pas beaucoup.
Si vous souhaitez expérimenter le parallélisme extrême:
- trouver comment réduire l'espace de pile alloué par fil (méfiez-vous de débordement de la pile)
- switch to Go, ou trouver une autre langue mise en œuvre des routines
Il existe probablement une limite du système d'exploitation. Vérifiez avec le manuel de votre système. –
Juste par intérêt, à quoi servent les 900 fils? –
@Mark: ressemble à une instance de 900 threads de Dining Philosophers. –