什麼是阻塞式和非阻塞io流

2022-03-15 16:58:07 字數 616 閱讀 7242

阻塞io:socket 的阻塞模式意味著必須要做完io 操作(包括錯誤)才會返回。

非阻塞io:非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方式來判斷具體操作是否成功。

兩者區別:

所謂阻塞方式的意思是指, 當試圖對該檔案描述符進行讀寫時, 如果當時沒有東西可讀,或者暫時不可寫, 程式就進入等待 狀態, 直到有東西可讀或者可寫為止。

對於非阻塞狀態, 如果沒有東西可讀, 或者不可寫, 讀寫函式馬上返回, 而不會等待 。

一種常用做法是:每建立乙個socket連線時,同時建立乙個新執行緒對該socket進行單獨通訊(採用阻塞的方式通訊)。這種方式具有很高的響應速度,並且控制起來也很簡單,在連線數較少的時候非常有效,但是如果對每乙個連線都產生乙個執行緒的無疑是對系統資源的一種浪費,如果連線數較多將會出現資源不足的情況。

一種較高效的做法是:伺服器端儲存乙個socket連線列表,然後對這個列表進行輪詢,如果發現某個socket埠上有資料可讀時(讀就緒),則呼叫該socket連線的相應讀操作。

如果發現某個 socket埠上有資料可寫時(寫就緒),則呼叫該socket連線的相應寫操作;如果某個埠的socket連線已經中斷,則呼叫相應的析構方法關閉該埠。這樣能充分利用伺服器資源,效率得到了很大提高。

阻塞式 非阻塞式IO

知識點 非阻塞式io 的兩種設定方法 1 函式fcntl 設定 o nonblock 選項 int flag fcntl sockfd,f getfl,0 檢查檔案標誌位 fcntl sockfd,f setfl,flag o nonblock 設定檔案標誌位 2 函式ioctl 設定fionbio...

非阻塞IO和阻塞IO

非阻塞io和阻塞io 在網路程式設計中對於乙個網路控制代碼會遇到阻塞io 和非阻塞io 的概念,這裡對於這兩種socket 先做一下說明 基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方式...

非阻塞IO和阻塞IO

非阻塞io 和阻塞io 在網路程式設計中對於乙個網路控制代碼會遇到阻塞io 和非阻塞io 的概念,這裡對於這兩種socket 先做一下說明 基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會 返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他...