次のシナリオは、スレッドを使用して行われました
@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でスレッドを使用することは可能ですか? を参照してください。