鍍金池/ 問答/Java  PHP  Linux/ nginx是同步的網(wǎng)絡IO還是異步的網(wǎng)絡IO

nginx是同步的網(wǎng)絡IO還是異步的網(wǎng)絡IO

如題,我所知道的是nginx是多進程的。主進程(父進程)通過epoll向內核注冊IO事件,當IO事件發(fā)生的時候內核會發(fā)送信號給父進程,這是父進程通知一個子進程去內核的緩沖區(qū)拿數(shù)據(jù)進行處理。也就是說nginx使用的是“IO多路復用”,IO多路復用意味著用戶進程需要自己使用一個線程將數(shù)據(jù)從內核緩沖區(qū)復制到用戶緩沖區(qū),是同步的。

我不知道我上面理解的對不對,但是我看網(wǎng)上的很多資料是說nginx使用的是異步IO模型,我所理解的異步IO是:當數(shù)據(jù)到達內核緩沖區(qū)后,內核負責吧數(shù)據(jù)從內和緩沖區(qū)復制到用戶緩沖區(qū)。

所以nginx的網(wǎng)絡模型到底是什么樣的?還請大神指點??!## 標題文字 ##

回答
編輯回答
拽很帥

nginx在linux一般是用epoll, 它使用的是注冊回調函數(shù),數(shù)據(jù)準備好自動調用。這個過程其實阻塞的。master分配某個連接給worker進程,worker同一時間的阻塞的,只能處理一個請求。。還有nginx是多進程模型的

2017年10月4日 21:42
編輯回答
深記你

POSIX 定義:An asynchronous I/O operation does not cause the requesting process to be blocked;
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;

epoll 在內核返回就緒事件時需要用戶線程自己進行讀寫,這個過程是阻塞的,所以是同步的而非異步。

2017年5月2日 20:58
編輯回答
尕筱澄

我理解nginx的網(wǎng)絡IO在單個具體處理進程中是同步的。因為它在處理時是網(wǎng)絡阻塞的。

2017年9月30日 13:18