Nota : esta es una nueva publicación, ya que la pregunta se ha considerado no adecuada para el foro Stack Overflow y debería haberse publicado aquí. El tema original está ahí .
Me gustaría hablar de subprocesos múltiples, paralelismo y las bibliotecas disponibles hoy para lograr ese trabajo. Me pregunto especialmente si ya existe una biblioteca fácil de usar para lograr este concepto (que figura a continuación), o si tendría que estar escrita y qué tan difícil sería.
Los propósitos de la biblioteca que estoy buscando:
- accesible para la mayoría de los desarrolladores, no solo para ingenieros o personas altamente graduadas (esto debería significar que los desarrolladores QUIEREN usarlo, sin tenerle miedo)
- disponible para desarrolladores de C ++
- portátil (comience con Windows, Mac OS X y Linux, luego extienda a dispositivos móviles)
- ligero
- fácil de usar (relacionado con la accesibilidad)
Las características más importantes que estoy buscando:
- paralelismo de tareas
- cancelación de tareas (de manera suave y abrupta)
- dependencias de tareas
Las bibliotecas relacionadas existentes :
- Thread Building Blocks : realmente complicado de usar, y licencia bastante restrictiva (GPL / comercial), es la única biblioteca que he encontrado y que incluye todas las características que estoy buscando
- Grand Central Dispatch : actualmente no portátil, no demasiado complicado, sin cancelación de tareas (una vez iniciado), sin dependencias de tareas, sin soporte de dependencia automático (solo manual)
- PFunc : solo Unix, todavía un poco complicado, sin dependencia de tareas, sin cancelación de tareas
- Biblioteca paralela de tareas de Microsoft : plataforma MS y .NET únicamente, sin cancelaciones de hardware, dependencias de tareas restringidas y manuales (una tarea no puede activar más de otra tarea)
- OpenCL : actualmente no está disponible en todas las plataformas, no mucho más que una biblioteca de tareas paralelas de GPU (no tan alto nivel como desearía)
- OpenMP : ampliamente compatible, excepto versiones gratuitas de Visual Studio, sin cancelación de tareas ni dependencias de tareas automáticas
Entonces, ¿qué piensas sobre todo esto? ¿Por qué crees que hay tan pocas bibliotecas que corresponden a estas necesidades? ¿O extrañé alguna gran biblioteca? ¿Y crees que significaría demasiado trabajo lograr uno? O no lo suficientemente interesante? Tenga en cuenta que las carencias que escribí son las que descubrí con algunas búsquedas, no soy un experto en ninguna de estas bibliotecas.
El objetivo final de esta biblioteca, incluso si es más bien un sueño, sería programar de forma paralela tan fácilmente como normalmente lo hace con la programación secuencial.
Ceilo
Respuestas:
TBB es prácticamente todo lo que hay que se acerca.
boost::thread
Es demasiado bajo nivel. Por cierto, está buscando el TPL en el lugar equivocado: Microsoft envía una biblioteca separada llamada PPL para el código nativo. Por supuesto, solo es compatible con Windows.Sin embargo, si encuentra que TBB es complicado de usar, me preguntaría si los desarrolladores en los que está pensando son realmente capaces de crear aplicaciones paralelas. TBB tiene una de las interfaces más amigables con cosas simples como
parallel_for_each
. Si no puede lidiar con un par de lambdas, me resulta difícil ver cómo lidiará con la concurrencia.fuente