拿 socket舉例。
當read資料時,如果這時沒有資料可讀,阻塞i/o會一直等待有資料讀,資料從kernel copy 到socket的buffer後返回;非阻塞i/o會立即返回,但如果有資料可讀,非阻塞i/o也是等資料從kernel copy 到socket的buffer後返回。
以上是阻塞與非阻塞i/o的區別,但以上兩個例子的read操作都是同步的,是不是很奇怪?點解稱其為同步?看看同步的定義就會很明確:
現在舉乙個非同步的例子就會很明白了,也是對read這個操作,當有資料可讀時,非同步i/o立即返回,kernel copy資料到socket buffer後,會以事件等通知程式read操作完成。
關鍵就在於將資料從kernel copy到socket buffer這段時期,read操作是否阻塞,阻塞i/o是阻塞的,而非同步i/o是不阻塞的。
非阻塞IO和阻塞IO
非阻塞io和阻塞io 在網路程式設計中對於乙個網路控制代碼會遇到阻塞io 和非阻塞io 的概念,這裡對於這兩種socket 先做一下說明 基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方式...
非阻塞IO和阻塞IO
非阻塞io 和阻塞io 在網路程式設計中對於乙個網路控制代碼會遇到阻塞io 和非阻塞io 的概念,這裡對於這兩種socket 先做一下說明 基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會 返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他...
非阻塞IO 和阻塞IO
在網路程式設計中對於乙個網路控制代碼會遇到阻塞io 和非阻塞io 的概念,這裡對於這兩種socket 先做一下說明 基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會 返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方 式來判斷具體操作是否...