Подтвердить что ты не робот

С++ библиотеки, которые реализуют Go goroutines или Go channels?

Я работаю с базой кода С++ среднего размера, которая в настоящее время полностью однопоточная. Однако пришло время преследовать concurrency и parallelism для повышения производительности. Меня очень интересует модель языка программирования Google Go concurrency, с очень легкими goroutines и системой каналов связи.

К сожалению, по целому ряду вполне обоснованных причин проект должен оставаться на С++. Поэтому мой вопрос: есть ли библиотека С++, которая аппроксимирует парадигму Go для parallelism? В частности, существует ли приближение goroutines или каналов, доступных для С++? Мой резервный план - просто использовать boost:: thread.

Данное приложение представляет собой долгосрочную проприетарную симуляцию для домена финансового прогнозирования. Он обычно связан с процессором, но также блокируется при IO при появлении новых данных. Многие из рассматриваемых вычислений не зависят от предыдущих результатов и могут быть довольно легко выполняться параллельно. Возможность запуска приложения в распределенном контексте - это долгосрочная цель, но не та, которая должна быть решена немедленно.

4b9b3361

Ответ 1

Если ваша цель в первую очередь ускоряет вычисления, Intel TBB (Threading Building Blocks) - это (ИМХО) лучший вариант, чем сканирование ваших собственная нижняя версия от boost::thread.

Ответ 2

Этот вопрос и в целом поиск Google для "С++ сопрограммы" должен получить вам что-то близкое. Вопрос SO предлагает попробовать Boost:: coroutine.

Если вы не против упаковки C, вы можете попробовать libtask. Это было написано Русом Коксом (одной из официальных команд Go Go), прежде чем началась работа над Go. Я использовал его только в C, но я не знаю, применимо ли оно.

Каналы Go реализуются как блокирующие очереди между прочим, поэтому вы можете включить аналогичный механизм, используя обычные потоки.

Ответ 3

Попробуйте библиотеку GBL, в нем есть все: сопрограммы (волокна), потоки, синхронизаторы и асинхронные обработчики, а также все современные С++.

Ответ 4

Из того, что я видел до сих пор, cilk, похоже, очень похож на стиль стиля parallelism. Похоже, что Intel купила его и предоставляет коммерческую поддержку Intel Cilk Plus.