Implementación existente de threadpool C [cerrada]


¿Qué implementación(es) de código abierto en C para un grupo de subprocesos pthreads recomendaría ?

Puntos adicionales si esta implementación es :

  • Ligero: glib, APR, NSPR y otros vienen con un gran buy-in, prefiero tener solo 2 archivos (encabezado e implementación).
  • Probado en varias plataformas (Linux, BSD, Mac OS X, etc.).
  • Aún se mantiene.
Author: Mathias Brossard, 2011-06-09

4 answers

Trabajé en hacer algo que pudiera usar y lo he publicado en github: se llama inimaginablemente threadpool.

 22
Author: Mathias Brossard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-24 00:42:10

Si su objetivo es ligero, entonces lo último que desea es una implementación preescrita, de propósito súper general, basada en la abstracción de alto nivel. Implementar un grupo de subprocesos usted mismo, adecuado para su tarea particular, es bastante trivial, pero también podría preguntarse si realmente necesita un grupo de subprocesos o si estaría bien simplemente creando y destruyendo subprocesos según sea necesario.

Sin conocer más detalles sobre su solicitud, no puedo dar consejos mucho más específicos. Pero las herramientas usted puede encontrar útiles son:

  • Variables de condición
  • Semáforos
  • Una cola de trabajos protegida por un mutex
  • Colas de mensajes POSIX
 9
Author: R..,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-09 18:38:52

Aquí hay una implementación con estas características:

  • Compatible con ANSI C y POSIX
  • API mínima pero potente
  • Sincronización del usuario
  • Documentación completa
 3
Author: Pithikos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-24 16:01:31

Una vez usé esto, que en realidad no es una implementación oficial per se. Usa pthreads como lo solicitaste, y debería darte algunas ideas de lo que necesitas hacer. (Véase threadpool.h, threadpool.c, threadpool_test.c, y el Makefile para instrucciones sobre cómo compilar.) Obviamente tendrás que hacer alguna refactorización ya que su intención original es probablemente diferente a la tuya. Está bastante bien comentado en realidad.

Aunque esto se desvía de la pregunta original, también me gustaría mencione que el nuevo estándar C, extraoficialmente C1X (vea wikipedia, límite de hipervínculo), ha planeado soporte para hilos N1570 (google it, límite de hipervínculo de nuevo!) (7.31.15).

Algunos consejos personales de mi experiencia serían asegurarse de que su aplicación puede realmente ejecutarse en paralelo, y si la sobrecarga de crear un nuevo hilo es tan alta que no puede vivir sin un grupo de hilos. Personalmente me he equivocado en ambas partes y en realidad he terminado con implementaciones más lentas que mi aplicación de subproceso único. Además, es posible que desee estar al tanto de diferentes problemas, incluidos los bloqueos de caché y las fallas, que en realidad degradarían el rendimiento de su aplicación.

Probablemente ya esté parloteando, pero mucha suerte.

 2
Author: Arka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-23 23:47:10