Возможно, я смогу дать ответы на некоторые из этих вопросов.
вся логика libtorrents, включая работу с сетью и дисковый ввод-вывод, выполняется в отдельных потоках. Так что, в целом, проблема «блокировки» не так уж и велика. Предполагая, что вы имеете в виду, что функции libtorrent не возвращаются немедленно.
Некоторые операции гарантированно возвращаются немедленно, функции, которые не возвращают никакого состояния или информации. Однако функции, которые что-то возвращают, должны синхронизироваться с основным потоком libtorrent, и если он сильно загружен (особенно при сборке в режиме отладки с инвариантными проверками и без оптимизации) эта синхронизация может быть заметной, особенно при их большом количестве, и часто.
Существуют способы использования libtorrent, которые являются более асинхронными по своей природе, и постоянно предпринимаются усилия по минимизации необходимости использования синхронизирующих функций. Например, вместо того, чтобы запрашивать статус всех торрентов по отдельности, можно подписаться на обновления статуса торрентов. Асинхронные уведомления возвращаются через pop_alerts().
Будет ли это мешать epoll скрученной; Точно сказать не могу, но маловероятно.
Я не думаю, что есть необходимость взаимодействовать с libtorrent через другой слой потоков, так как вся работа уже выполняется в отдельных потоках.
person
Arvid
schedule
08.03.2013