次のシナリオは、スレッドを使用して行われました
@work_queue
メイン スレッドによって入力/エンキューされる大きなキュー。ここで使用Thread::Queue
。- ≥
@conns
ロード プロセスの一部として連続してロードする必要のある何かの 2 つの接続オブジェクトが追加されます。Expect->spawn
- 複数の Worker スレッドが呼び出され、各スレッドに単一の
$conns[$i]
オブジェクトと shared への参照が与えられます\@work_queue
。 - ワーカー スレッドは、 から 1 つのアイテムを安全に削除し、
@work_queue
その接続オブジェクトを介して何らかの処理を実行します。その後、 から次の使用可能なアイテムを取得します@work_queue
。 - これ
@work_queue
が空の場合、すべてのスレッドは安全にシャットダウンします
ここでの問題は、多くの場合、ロード フェーズに時間がかかりすぎることです。しかし、 を使用しているためExpect->spawn
、 の並列ロードは@conns
スレッドではなく別のプロセスでのみ可能です。
フォークを使用して上記のシナリオを実現する良い方法を提案してください。Expect->spawn
または、スレッドで使用する方法があればさらに良いでしょう。(UNIX/LINUXのみ)
Expectでスレッドを使用することは可能ですか? を参照してください。