Легкие портативные оптоволоконные кабели C++, лицензия MIT.
-
18-09-2019 - |
Вопрос
Я хотел бы получить легкую портативную оптоволоконную библиотеку с лицензией MIT (или более слабой).Boost.Coroutine не соответствует критериям (не облегченным), ни Portable Coroutine Library, ни Kent C++CSP (обе GPL).
Редактировать:не могли бы вы помочь мне найти его?:)
Решение
- Либтаск:Лицензия MIT
- Libconcurrency:LGPL (немного жестче, чем MIT, но это функциональный библиотека!)
Оба написаны для C.
Другие советы
я вообще-то в блоге об этом в прошлом.Взгляни!Я надеюсь, что это ответит на ваши вопросы.В нем я рассматриваю ряд библиотек, и меня особенно интересовали те, которые были полезны для системного программирования (асинхронный ввод-вывод).
В этом освещении явно отсутствует Boost.Coroutine, о котором я расскажу здесь.Концептуально Boost.Coroutine можно считать «тяжеловесом» (с точки зрения семейства типов), но реализация довольно эффективна.Настоящая проблема заключается в том, что Boost.Coroutine неполный и (последний раз, когда я проверял) далек от завершения.Я потратил некоторое время, пытаясь поработать с автором над решением проблем, с которыми он не начинался, так как мне очень хотелось использовать его вместе с Boost.Asio (это была одна из основных целей Boost.Coroutine), но автор этого не сделал. у него было время довести свою работу до стадии формальной проверки Boost.
для сверхлегких «потоков» взгляните на Protothreads в нижней части статьи в Википедии.
Теперь у вас есть два лучших варианта с лицензией Boost:
Существует невероятно быстрая и легкая библиотека асимметричных сопрограмм C — Либако.
Он действительно маленький, очень быстрый и чрезвычайно эффективный по памяти:
Наряду с реализацией готовой производственной библиотеки C Coroutine, вот подробная документация о том, как реализовать самую быструю и правильную библиотеку Coroutine, а также строгое математическое доказательство;
Он имеет не более 700 LOC, но имеет полную функцию, которую вы можете захотеть из библиотеки Coroutine;
Тенковая часть показывает, что одно время переключения контекста между Coroutines занимает всего около 10 нс (для случая автономного стека) на машине AWS C5D.Large;
Пользователь мог бы выбрать создание новой Coroutine с автономным стеком или со стеком общего пользования (можно обмениваться с другими);
Это чрезвычайно эффективно использует память:10 000 000 Сумма CO одновременно для запуска только 2,8 ГБ физической памяти (запустите с TCMALLOC, каждый CO имеет конфигурацию размера Copy-Stack 120B).
Он также имеет очень подробную документацию.
ПС:
Он находится под лицензией Apache версии 2.0.