Ответ 1
Если ваша цель в первую очередь ускоряет вычисления, Intel TBB (Threading Building Blocks) - это (ИМХО) лучший вариант, чем сканирование ваших собственная нижняя версия от boost::thread
.
Я работаю с базой кода С++ среднего размера, которая в настоящее время полностью однопоточная. Однако пришло время преследовать concurrency и parallelism для повышения производительности. Меня очень интересует модель языка программирования Google Go concurrency, с очень легкими goroutines и системой каналов связи.
К сожалению, по целому ряду вполне обоснованных причин проект должен оставаться на С++. Поэтому мой вопрос: есть ли библиотека С++, которая аппроксимирует парадигму Go для parallelism? В частности, существует ли приближение goroutines или каналов, доступных для С++? Мой резервный план - просто использовать boost:: thread.
Данное приложение представляет собой долгосрочную проприетарную симуляцию для домена финансового прогнозирования. Он обычно связан с процессором, но также блокируется при IO при появлении новых данных. Многие из рассматриваемых вычислений не зависят от предыдущих результатов и могут быть довольно легко выполняться параллельно. Возможность запуска приложения в распределенном контексте - это долгосрочная цель, но не та, которая должна быть решена немедленно.
Если ваша цель в первую очередь ускоряет вычисления, Intel TBB (Threading Building Blocks) - это (ИМХО) лучший вариант, чем сканирование ваших собственная нижняя версия от boost::thread
.
Этот вопрос и в целом поиск Google для "С++ сопрограммы" должен получить вам что-то близкое. Вопрос SO предлагает попробовать Boost:: coroutine.
Если вы не против упаковки C, вы можете попробовать libtask. Это было написано Русом Коксом (одной из официальных команд Go Go), прежде чем началась работа над Go. Я использовал его только в C, но я не знаю, применимо ли оно.
Каналы Go реализуются как блокирующие очереди между прочим, поэтому вы можете включить аналогичный механизм, используя обычные потоки.
Попробуйте библиотеку GBL, в нем есть все: сопрограммы (волокна), потоки, синхронизаторы и асинхронные обработчики, а также все современные С++.
Из того, что я видел до сих пор, cilk, похоже, очень похож на стиль стиля parallelism. Похоже, что Intel купила его и предоставляет коммерческую поддержку Intel Cilk Plus.