私は Haskell で書かれた計画アルゴリズムを持っています。これは、与えられた時間内に一連の可能な計画を評価する任務を負っています。評価プロセスは、任意の時間実行して、ますます正確な結果を生成することができます。これを行うための自然で最も効率的な方法は、各評価タスクに独自の軽量 Haskell スレッドを与え、指定された時間スリープした後にメインスレッドに結果を収集させることです。
しかし実際には、常に 1 つまたは 2 つのスレッドが、使用可能な時間全体にわたって CPU 不足になります。実行を制御するためのセマフォなどを使用した私自身の実験では、特定のスレッドの実行を強制的に停止することはできないように見えるため、これを修正するのは驚くほど難しいことが示されています (Control.Concurrent から「yield」を使用することを含む)。
任意の数の Haskell スレッド (OS スレッドではない) がそれぞれ (かなり短い) 壁時計時間のスパンでほぼ均等な量の CPU 時間を確実に受け取るようにする、よく知られた方法はありますか? それができない場合、すべてのコアが使用されるように、同じ反復を実行する多数のスレッドが所定の数のコアで公平に「交代」することを保証する良い方法はありますか?