Linux no tiene un límite de subprocesos separados por proceso, solo un límite en la cantidad total de procesos en el sistema (los subprocesos son esencialmente solo procesos con un espacio de direcciones compartido en Linux) que puede ver así:
cat /proc/sys/kernel/threads-max
El valor predeterminado es el número de páginas de memoria/4. Puede aumentar esto como:
echo 100000 > /proc/sys/kernel/threads-max
También hay un límite en la cantidad de procesos (y, por lo tanto, subprocesos) que un solo usuario puede crear, consulte ulimit/getrlimit
para obtener detalles sobre estos límites.
Es INCORRECTO decir que LINUX no tiene hilos separados por límite de proceso.
¡Linux implementa el número máximo de subprocesos por proceso de forma indirecta!
number of threads = total virtual memory / (stack size*1024*1024)
Por lo tanto, la cantidad de subprocesos por proceso se puede aumentar aumentando la memoria virtual total o disminuyendo el tamaño de la pila. Sin embargo, disminuir demasiado el tamaño de la pila puede provocar fallas en el código debido al desbordamiento de la pila, mientras que la memoria virtual máxima es igual a la memoria de intercambio.
Revise su máquina:
Memoria virtual total:ulimit -v
(el valor predeterminado es ilimitado, por lo que debe aumentar la memoria de intercambio para aumentar esto)
Tamaño total de la pila:ulimit -s
(el valor predeterminado es 8Mb)
Comando para aumentar estos valores:
ulimit -s newvalue
ulimit -v newvalue
*Reemplace el nuevo valor con el valor que desea poner como límite.
Referencias:
http://dustycodes.wordpress.com/2012/02/09/aumento-del-número-de-hilos-por-proceso/
En términos prácticos, el límite suele estar determinado por el espacio de la pila. Si cada subproceso obtiene una pila de 1 MB (no recuerdo si ese es el valor predeterminado en Linux), entonces un sistema de 32 bits se quedará sin espacio de direcciones después de 3000 subprocesos (suponiendo que el último gb esté reservado para el kernel) .
Sin embargo, lo más probable es que experimente un rendimiento terrible si utiliza más de unas pocas docenas de subprocesos. Tarde o temprano, obtiene demasiada sobrecarga de cambio de contexto, demasiada sobrecarga en el programador, etc. (Crear una gran cantidad de subprocesos no hace más que consumir mucha memoria. Pero muchos subprocesos con trabajo real hacer lo ralentizará ya que están luchando por el tiempo de CPU disponible)
¿Qué estás haciendo donde este límite es incluso relevante?