Библиотеки C ++, которые реализуют Go-процедуры или каналы Go? - PullRequest
26 голосов
/ 15 декабря 2010

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

К сожалению, по ряду совершенно веских причин, проект должен оставаться на C ++. Итак, мой вопрос: есть ли библиотека C ++, которая приближает парадигму Go для параллелизма? В частности, есть ли приближение goroutines или go-каналов, доступных для C ++? Мой запасной план - просто использовать boost :: thread.

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

Ответы [ 4 ]

6 голосов
/ 16 декабря 2010

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

4 голосов
/ 15 декабря 2010

Этот вопрос , и в целом поиск в Google по запросу "сопрограммы C ++" должен помочь вам в этом. Так что вопрос предлагает попробовать Boost :: coroutine.

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

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

2 голосов
/ 16 декабря 2010

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

1 голос
/ 07 марта 2011

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

...