Linux I/O模型
同步阻塞I/O
在此種方式下,用戶進程在發起一個I/O操作以后,必須等待I/O操作的完成,只有當真正完成了I/O操作以后,用戶進程才能運行。Java傳統的I/O模型屬于此種方式。
同步非阻塞I/O
在此種方式下,用戶進程發起一個I/O操作以后邊可返回做其它事情,但是用戶進程需要時不時的詢問I/O操作是否就緒,這就要求用戶進程不停的去詢問,從而引入不必要的CPU資源浪費。目前Java的NIO就屬于同步非阻塞I/O。
異步阻塞I/O
此種方式下是指應用發起一個I/O操作以后,不等待內核I/O操作的完成,等內核完成I/O操作以后會通知應用程序,這其實就是同步和異步最關鍵的區別,同步必須等待或者主動的去詢問I/O是否完成,那么為什么說是阻塞的呢?因為此時是通過?select?系統調用來完成的,而?select?函數本身的實現方式是阻塞的,而采用?select?函數有個好處就是它可以同時監聽多個文件句柄,從而提高系統的并發性。
異步非阻塞I/O
在此種模式下,用戶進程只需要發起一個I/O操作然后立即返回,等I/O操作真正的完成以后,應用程序會得到I/O操作完成的通知,此時用戶進程只需要對數據進行處理就好了,不需要進行實際的I/O讀寫操作,因為真正的I/O讀取或者寫入操作已經由內核完成了。目前Java中還沒有支持此種I/O模型。
?
?
半同步/半異步(half-sync/half-async)
許多餐廳使用 半同步/半異步 模式的變體。例如,餐廳常常雇傭一個領班負責迎接顧客,并在餐廳繁忙時留意給顧客安排桌位,為等待就餐的顧客按序排隊是必要的。領班由所有顧客“共享”,不能被任何特定顧客占用太多時間。當顧客在一張桌子入坐后,有一個侍應生專門為這張桌子服務。
領導者/追隨者(Leader/Followers)
在日常生活中,領導者/追隨者模式用于管理許多飛機場出租車候車臺。在該用例中,出租車扮演“線程”角色,排在第一輛的出租車成為領導者,剩下的出租車成為追隨者。同樣,到達出租車候車臺的乘客構成了必須被多路分解給出租車的事件,一般以先進先出排序。一般來說,如果任何出租車可以為任何顧客服務,該場景就主要相當于非綁定句柄/線程關聯。然而,如果僅僅是某些出租車可以為某些乘客服務,該場景就相當于綁定句柄/線程關聯。
轉載于:https://www.cnblogs.com/guagua2016/p/5956614.html
總結
以上是生活随笔為你收集整理的Linux I/O模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【并行计算-CUDA开发】显卡两大生产商
- 下一篇: Linux /proc/pid目录下相应