4

ツイストを使用したマルチプロトコル アプリケーションの構築を検討しています。これらのプロトコルの 1 つが bittorrent です。libtorrent はかなり完全な実装であるため、その python バインディングは適切な選択のようです。問題は次のとおりです。

  • ツイストで libtorrent を使用する場合、ブロッキングについて心配する必要はありますか?
  • libtorrent ネットワーク レイヤー (非同期ネットワーク ループである boost.asio を使用) は、ねじれた epoll と何らかの形で干渉しますか?
  • libtorrent セッションをスレッドで実行するか、マルチプロセス アプリケーション設計をターゲットにする必要がありますか?
4

1 に答える 1

2

それらの質問のいくつかに答えを提供できるかもしれません。

ネットワークとディスク I/O を含むすべての libtorrents ロジックは、個別のスレッドで実行されます。したがって、全体として、「ブロッキング」の懸念はそれほど大きくありません。libtorrent 関数がすぐに返されないことを意味すると仮定します。

一部の操作は、状態や情報を返さない関数である、すぐに返されることが保証されています。ただし、何かを返す関数は、libtorrent メイン スレッドと同期する必要があり、負荷が高い場合 (特に、不変チェックと最適化なしのデバッグ モードでビルドされている場合)、この同期は、特にそれらの多くを作成するときに顕著になる場合があります。そしてしばしば。

本質的により非同期的な libtorrent を使用する方法があり、同期する関数を使用する必要性を最小限に抑えるための継続的な努力があります。たとえば、すべての torrent のステータスを個別にクエリする代わりに、torrent ステータスの更新を購読できます。非同期通知は、pop_alerts() を介して返されます。

twisted の epoll に干渉するかどうか。はっきりとは言えませんが、可能性は低いと思います。

すべての作業はすでに別のスレッドで行われているため、スレッドの別の層を介して libtorrent と対話する必要はあまりないと思います。

于 2013-03-08T17:26:29.517 に答える