2

class のインスタンスが 2 つありますMyWorkerstartこれらのオブジェクトのメソッドを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 回呼び出されるようになりました。

これに対処する方法はありますか?

4

0 に答える 0