異步I/O模型(asynchronous I/O)與 信號驅動式I/O模型(signal-driven I/O)

信號驅動式I/O模型(signal-driven I/O)

在這裏插入圖片描述
在信號驅動式I/O模型中,應用程序使用套接口進行信號驅動I/O,並安裝一個信號處理函數,進程繼續運行並不阻塞。當數據準備好時,進程會收到一個SIGIO信號,可以在信號處理函數中調用I/O操作函數處理數據

優點:線程並沒有在等待數據時被阻塞,可以提高資源的利用率
缺點:信號I/O在大量IO操作時可能會因爲信號隊列溢出導致沒法通知
信號驅動I/O儘管對於處理UDP套接字來說有用,即這種信號通知意味着到達一個數據報,或者返回一個異步錯誤。但是,對於TCP而言,信號驅動的I/O方式近乎無用,因爲導致這種通知的條件爲數衆多,每一個來進行判別會消耗很大資源,與前幾種方式相比優勢盡失

異步I/O模型(asynchronous I/O)

在這裏插入圖片描述

由POSIX規範定義,應用程序告知內核啓動某個操作,並讓內核在整個操作(包括將數據從內核拷貝到應用程序的緩衝區)完成後通知應用程序。這種模型與信號驅動模型的主要區別在於:信號驅動I/O是由內核通知應用程序何時啓動一個I/O操作,而異步I/O模型是由內核通知應用程序I/O操作何時完成

優點:異步 I/O 能夠充分利用 DMA 特性,讓 I/O 操作與計算重疊
缺點:要實現真正的異步 I/O,操作系統需要做大量的工作。目前 Windows 下通過 IOCP 實現了真正的異步 I/O,而在 Linux 系統下,Linux2.6才引入,目前 AIO 並不完善,因此在 Linux 下實現高併發網絡編程時都是以 IO複用模型模式爲主

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章