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

Существующая реализация threadpool C

Какие реализации с открытым исходным кодом в C для пула потоков pthreads вы бы порекомендовали?

Дополнительные точки, если эта реализация:

  • Легкий: glib, APR, NSPR и другие имеют большой бай-ин, у меня есть всего 2 файла (заголовок и реализация).
  • Протестировано на нескольких платформах (Linux, BSD, Mac OS X и т.д.).
  • Сохраняется.
4b9b3361

Ответ 1

Я работал над тем, что мог бы использовать, и я опубликовал его на github: он невообразимо называется threadpool.

Ответ 2

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

Не зная подробностей о вашем приложении, я не могу дать более конкретные рекомендации. Но инструменты, которые могут вам пригодиться, следующие:

  • Переменные условия
  • семафоры
  • Очередь заданий, защищенная мьютексом
  • очереди сообщений POSIX

Ответ 3

Я использовал этот, который фактически не является официальной реализацией как таковой. Он использует pthreads по вашему запросу и должен дать вам некоторые идеи о том, что вам нужно делать. (См. threadpool.h, threadpool.c, threadpool_test.c и Makefile для инструкций о том, как скомпилировать.) Очевидно, вам придется сделать рефакторинг как оригинальное намерение, вероятно, отличается от вашего. На самом деле он довольно хорошо комментировал.

Несмотря на то, что это отклоняется от первоначального вопроса, я также хотел бы упомянуть, что новейший стандарт C, неофициально C1X (см. википедию, ограничение гиперссылки), запланировал поддержку потоков N1570 (снова google, гиперссылка!) (7.31.15).

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

Наверное, я, кстати, сейчас болтаю, но, скорее всего, удачу.

Ответ 4

Вот реализация с этими функциями:

  • Совместимость с ANSI C и POSIX
  • Минимальный, но мощный API
  • Синхронизация с пользователем
  • Полная документация