Легкие, портативные волокна C++, лицензия MIT
Я хотел бы получить легкую, портативную оптоволоконную библиотеку с лицензией MIT (или более свободной). Boost.Coroutine не подходит (не облегченный), как и Portable Coroutine Library, и Kent C++CSP (оба GPL).
Изменить: не могли бы вы помочь мне найти один?:)
5 ответов
- Libtask: лицензия MIT
- Libconcurrency: LGPL (немного жестче, чем MIT, но это функциональная библиотека!)
Оба написаны для C.
Я действительно писал об этом в прошлом. Посмотри! Я надеюсь, что это отвечает на ваши вопросы. В нем я расскажу о ряде библиотек, и меня особенно интересовали библиотеки, которые были полезны для системного программирования (асинхронный ввод-вывод).
Очевидно, что в этом репортаже отсутствует Boost.Coroutine, о котором я расскажу здесь. Концептуально Boost.Coroutine можно считать "тяжеловесным" (с точки зрения его семейства типов), но реализация довольно эффективна. Реальная проблема заключается в том, что Boost.Coroutine неполный и (последний раз проверенный) далек от завершения. Я потратил некоторое время, пытаясь поработать с автором над его незапланированными проблемами, так как я действительно надеялся использовать его вместе с Boost.Asio (это было одной из основных целей Boost.Coroutine), но автор этого не сделал было время довести его работу до стадии официальной проверки Boost.
для сверхлегких "ниток" взгляните на 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: