這一篇我們就要開始手寫這個並行框架了。
做任何一個項目,都要做的事情都是先定大框架,後拆解任務。
那麼這個併發框架,要完成上一篇講的那些所有任務,該如何定大框架呢,如何選型呢?
如果大家仔細看了上一篇文章,可以看到該框架的難點和重點,主要有兩點,分別是任務的順序編排和任務結果的回調。
如何做任務順序編排
依次來看一下各個基本場景
1 全串行
這種是最簡單的,依次串行即可。
假如有3個任務,譬如每個任務由一個worker來完成,共計3個worker,這3個worker有明顯的先後順序。要描述這種依賴關係和前後順序,我們對任務的包裝類應該至少有兩個屬性,nextWrappers和dependWrappers。分別代表我這個任務的後面的任務和依賴的任務。
以B爲例,nextWrapper就是C,dependWrapper就是A。
2 全並行
這種也很簡單,也比較常見。全並行的實現方式很多,譬如可以將所有的worker放到list裏,寫個for循環依次start;也可以全部提交到線程池裏;也可以用CompleteableFuture.supply()去接收多個worker任務。
3 先串後並