1. 程式人生 > >I/O模型淺析總結

I/O模型淺析總結

.net poll 邊緣 加載 gin rdquo 磁盤 之前 weight

參考: http://www.cnblogs.com/fanzhidongyzby/p/4098546.html http://blog.csdn.net/zhoudaxia/article/details/8974779 一般而言,一次I/O分為兩個階段: 一是,“等待數據”,內核等待數據從磁盤加載到內核內存; 二是,“等待復制完成”,數據從內核內存復制到進程內存; 阻塞:進程發起I/O調用,未完成之前,當前進程會被掛起。 非阻塞:進程發起I/O調用,被調用函數完成之前不會阻塞當前進程而是立即返回。 註意:以上是針對於調用者如何被處理的角度。
同步:進程發起一個過程調用(功能、函數)後,在沒得到結果之前,該調用將不會返回。 異步:進程發起一個過程調用,即便調用者不能立即得到結果,但調用卻會返回,返回一個未完成狀態,當調用完成後,內核會自行通知調用者已經OK。 註意:以上是針對於被調用者如何響應請求者的調用。 內存映射:mmap(解決I/O第二階段的內核內存數據復制到進程內存的等待過程) I/O模型: 同步 同步阻塞:I/O兩個階段均阻塞 同步非阻塞:I/O一階段非阻塞(盲等待),二階段阻塞 I/O復用 select()、poll():I/O兩階段均阻塞,但是該模型能同時響應多個I/O請求 異步
事件驅動 epoll() 、wqueue():I/O一階段非阻塞,二階段阻塞 邊緣觸發(一次通知) 水平觸發(多次通知) AIO(異步非阻塞):I/O兩階段均非阻塞 SystemV:poll()、epoll() BSD:select()、wqueue() Nginx支持事件驅動epoll、邊緣觸發以及mmap機制。

I/O模型淺析總結