2011-12-04 11 views
2

私はDにn個 -threadsシステムにタスクキュー/スレッドプールのパターンシステムを比較しています、私はDプログラミング言語には本当に新しいですが、前にC、Java、およびPythonでスレッドで働いています。私はTangoライブラリを使用しています。私は例としてWebサーバーを構築しています。タンゴ(D)ThreadPoolにタスクを非同期で追加する方法はありますか?

私は私のプロジェクトは、伝統的なスレッドとタスクキューの間、使用のしやすさとパフォーマンスに焦点を当てているように、私のスレッドプールとしてtango.core.ThreadPoolを使用することにしました。プールはキューからタスクを消費しながら、現在のスレッドをブロック -

  1. ThreadPool.wait()

    documentationは、私は3つのオプションを持っていることを示しています。

  2. ThreadPool.shutdown()は - プール内のタスクを終了しますが、キュー内のないもの。
  3. ThreadPool.finish() - プールとキュー内のすべてのタスクを終了しますが、それ以上受け入れません。これらの事の

どれも私が欲しいものではありません。あなたの仕事のリストは、これらのシステムで成長できるはずですが、私の理解です。 Webサーバーは非常にシンプルでナイーブです。リソース管理ができるだけ早くタスクキュー内のものを消費するだけであっても、多くの同時リクエストにスケーリングするのに最善を尽くしたいと思うだけです。

私は、メインスレッドが他のスレッドに参加する必要があるので、それはだと思われるが、私は私のスレッドの知識に少し錆びです。 void append(JobD job, Args args)について

+0

なぜD2を使用しないのですか?それは良い/良い並列処理機能を持っています。 –

+0

@Daevius:そうでなければBrianはTangoにrenonceする必要があります。 – menjaraz

+0

@Daevius:私は開発環境のためにD v。1に制限されていました。 LDCとTangoだけが利用可能でした。 – Brian

答えて

0

を割り当てる代わりに、予想されるFIFOキューのLIFOキューであることをExecutor.execute(Runnable)フォームのJava(将来的にいくつかの時間を実行するタスクを送信)

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

0

何?それはここで、それはので、私は十分な労働者に

+0

私は追加を使用しています。 Apacheのベンチマークで '-c 2'を使うと何か問題が発生するので、何か間違っているのだろうかと思います。私はそれがキューではなくスタックであるというコメントを見ています。彼らがなぜその決定を下したのだろうと思う。 – Brian

関連する問題