que programacion principales librerias lenguaje funciones dev descargar definicion clases biblioteca c++ concurrency go

c++ - programacion - principales librerias en lenguaje c



¿Bibliotecas C++ que implementan Go goroutines o los canales Go? (4)

Por lo que he visto hasta ahora, cilk parece ser bastante similar al estilo de paralelismo de Go. Parece que Intel lo ha comprado y proporciona soporte comercial con Intel Cilk Plus .

Estoy trabajando con una base de código C ++ de tamaño mediano que actualmente es completamente de un solo hilo. Sin embargo, ha llegado el momento de buscar la concurrencia y el paralelismo para obtener mejoras en el rendimiento. Estoy muy interesado en el modelo de concurrencia del lenguaje de programación Go de Google, con goroutines muy ligeros y un sistema de canales de comunicación.

Lamentablemente, por una variedad de razones perfectamente válidas, el proyecto debe permanecer en C ++. Entonces mi pregunta es: ¿Existe una biblioteca de C ++ que se aproxime al paradigma de Go para el paralelismo? Específicamente, ¿hay una aproximación de goroutines o canales de Go disponibles para C ++? Mi plan de reserva es solo usar boost :: thread.

La aplicación en cuestión es una simulación propietaria de larga duración para el dominio de pronóstico financiero. Normalmente está enlazado a la CPU, pero también se bloquea en IO cuando hay nuevos datos disponibles. Muchos de los cálculos involucrados no dependen de los resultados anteriores y podrían realizarse de manera bastante sencilla para ejecutarse en paralelo. Ser capaz de ejecutar la aplicación en un contexto distribuido es un objetivo a largo plazo, pero no uno que deba resolverse de inmediato.


Pruebe la biblioteca GBL , tiene todo: coroutines (fibras), hilos, sincronizadores y controladores asíncronos, y todo es moderno en C ++.


Esta pregunta y, en general, una búsqueda en Google de "C ++ coroutines" deberían acercarle algo. La pregunta de SO sugiere probar Boost :: coroutine.

Si no te importa ajustar C, puedes probar libtask . Lo que fue escrito por Russ Cox (uno de los miembros del equipo oficial de Go Dev) antes de que comenzara el trabajo en Go. Sin embargo, solo lo he usado en C, así que no sé si es aplicable.

Por cierto, los canales de Go se implementan como colas de bloqueo, por lo que es posible que pueda incorporar un mecanismo similar utilizando subprocesos regulares.


Si su objetivo es principalmente acelerar el proceso informático, TBB (Threading Building Blocks) de Intel es (IMHO) una mejor opción que sacar su propia versión inferior de boost::thread .