天天看點

Nginx的程序模型簡單了解

協程機制

協程是線程内的一個記憶體模型,一個線程可以有多個協程。當我們的協程(如read方法)遇到阻塞的時候,那麼系統會立馬調用另一個不阻塞的線程來執行read。這樣做的好處是,這樣就不需要關注什麼時候socket的read會傳回。因為當read完成,epoll多路複用會執行一個回調。這個回調是一個return函數,read完成會順序的執行。這樣我們的協程機制就是一個同步的,它就不需要進行加鎖。

epoll多路複用模型

Java BiO 模型

阻塞IO,當用戶端(client)向服務端(server)發起一個請求的時候,socket.write會将資料寫入到TCP/IP的緩存區裡,TCP/IP緩存區會将資料發送到server。當網絡傳輸較慢/或者client有很多的請求時,一旦緩存區存滿會導緻client無法發送資料一直在進行等待。

Linux select模型

select 模型的會執行下面的操作

一個server在内部會監聽固定數量的client

當其中監聽的client有變化的時候會執行周遊操作

周遊操作會喚醒所有的變化的client執行read操作

read操作會讀取用戶端的資料并傳回

但是select模型有很多的監聽client的時候一旦一個發生變化其他的大量client都可能會被周遊一遍消耗很大的性能。并且select的監聽數上線理論上是1024。

epoll多路複用

epoll多路複用模型是在select模型上進行改進。server理論上可以監聽無數個client,并且每一個監聽的client都有一個回調函數,如果監聽的client有變化。那麼會執行回調函數來執行操作。

master-worker

master-worker模型圖

Nginx的程式模型簡單了解

master-worker模型

首先管理者啟動nginx的時候系統會建立一個master,master會建立一個或者多個worker。master可以對worker進行管理。而worker會對client進行監聽。當其中的多個個client發起請求後,worker會進行一個資源搶占。搶占成功後會建立連接配接。

當nginx啟動worker的時候也會啟動epoll多路複用模型,當worker為client搶占資源建立連接配接後,worker會為client啟動epoll多路複用。

繼續閱讀