text: 在平行計算中，分叉會合模型是設定和執行並行程式的一種方式，使得程式在指定一點上“分叉”。Fork–join可以被視為是一種並行設計模式:209 ff.，它最早由馬爾文·康威公式化於1963年。概述.透過遞迴的巢狀fork–join計算，可以獲得並行版本的分治範型，表達為如下一般性虛擬碼：解決(問題):if 問題足夠小:直接解決問題 (順序演算法)else:for 部份 in 細分(問題)fork 子任務來解決(部份)join 在前面的迴圈中生成的所有子任務return 合併的結果例子.簡單的並行歸併排序是一種fork–join演算法：mergesort(A, lo, hi):if lo &lt; hi: // 至少有一個輸入元素mid = ⌊lo + (hi - lo) / 2⌋fork mergesort(A, lo, mid) // 分叉出子任務處理第一個遞迴呼叫，它(潛在的) 並行於主任務mergesort(A, mid, hi) // 主任務處理第二個遞迴呼叫joinmerge(A, lo, mid, hi)第一個遞迴呼叫是“分叉出”的，但二者並不相同，因為各個執行緒在一個屏障之後將繼續工作，而在#重定向 之後只有一個執行緒繼續工作:88。在上述偽碼中第二個遞迴呼叫不是分叉的；這是故意為之的，因為分叉任務是要付出代價的。如果把二個遞迴呼叫都設定為子任務，主任務在被阻塞在#重定向 之前將沒有任何額外的工作可以進行。實現.在fork–join模型的實現中，fork的典型的是任務、纖程即輕量級執行緒，而非作業系統級別的“重量級”執行緒或程序，並使用執行緒池來執行這些任務：fork原語到實際的並行執行之上。這麼設計的原因是建立新執行緒趨於導致很大的開銷。在fork–join程式設計中用到的輕量級執行緒，典型的有它們自己的排程器，排程器典型的採用策略，並將這些執行緒對映到底層的執行緒池。這種排程器比全特徵的搶佔式作業系統排程器要簡單的: 通用的執行緒排程器必須處理針對鎖的阻塞，而在fork–join範型中，執行緒只阻塞在join點上。在OpenMP框架中，Fork–join是主要的並行執行模型，儘管OpenMP實現可以支援也可以不支援並行段落的巢狀。支援它的還有：框架、微軟.NET的和Intel的。Cilk程式語言有對fork和join的語言級別支援，其形式為codice_1和codice_2關鍵字或Cilk Plus中的codice_3和codice_4。
metadata: erhwenkuo/wikipedia-zhtw
metadata: 分叉會合模型
metadata: https://zh.wikipedia.org/wiki?curid=6823945