IO的過程
一次IO都會有兩個階段:
? 等待數據,即數據從磁盤到內核內存.
? 復制數據,即數據從內核內存到進程內存.
5種IO模型
阻塞型 # 阻塞/非阻塞,關注的是調用結果返回前調用者的狀態
非阻塞型
復用型
信號驅動型
異步
阻塞型(block): .
調用結果返回之前,IO的兩個階段調用者被“掛”起.比如你去釣魚,只是一直等著看,只到魚上鉤才處理.
非阻塞型(noblock)
調用結果返回之前,調用者不會被“掛”起。即IO第一階段調用者是不會被阻塞的,但也是處于“盲”等待即無目的地等待(所以效率上未必強于阻塞型),只在第二階段會被阻塞.比如你去釣魚,放下魚鉤后你就在一旁玩手機或看書,只是偶爾才過去看一看魚有沒有上鉤.
同步(sync)
調用者等待對方(被調用者 )返回消息
異步(async)
被調用者通過狀態、通知或回調機制通知調用者被調用者的運行狀態
復用型(多路輸出)
select() 1024個限制 BSD
poll() sysv