2016-05-26 20 views
0

我有一個類CallerA和一個類CalleeB
CalleeB有一個隊列並異步完成作業。
例如,如果CalleeB有一個函數enqueue(int input)CallerA電話CalleeB.enqueue(1)CalleeB.enqueue(11),輸入11的結果可以早於輸入1
現在回來了,CallerA創建10個CalleeB實例。
CallerA將輸入從1到5增量到隨機CalleeB實例,從6到10增量到隨機CalleeB實例和從11到15等等。
CallerA將等待回調以接收來自CalleeB實例的結果,並且如果收到全部1〜5個結果,則CallerA將執行某些操作。另外如果CallerA收到6到10收到,CallerA會做點什麼。
當然,輸入1和6可能與CalleeB實例相同,並且6返回的時間早於1.
有沒有一種有效的技術來實現計數結果從CalleeB用於統計來自不同實例的響應數的編碼技術

回答

0

有沒有一種有效的技術來實現來自CalleeB的CallerA計數結果 ?

當然,CallerA只需要跟蹤他收到回來的結果,以便當他收到一個集合中的所有5個結果時,他可以對它們採取行動。

我會這樣做的方式是讓CallerA維護一個unordered_map<int, Result>,並且每當從CalleeB接收到結果時,將它放入unordered_map中,然後檢查該集合的其他4個結果是否也存在在unordered_map中;如果是這樣,請將它們從unordered_map中移除並處理它們。或者,您可以保留一個5項子結果數組的10個數組,並將每個結果放入相應的子數組(arrayIdx = i/5)中的相應槽(slotIdx = i%5) 5)。將結果放入適當的子數組後,您可以檢查子數組的插槽以查看它們是否全部填充,或者可以增加特定於該子數組的計數器,當計數器達到5時,數組必須已滿。

+0

感謝您的評論!無序的地圖會比地圖更快嗎? –

+0

速度稍快一點 - unordered_map上的查找是O(1),在地圖上它們是O(log(N))。使用數組+計數器方法可能會比任何一種類型都快。也就是說,在你看的規模(50項)中,你不可能測量差異;如果您計劃將其擴展到數千或數萬個物品,您可能會這樣做。 –

相關問題