4

我正在研究使用 twisted 构建多协议应用程序。其中一种协议是 bittorrent。由于 libtorrent 是一个相当完整的实现,它的 python 绑定似乎是一个不错的选择。现在的问题是:

  • 当使用 libtorrent with twisted 时,我需要担心阻塞吗?
  • libtorrent 网络层(使用 boost.asio,一个异步网络循环)是否会以任何方式干扰扭曲的 epoll?
  • 我应该在线程中运行 libtorrent 会话还是针对多进程应用程序设计?
4

1 回答 1

2

我也许能够为其中一些问题提供答案。

所有的 libtorrents 逻辑,包括网络和磁盘 I/O 都是在单独的线程中完成的。所以,总的来说,“阻塞”的关注度并没有那么大。假设您的意思是 libtorrent 函数不会立即返回。

有些操作保证立即返回,函数不返回任何状态或信息。但是,确实返回某些内容的函数必须与 libtorrent 主线程同步,并且如果它处于重负载下(尤其是在具有不变检查且没有优化的调试模式下构建时),这种同步可能会很明显,尤其是在制作许多它们时,并且经常。

有一些方法可以使用本质上更加异步的 libtorrent,并且正在努力最大限度地减少使用同步功能的需求。例如,可以订阅 torrent 状态更新,而不是单独查询所有 torrent 的状态。异步通知通过 pop_alerts() 返回。

是否会干扰twisted的epoll;我不能肯定地说,但似乎不太可能。

我认为不需要通过另一层线程与 libtorrent 进行交互,因为所有工作都已经在单独的线程中完成。

于 2013-03-08T17:26:29.517 回答