Twisted и libtorrent — нужно ли беспокоиться о блокировке?

Я изучаю создание многопротокольного приложения с использованием Twisted. Одним из таких протоколов является битторрент. Поскольку libtorrent является довольно полной реализацией, и его привязки к python кажутся хорошим выбором. Теперь вопрос:

  • При использовании libtorrent с Twisted, нужно ли мне беспокоиться о блокировке?
  • Влияет ли сетевой уровень libtorrent (использующий boost.asio, асинхронный сетевой цикл) на скрученный epoll?
  • Должен ли я, возможно, запускать сеанс libtorrent в потоке или ориентироваться на дизайн многопроцессорного приложения?

person user2035365    schedule 04.03.2013    source источник


Ответы (1)


Возможно, я смогу дать ответы на некоторые из этих вопросов.

вся логика libtorrents, включая работу с сетью и дисковый ввод-вывод, выполняется в отдельных потоках. Так что, в целом, проблема «блокировки» не так уж и велика. Предполагая, что вы имеете в виду, что функции libtorrent не возвращаются немедленно.

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

Существуют способы использования libtorrent, которые являются более асинхронными по своей природе, и постоянно предпринимаются усилия по минимизации необходимости использования синхронизирующих функций. Например, вместо того, чтобы запрашивать статус всех торрентов по отдельности, можно подписаться на обновления статуса торрентов. Асинхронные уведомления возвращаются через pop_alerts().

Будет ли это мешать epoll скрученной; Точно сказать не могу, но маловероятно.

Я не думаю, что есть необходимость взаимодействовать с libtorrent через другой слой потоков, так как вся работа уже выполняется в отдельных потоках.

person Arvid    schedule 08.03.2013