3

いくつかの学術研究では、単一のプロセッサで実行される複数のスレッドをシミュレートする必要があります。

コード内に *call_scheduler()* 呼び出しを挿入できるようにしたいと考えています。このコードでは、現在の「スレッド」が一時停止し (どのコード行にあるかを覚えています)、スケジューリング関数によって、どのスレッドを解放するかが決定されます。

Python では、これはスタックレス Python を使用してきちんと実装できます。Javaの代替手段はありますか?

実際のスレッドと、一度に 1 つのスレッドのみを強制的に実行するいくつかのメッセージング キュー (またはパイプ) を使用して実装することもできますが、これは見苦しく問題のある解決策です。

4

3 に答える 3

1

協調ユーザースレッドの場合、Apache javaflow継続を使用できます:http: //commons.apache.org/sandbox/javaflow/

この継続パッケージを使用してプリエンプティブスケジューラを実装する方法を知りたいと思います

于 2012-07-01T18:06:36.490 に答える
1

Akka のような Scala アクター フレームワークはこれを行います。各スレッドは多くのアクターを処理するため、非常に効率的に作成されました。ソースコードを見ることをお勧めします。

于 2012-07-01T18:18:55.907 に答える
0

あなたの質問:

実際のスレッドといくつかのメッセージング キュー (またはパイプ) を使用して実装できますthat will force only one thread to run at a timeが、これは見苦しく問題のある解決策です。

一度に 1 つのスレッドのみを実行する場合は、オブジェクトに対するスレッドのアクセスをよりクリーンな方法で制御して、Semaphores in java.util.concurrent package.

Semaphores sem = new Semaphores(1); // 1 は、1 つのスレッドのみがアクセスできることを示します

使用するsem.acquire() to get the key of the object, and when its done, use sem.release() と、別のスレッドのみがこのオブジェクトにアクセスできます。

于 2012-06-16T17:49:50.173 に答える