一度にいくつか実行したいタスクがたくさんあります。これに対する通常の解決策は、スレッド プールです。ただし、私のタスクには、特定のスレッドのみが持つリソースが必要です。したがって、タスクを古いスレッドにファームアウトすることはできません。スレッドには、タスクが必要とするリソースが必要です。
これには同時実行パターンがあるはずですが、見つけられないようです。私はマルチプロセッシングを使用してPython 2でこれを実装しているので、それらの用語での回答は素晴らしいでしょうが、一般的な解決策は問題ありません. 私の場合、「スレッド」は実際には個別の OS プロセスであり、リソースはネットワーク接続です (いいえ、サーバーではないため、(e)poll/select は役に立ちません)。一般に、スレッド/プロセスは複数のリソースを保持できます。
単純な解決策は次のとおりです。タスクを作業キューに入れ、スレッド プールを解放します。各スレッドに「このタスクを実行できますか?」とチェックしてもらいます。はいの場合は、実行してください。いいえの場合は、キューに戻します。ただし、各タスクを N 個のスレッドのうちの 1 つしか実行できない場合、1 つの作業単位を取得するためだけに、共有キューへのアクセスが 2N 回も無駄になり、コストが高くなります。
これが私の現在の考えです。各リソースに共有作業キューを用意します。一致するキューにタスクをファームアウトします。各スレッドは、処理できるキューをチェックします。
アイデア?