幾個常見中介軟體(伺服器)所採用的併發模型
阿新 • • 發佈:2018-11-16
redis 單程序單執行緒
nginx 多程序單執行緒
memcached 單程序多執行緒
幾個模型各有優勢、都有其適用的場景,但最終保證高效能都用到了Linux底層的epoll機制和事件驅動IO
補充下幾個概念的關係:
單程序:一個時間段只能執行一個程序,例如,要聽歌就寫不了文件
多程序:一個時間段能同時執行多個程序,例如,終於能同時聽歌寫文件了
多執行緒:讓一個程序能同時執行一段程式碼的技術,用起來感覺類似於多程序,但區別在於執行緒與執行緒間共享資源,所以比多程序節省了系統資源,例如,一個瀏覽器可以同時開啟兩個網頁。
併發:一個“時間段”有多個程式同時執行,多執行緒併發和多程序併發應該都算併發,你可以說多程序和多執行緒是一種技術,併發是一種狀態。
並行:可以說是微觀上的併發或者真正的併發,就是某一個“時刻”有多個程式同時執行,也是一種狀態。
同步:一個函式呼叫在沒結束前原來的函式啥都不能做,是一種目的。
非同步:一個函式呼叫後,原來的函式繼續幹自己的事情,等那個函式幹完後,藉助某種手段通知原來的函式執行結果。也是一種目的,一般是通過多執行緒技術去實現,例:js在遇到ajax時非同步呼叫這個方法,瀏覽器新建一個執行緒去處理ajax的事情,js繼續幹自己的事情,等ajax拿到資料後瀏覽器將它丟到一個等待佇列裡面,js幹完自己那些不宜中斷的事情後就去查詢那個佇列裡面有結果了沒,有就拿出來。
摘自 https://www.cnblogs.com/lxwphp/p/7736615.html