2009-12-22 13 views
11

¿Es posible de algún modo cambiar el límite de la cantidad de subprocesos que puede crear un proceso? Actualmente, en mi sistema Linux puedo crear alrededor de 380 subprocesos, pero quiero aumentar eso para decirlo mientras haya memoria disponible.Cambiar el límite del número máximo de subprocesos por una aplicación

+2

Interesante ... ¿ha considerado algunas de las implicaciones de tal ¿diseño de sistemas? El punto único de falla (SPOF) viene a la mente. – jldupont

+0

No soy un experto, pero apostaría que tener más de 380 hilos saturará tu procesador con los cambios de contexto. La conmutación de contexto para un subproceso es menor que para un proceso separado, pero aún debe guardar el contador del programa y el archivo de registro, y quizás algunas otras cosas que me estoy olvidando. ¿Cuántos hilos crees que necesitas? Sugeriría crear un perfil de su aplicación para determinar la sobrecarga del hilo para 10 hilos frente a 100 hilos y luego tratar de extrapolar a su número objetivo de hilos. Puede descubrir que no vale la pena el esfuerzo. O tal vez estoy equivocado ... –

+0

No lo usaré prácticamente en ningún lado ... ¿pero lo necesito para algunos experimentos? – Sukanto

Respuesta

1

vistazo a esto:

Maximum number of threads per process in Linux?

y echar un vistazo a esto, ya que podría pertenecer a su pregunta:

Serve one client with each server thread

+0

' cat?/proc/sys/kernel/threads-max' muestra '16384'. Pero no puedo crear más de 380 pthreads. Incluso traté de poner una función en blanco como cuerpo de los hilos. – Sukanto

+0

¿Qué error obtienes? –

+0

después de 380 hilos Obtengo 'EAGAIN' como valor de retorno de' pthread_create() ', que según la página man' pthread_create() 'es" El sistema carecía de los recursos necesarios para crear otro hilo, o el límite impuesto por el sistema en el se excederá el número total de subprocesos en un proceso {PTHREAD_THREADS_MAX} ". – Sukanto

3

Su problema es que no ha llamado pthread_detach en los hilos en cuestión. Esto le dice a pthread que los recursos asociados con cada subproceso se liberarán cuando finalice el subproceso. Debe invocar pthread_join o pthread_release en todos los subprocesos para liberar recursos de subprocesos. Eso significa que también debe llamar a pthread_detach en sus controladores de cancelación pthread_join o a la fuga.

6

reducir el tamaño de la pila del usuario 'ulimit -s 1024';

default: 8MB 
reduced: 1MB 

para aumentar el número de subprocesos.

ajustar el tamaño de la pila: pthread_attr_setstacksize(1024)

Cuestiones relacionadas