我有一組數據,其中包含對這些數據進行操作的「代理」。我還在代理之間建立了一個依賴列表,因爲一些代理依賴於其他代理執行的操作。我還設置了一個結構來強制每個代理可以訪問或變更數據集合中的數據。我被困在如何實現這個設計上,作業池似乎太簡單了,無法處理依賴關係。我的問題與如何實際實現這種類型的設計有關。該設計與FlowBased編程非常相似(如果我理解正確),但數據是批量運行的。設計並實現具有相關性的作業池
我首先想到的是有需要做的任務樹層次結構:
Root
/| \
a1 a2 a3
|/
a4
例如,我可以運行A1,A2和A3兼任。但要運行a4,需要完成a1和a2。
什麼是最好的工具來設置它?我應該使用信號/插槽實施,推出我自己的頻道,使用期貨和承諾來模擬頻道/信號/插槽系統?也許讓每個節點都有一定的依賴關係,並且當每個依賴代理完成時,一個計數器在下一個節點被調用時遞增,直到它與deps數相匹配。或者,這可以作爲一個「門」類型的結構來實現,該結構保存了deps的數量,並在deps得到滿足時向代理髮送信號或w/e。 我可以讓自己的TaskManager執行調度,但我寧願調用每個頂級節點一次,並自動遍歷層次結構。他們完全是我可以嘗試的嗎?我對你可能有任何瘋狂的想法感興趣。
我傾向於這樣的事情,使用「信號」和「槽」:
+----------+ +----------+
| Actor1 | | Actor2 |
| update() | | update() |
+----|-----+ +----|-----+
\____ _____/
\/
+---v---+
| Gate |
+---|---+
V
+----------+
| Actor4 |
| update() |
+----------+
如何這類問題通常解決?我想保持它的通用性,如果可以的話,使用流行的庫。我也需要很好的響應時間,因爲這將在遊戲引擎的update()循環中運行。
我們在談論多少個代理商?一個天真的解決方案是,依賴關係只是'std :: future's,而依賴關係只是''代理'線程對其每個輸入做'wait'。 – Yakk
如果號碼太高,代理的功能可以結合使用。但是現在我已經將最大值設置爲256,並且我當前使用了24.有11個沒有依賴關係。 – h4tch