4

NAT の実装を書いています。私のアルゴリズムは次のとおりです。

  1. パケットが入る
  2. 外部の場合はルックアップ テーブルに対してチェックし、内部の場合はルックアップ テーブルに追加します
  3. 送信元アドレスを交換し、途中でパケットを送信します

私は Twisted について読んでいます。Twisted がマルチコア CPU を利用しているかどうかに興味がありましたか? システムに何千ものユーザーがいて、1 つのパケットが次々と来るとします。ツイストを使用すると、ルックアップ テーブル操作を各コアで同時に実行できます。いずれにせよ、スレッドでは GIL がこれを許可しないと聞いています。おそらく、マルチプロセッシングの恩恵を受けることができます>

Nginix は非同期であり、同時に何千ものユーザーに喜んでサービスを提供します。

4

1 に答える 1

5

ねじれたスレッドを使用することはお勧めできません。非同期で使用すると非常に優れたパフォーマンスを発揮しますが、リクエスト ハンドラー用に記述したコードがブロックされないようにする必要があります。したがって、ハンドラーが非常に大きなコードの場合は、それを小さな部分に分割し、ツイストの有名なを利用しDeferredsて、コールバックを介して他の部分をアタッチします。確かに、ほとんどのプログラマーが慣れ親しんでいるものとは多少異なる考え方が必要ですが、利点があります。コードにデータベース操作などのブロック部分がある場合、またはネットワーク経由で他のリソースにアクセスして結果を得る場合は、それらのタスク用の非同期ライブラリも見つけてみてください。そうすればDeferreds、それらの場合でも使用できます。非同期ライブラリを使用できない場合は、最終的にdeferToThread関数を使用できます。これにより、呼び出したい関数が別のスレッドで実行され、Deferredそのために、終了時にコールバックを起動しますが、他に何もできない場合は、最後の手段としてそれを使用することをお勧めします。

の公式チュートリアルは次のDeferredsとおりです。

http://twistedmatrix.com/documents/10.1.0/core/howto/deferredindepth.html

そして、「非同期モード」で考えることに慣れるのに役立つもう1つの素晴らしいガイド:

http://ezyang.com/twisted/defer2.html

于 2012-10-29T05:51:06.800 に答える