2009-07-27 20 views
5

¿Cuál es el concepto de implementar Thread-pool (en C con ayuda de pthreads)? ¿cómo se puede asignar un hilo para ejecutar desde el grupo de subprocesos?¿Qué es un Thread-pool?

Respuesta

9

Un grupo de subprocesos es una colección de un número fijo de subprocesos que se crean al iniciar la aplicación. Los subprocesos se quedan esperando a que lleguen las solicitudes, generalmente a través de una cola controlada por un semáforo. Cuando se realiza una solicitud y hay al menos un hilo en espera, el hilo se activa, atiende la solicitud y vuelve a esperar en el semáforo. Si no hay subprocesos disponibles, las solicitudes se ponen en cola hasta que uno esté.

Las agrupaciones de subprocesos son, por lo general, una forma más eficiente de administrar recursos que simplemente iniciar una nueva secuencia para cada solicitud. Sin embargo, algunas arquitecturas permiten que se creen subprocesos nuevos y se agreguen al grupo a medida que se ejecuta la aplicación, dependiendo de la carga de la solicitud.

2

Agregando a la respuesta de anon me gustaría mencionar que hay grupos de subprocesos fijos que tienen números fijos de subprocesos que se ejecutan en ellos; Conjuntos de subprocesos en caché que pueden crecer dinámicamente y luego disminuir cuando no hay trabajo disponible; Los grupos de subprocesos dinámicos también pueden vincularse por el número máximo de subprocesos y/o la longitud máxima de la cola de trabajo. No creo que haya una terminología establecida para este tipo de cosas y rara vez se encuentran TP no fijas escritas en C, pero al menos uno debe saber que el TP fijo no es el único que existe.

3

Para aclarar algo en respuestas anteriores:

La razón de que instanciar cada vez más hilos conduce a la ineficiencia es contexto temporal conmutación. El sistema operativo cambia periódicamente un hilo por otro en el procesador. Esto implica guardar el estado de un hilo y cargar el estado de otro hilo desde la memoria, por lo que toma un tiempo no despreciable, N ms, por cambio de contexto.

Por ejemplo, si tiene 10 hilos, el contexto cambia a takex 10 * N ms. Si tiene 1000 hilos, es 1000 * N ms. A medida que aumenta el número de subprocesos concurrentes, eventualmente el cambio de contexto comienza a desbordar cualquier eficiencia derivada del multihilo. Su aplicación tiene un punto óptimo en términos de la mejor cantidad de hilos. Una vez que determine este número dulce mediante la experimentación, puede establecer el tamaño máximo de su grupo de subprocesos a esa cantidad de subprocesos, obteniendo así la máxima eficacia del multithreading.

+0

Es poco probable que el cambio de contexto tarde incluso 1 ms, generalmente estas son más parecidas a nosotros. Todo lo demás es muy bueno. – CrazyCasta

+0

¿quién dijo que N era un número entero y quién dijo que era> = 1? – Blah0x7B9

+0

Usando las unidades ms sugiere que el tiempo será del orden de ms. Creo que la mayoría de las personas que leen tu respuesta no pensarían que el tiempo de cambio de contexto era alrededor de 1 por ejemplo. – CrazyCasta