1. 程式人生 > >幾個常見中介軟體(伺服器)所採用的併發模型

幾個常見中介軟體(伺服器)所採用的併發模型

redis  單程序單執行緒

nginx 多程序單執行緒

memcached 單程序多執行緒

幾個模型各有優勢、都有其適用的場景,但最終保證高效能都用到了Linux底層的epoll機制和事件驅動IO

 

補充下幾個概念的關係:

單程序:一個時間段只能執行一個程序,例如,要聽歌就寫不了文件

多程序:一個時間段能同時執行多個程序,例如,終於能同時聽歌寫文件了

多執行緒:讓一個程序能同時執行一段程式碼的技術,用起來感覺類似於多程序,但區別在於執行緒與執行緒間共享資源,所以比多程序節省了系統資源,例如,一個瀏覽器可以同時開啟兩個網頁。

併發:一個“時間段”有多個程式同時執行,多執行緒併發和多程序併發應該都算併發,你可以說多程序和多執行緒是一種技術,併發是一種狀態。

並行:可以說是微觀上的併發或者真正的併發,就是某一個“時刻”有多個程式同時執行,也是一種狀態。

同步:一個函式呼叫在沒結束前原來的函式啥都不能做,是一種目的。

非同步:一個函式呼叫後,原來的函式繼續幹自己的事情,等那個函式幹完後,藉助某種手段通知原來的函式執行結果。也是一種目的,一般是通過多執行緒技術去實現,例:js在遇到ajax時非同步呼叫這個方法,瀏覽器新建一個執行緒去處理ajax的事情,js繼續幹自己的事情,等ajax拿到資料後瀏覽器將它丟到一個等待佇列裡面,js幹完自己那些不宜中斷的事情後就去查詢那個佇列裡面有結果了沒,有就拿出來。

摘自  https://www.cnblogs.com/lxwphp/p/7736615.html