¿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
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.
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.
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.
- 1. ¿Qué ThreadPool en Java debería usar?
- 2. ¿Por qué Ruby no tiene un ThreadPool incorporado?
- 3. ¿es aceptable usar ThreadPool en una biblioteca?
- 4. Thread vs ThreadPool
- 5. Uso de Java ThreadPool
- 6. ThreadPool max threads
- 7. ¿Cómo depurar un threadpool en Visual Studio?
- 8. Tareas vs ThreadPool
- 9. Opción TaskCreationOptions.LongRunning y ThreadPool
- 10. .NET ThreadPool QueueUserWorkItem Sincronización
- 11. Generic ThreadPool en .NET
- 12. ThreadPool de procesos CLI
- 13. Punto muerto en ThreadPool
- 14. Pregunta de diseño de Threadpool
- 15. excepciones en las discusiones ThreadPool
- 16. Subproceso de llamada.Abordear un subproceso de un ThreadPool
- 17. Cómo utilizar la clase ThreadPool
- 18. boost :: asio threadpool vs. io_service_per_cpu design
- 19. ¿Cómo se puede reutilizar un threadpool después del cierre
- 20. .NET Threadpool personalizado con instancias separadas
- 21. Nombre del hilo en el ThreadPool - C#
- 22. asp.net ThreadPool - operación de larga duración
- 23. ¿Func <T> .BeginInvoke usa ThreadPool?
- 24. C# ThreadPool QueueUserWorkItem Manejo de excepciones
- 25. ThreadPool SetMaxThreads y SetMinThreads Número mágico
- 26. ¿Qué es un Pagelet?
- 27. ¿Qué es un UUID?
- 28. Qué es un Sandbox
- 29. ¿Qué es un antipatrón?
- 30. ¿Qué es un índice?
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
¿quién dijo que N era un número entero y quién dijo que era> = 1? – Blah0x7B9
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