tag optimized near moz images for example description and alternative c multithreading open-source pthreads threadpool

c - near - seo optimized images



Implementación existente de C de subprocesos (4)

¿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 mantenido.

Si su objetivo es liviano, lo último que desea es una implementación preescrita, de propósito general y abstracción de alto nivel. Implementar un grupo de subprocesos, adecuado para su tarea particular, es bastante trivial, pero también podría cuestionarse 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 aplicación, no puedo dar consejos mucho más específicos. Pero las herramientas que puede encontrar útiles son:

  • Variables de condición
  • Semáforos
  • Una cola de trabajos protegida por un mutex
  • Colas de mensajes POSIX

Trabajé para hacer algo que podría usar y lo publiqué en github: se lo conoce inimaginablemente como " threadpool .


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

  • Cumple con ANSI C y POSIX
  • API mínima pero potente
  • Sincronización del usuario
  • Documentación completa

Una vez usé this , que en realidad no es una implementación oficial per se. Utiliza pthreads como lo solicitó, y debe darle algunas ideas de lo que debe hacer. (Consulte threadpool.h , threadpool.c , threadpool_test.c , y Makefile para obtener instrucciones sobre cómo compilar.) Obviamente tendrá que hacer algunas refactorizaciones, ya que su intención original probablemente sea diferente a la suya. Se comentó bastante bien en realidad.

Aunque esto se desvía de la pregunta original, también me gustaría mencionar que el nuevo estándar C, extraoficialmente C1X (ver wikipedia, límite de hipervínculo), tiene soporte planificado para hilos N1570 (google it, límite de hipervínculo nuevamente) (7.31. 15).

Algunos consejos personales de mi experiencia serían asegurarme de que su aplicación se pueda ejecutar en paralelo, y si la sobrecarga de crear un nuevo hilo es tan alta que no puede vivir sin un grupo de hilos. Personalmente cometí un error en ambas partes y de hecho terminé con implementaciones más lentas que mi aplicación de un solo hilo. Además, es posible que desee conocer los diferentes problemas, incluidos los bloqueos y fallas de caché, que en realidad degradarían el rendimiento de su aplicación.

Probablemente estoy parloteando a estas alturas, pero la mejor de las suertes.