class のインスタンスが 2 つありますMyWorker。startこれらのオブジェクトのメソッドをstartイベントにバインドします。そして、処理するアイテムの配列があります。各オブジェクトとイベントemitに1 つのアイテムを割り当てます。start
for (i = 0; i < objs.length; i += 1) {
objs[i].item = items.shift();
}
self.emit('start');
start メソッドには非同期 IO ジョブが含まれているため、すべて正常に動作します。処理後、オブジェクトはdoneイベントを発行します。このdoneメソッドは、 かどうかをチェックしますitems.length > 0。はいの場合、次のアイテムを同じオブジェクトに割り当て、startイベントを発行します。
MyClass.prototype.done = function (data) {
var self = this;
data.object.item = items.shift();
self.emit('start');
}
ここで、IO 待機時間がほとんどない場合、または IO 操作が発生しない場合を考えてみましょう。すべてが同期的に進みます。この場合、done次のオブジェクトがイベントを取得する前であっても、イベントが発生しstartます。はdone新しいオブジェクトを割り当て、start再び放出します。これが問題を引き起こします。start2 番目のオブジェクトのが 2 回呼び出されるようになりました。
これに対処する方法はありますか?