1. 程式人生 > >【Swoole基礎】Linux的多執行緒切換和多程序的切換

【Swoole基礎】Linux的多執行緒切換和多程序的切換

將大象裝冰箱,總共分三步,一把冰箱門開啟,二把大象轉進去,三把冰箱門關上,簡單粗暴。可惜我們的程序和執行緒的轉換不是大象裝冰箱問題,不扯淡了,迴歸正題。
一般的程序切換分為兩步
首先
切換頁目錄使用新的地址空間
然後
切換核心棧和硬體上下文

對於我們Linux來講,地址空間是執行緒和程序的最大區別,如果我們是執行緒切換的話,我們不需要做第一步,也就是切換頁目錄使用新的地址空間。但是切換內弧棧和硬體上下文則是我們執行緒切換和程序切換都需要做的。

兩者的比較

總體來說,沒有最好,只有最適合。
(1)需要頻繁建立銷燬的優先用執行緒。
eg:web伺服器。來一個建立一個執行緒,斷了就銷燬執行緒。要是用程序,建立和銷燬的代價是很難承受的。
(2)需要進行大量計算的優先使用執行緒。
所謂大量計算,就是要消耗很多cpu,切換頻繁了。
eg:影象處理、演算法處理
(3)強相關的處理用執行緒,若相關的處理用程序。
什麼叫強相關、弱相關?我們給一個簡單的例子來闡釋:
一般的server需要完成如下任務:訊息收發和訊息處理。訊息收發和訊息處理就是弱相關的任務,而訊息處理裡面可能又分為訊息解碼、業務處理,這兩個任務相對來說相關性就要強多了。因此訊息收發和訊息處理可以分程序設計,訊息解碼和業務處理可以分執行緒設計。
(4)可能擴充套件到多機分佈的用程序,多核分佈的用執行緒。
(5)都滿足需求的情況下,用你最熟悉、最拿手的方式。