同步IO和異步IO,阻塞IO和非阻塞IO分別是什麼,到底有什麼區別?以前聽到這些名詞很模糊,今天理了一下。
操作系統分用戶空間與內核空間。32位操作系統而言,它的尋址空間(虛擬存儲空間)爲4G(2的32次方)。
linux操作系統而言,內核空間:最高的1G字節(從虛擬地址0xC0000000到0xFFFFFFFF)
用戶空間: 較低的3G字節(從虛擬地址0x00000000到0xBFFFFFFF)
內存數據會先被拷貝到操作系統內核的緩衝區中,然後纔會從操作系統內核的緩衝區拷貝到用戶空間的地址空間。
linux系統產生了下面五種網絡模式的方案。
- 阻塞 I/O(blocking IO)
- 非阻塞 I/O(nonblocking IO)
- I/O 多路複用( IO multiplexing)
- 信號驅動 I/O( signal driven IO)
- 異步 I/O(asynchronous IO)
我的總結:
數據的過程兩步: 1.外部數據->內核空間
2.內核空間->用戶空間
1.阻塞I/O 過程一步步走 外-》內核 卡住
內核-》用戶
2.非阻塞I/O 沒數據返回error
外-》內核 沒數據 返回error
內核-》用戶 沒數據就返回
3.I/O 多路複用 事件驅動 select poll epoll
與第一個比:100個socket 有幾個有數據就返回幾個
外->內 卡住 ,只是SOCKET是多個的
內核-》用戶
4.異步I/O 外-》內核 沒數據直接返回
內核-》用戶 沒數據直接返回