7

エージェントに送信される関数を処理するスレッド プールを制御する方法はありますか? 私が理解しているように、見送る場合、ボンネットの下で無制限のスレッドプールを使用しています。たとえば、あるスレッド プールでいくつかの機能を実行し、別のスレッド プールで他の機能を実行したいと考えています。この理由は、IO を実行し、重要度の低い関数がいくつかあると言います。私はこれらをいくつかの制限付きスレッドプールに投げ、過度のブロッキングがあったとしてもそれらが積み上げられても心配しません。主なことは、彼らの安っぽいIOブロッキングが、別のスレッドプールで実行されているいくつかのより重要な機能に影響を与えると言いたくないということです。

私は、Akka のスレッド プールで行った同様のことから質問をしています。Clojure で同じことを達成できると思っているだけです。

4

3 に答える 3

14

1.4 までの Clojure バージョンの場合:

組み込みエージェントの送信および送信スレッド プールを置き換えることはできません。それらはAgent.javaにハードコーディングされています。

送信プール (計算に使用) は固定サイズ = 2 + Runtime.getRuntime().availableProcessors() です。

見送りプール (先物にも使用されます) は、キャッシュされたスレッド プールであり、際限なく大きくなります。これにより、任意の数のバックグラウンド タスクが I/O を待機できるようになります。キャッシュされたスレッドは、アイドル状態が 1 分間続くと再利用され、破棄されます。

独自のスレッド プールで作業を管理する場合は、java.util.concurrent を使用するか、Clojure ラッパー ライブラリを使用する必要があります。

Clojure 1.5 (近日公開予定) の場合:

(send-via executor af) を使用して、独自の ExecutorService を提供できます。デフォルトのスレッドプールは、もうハードワイヤードではありません。詳細については、Clojure 1.5+ の Agent.java を参照してください。

于 2012-07-04T05:00:16.557 に答える
1

Amit Rathore (Runa inc) は、スレッド プールを管理するためのライブラリ (medusa と呼ばれる) を公開しました。探しているものにかなり近いようです。

http://s-expressions.com/2010/06/08/medusa-0-1-a-supervised-thread-pool-for-clojure-futures-2/

于 2012-07-03T20:55:37.083 に答える