什麽是阻塞式和非阻塞io流?
阿新 • • 發佈:2018-07-09
程序 保存 方法 函數 連接數 簡單 列表 效率 意思
-
阻塞IO:socket 的阻塞模式意味著必須要做完IO 操作(包括錯誤)才會返回。
-
非阻塞IO:非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方式來判斷具體操作是否成功。
兩者區別:
-
所謂阻塞方式的意思是指, 當試圖對該文件描述符進行讀寫時, 如果當時沒有東西可讀,或者暫時不可寫, 程序就進入等待 狀態, 直到有東西可讀或者可寫為止。
-
對於非阻塞狀態, 如果沒有東西可讀, 或者不可寫, 讀寫函數馬上返回, 而不會等待 。
-
一種常用做法是:每建立一個Socket連接時,同時創建一個新線程對該Socket進行單獨通信(采用阻塞的方式通信)。這種方式具有很高的響應速度,並且控制起來也很簡單,在連接數較少的時候非常有效,但是如果對每一個連接都產生一個線程的無疑是對系統資源的一種浪費,如果連接數較多將會出現資源不足的情況。
-
一種較高效的做法是:服務器端保存一個Socket連接列表,然後對這個列表進行輪詢,如果發現某個Socket端口上有數據可讀時(讀就緒),則調用該socket連接的相應讀操作。
如果發現某個 Socket端口上有數據可寫時(寫就緒),則調用該socket連接的相應寫操作;如果某個端口的Socket連接已經中斷,則調用相應的析構方法關閉該端口。這樣能充分利用服務器資源,效率得到了很大提高。
什麽是阻塞式和非阻塞io流?