Легкие, портативные волокна C++, лицензия MIT

Я хотел бы получить легкую, портативную оптоволоконную библиотеку с лицензией MIT (или более свободной). Boost.Coroutine не подходит (не облегченный), как и Portable Coroutine Library, и Kent C++CSP (оба GPL).

Изменить: не могли бы вы помочь мне найти один?:)

5 ответов

Решение
  1. Libtask: лицензия MIT
  2. Libconcurrency: LGPL (немного жестче, чем MIT, но это функциональная библиотека!)

Оба написаны для C.

Я действительно писал об этом в прошлом. Посмотри! Я надеюсь, что это отвечает на ваши вопросы. В нем я расскажу о ряде библиотек, и меня особенно интересовали библиотеки, которые были полезны для системного программирования (асинхронный ввод-вывод).

Очевидно, что в этом репортаже отсутствует Boost.Coroutine, о котором я расскажу здесь. Концептуально Boost.Coroutine можно считать "тяжеловесным" (с точки зрения его семейства типов), но реализация довольно эффективна. Реальная проблема заключается в том, что Boost.Coroutine неполный и (последний раз проверенный) далек от завершения. Я потратил некоторое время, пытаясь поработать с автором над его незапланированными проблемами, так как я действительно надеялся использовать его вместе с Boost.Asio (это было одной из основных целей Boost.Coroutine), но автор этого не сделал было время довести его работу до стадии официальной проверки Boost.

список реализаций для C

для сверхлегких "ниток" взгляните на Protothreads внизу статьи в Википедии.

Существует невероятно быстрая и легкая асимметричная библиотека сопрограмм C - libaco.

Это действительно маленький, очень быстрый и чрезвычайно эффективный по памяти:

Наряду с реализацией готовой к работе библиотеки C-сопрограмм, здесь представлена ​​подробная документация о том, как реализовать самую быструю и правильную библиотеку сопрограмм, а также со строгим математическим доказательством;

Он имеет не более 700 LOC, но имеет полную функцию, которую вы можете захотеть получить из библиотеки сопрограмм;

Часть теста показывает, что один раз переключения контекста между сопрограммами занимает всего около 10 нс (для случая автономного стека) на машине AWS c5d.large;

Пользователь может выбрать создание новой сопрограммы с автономным стеком или с общим стеком (может быть предоставлен другим пользователям);

Он чрезвычайно экономно использует память: 10 000 000 копий co для одновременной работы требуют только 2,8 ГБ физической памяти (при запуске с tcmalloc каждый co имеет конфигурацию размера стека копирования 120B).

Также имеется очень подробная документация.

PS:

Он находится под лицензией Apache версии 2.0.

Если Boost кажется слишком тяжелым, полезные люди извлекли соответствующие части Boost (fcontext) как отдельную библиотеку, например deboost.context.

Теперь у вас есть два лучших варианта с лицензией Boost:

Другие вопросы по тегам