2

タスク キュー/スレッド プール パターン システムをDのnスレッド システムと比較しています。私は Tango ライブラリを使用しており、例として Web サーバーを構築しています。

tango.core.ThreadPool私のプロジェクトは従来のスレッド化とタスク キューの間の使いやすさとパフォーマンスに重点を置いているため、スレッド プールとして使用することにしました。

ドキュメントには、3 つのオプションがあることが示されています。

  1. ThreadPool.wait()- プールがキューからタスクを消費している間、現在のスレッドをブロックします。
  2. ThreadPool.shutdown()- プール内のタスクを終了しますが、キュー内のタスクは終了しません。
  3. ThreadPool.finish()- プールとキュー内のすべてのタスクを終了しますが、それ以上は受け入れません。

これらのどれも私が欲しいものではありません。これらのシステムでは、タスクのリストを増やすことができるはずだと私は理解しています。Web サーバーは非常に単純でナイーブです。リソース管理がタスクキュー内のものをできるだけ早く消費することだけで構成されている場合でも、多くの同時要求にスケーリングするために最善を尽くしてほしい.

メインスレッドが他のスレッドに参加する必要があるためだと思いますが、スレッドに関する知識が少し不足しています。

4

2 に答える 2

0

デリゲートを構築する方法が、コードの一部でのブロックに寄与していることを発見しました。によって返されたオブジェクトを閉じる代わりに、SocketServer.acceptそのオブジェクトをパラメーターとしてデリゲートに渡します。なぜこれが解決策だったのかはわかりませんが、プログラムは期待どおりに動作するようになりました。D バージョン 1 のクロージャが壊れていると聞きました。多分これはそれと関係があります。

于 2011-12-04T21:57:40.753 に答える
0

どうvoid append(JobD job, Args args)ですか?docs から、それはExecutor.execute(Runnable)フォーム Java のように機能します (将来いつか実行されるタスクを送信します)

ここでは、予想される FIFO キューではなく LIFO キューであるため、十分なワーカーを割り当てることに注意してください。

于 2011-12-04T02:22:32.687 に答える