
執行緒
|
231
Linux 本身並不支援協同常式或纖程,同樣地可能是由於它的環境切換速度已經很快,
所以不需要使用效能優於核心執行緒的結構。Linux 中,Go 程式語言為類似協同常式的
結構提供了語言層級的支援,稱為 Go-routine。協同常式啟用了不同的程式設計典範以
及 I/O 模型,雖然超出了本書的範圍,但值得考慮看看。
執行緒模式
建構執行緒化的應用程式時,首先且最重要的步驟是決定執行緒模式(threading
pattern),也就是應用程式的處理方式以及 I/O 模型。有無數的抽象及實作細節需要決
定,但是有兩個基本的程式設計模式,你必須選擇一個:
每連線執行緒
(
thread-per-
connection
)與
事件驅動
(
event-driven
)。
每連線執行緒
每連線執行緒
(
thread-per-connection
)是一種程式設計模式,此模式中,每個工作單位
會指派給一個執行緒,而且在工作單位執行期間,該執行緒至多分配一個工作單位。你
的應用程式的工作會被分解成各個工作單位:一項請求、一條連線…等等。此處將會使
用「連線」來進行討論,因為它是描述此模式時,常用的術語。
你也可以使用「運行到完成為止」來描述此模式。也就是,一個執行緒會取得一條連線
或一項請求,而且會處理到完成為止,這個時候執行緒才有辦法再去處理另一項請求。
這會對 I/O 造成值得注意的影響,事實上,I/O 是此模式與事件驅動模式之間的一個大
差異。在每連線執行緒中,阻擋式 I/O —事實上,任何 I/O —可以成為「擁有」執行緒 ...