首頁>技術>

I/O操作中的常用術語

上節我們介紹了常用的I/O模型。在I/O操作中的我們經常會遇到常用術語:

·阻塞和非阻塞。

·同步與非同步。

那麼這些術語有怎樣的聯絡和區別呢?

阻塞和非阻塞

阻塞和非阻塞描述的是使用者執行緒呼叫核心I/O操作的方式。

·阻塞是指I/O操作需要徹底完成後才返回使用者空間。

·非阻塞是指I/O操作被呼叫後立即返回給使用者一個狀態值,無須等到I/O操作徹底完成。

以生活中家庭主婦為例。家庭主婦往往要做非常多的家務,比如煮開水、拖地等。阻塞是指,家庭主婦先去煮開水,她必須等到水開了才能離開去做其他家務;非阻塞是指,家庭主婦先去把水煮上,不用等水開就離開去拖地了,當然,在拖地過程中,她會時不時停下來去檢查水是否已經開了。

非阻塞的優點是家庭主婦的能力得到了釋放,可以多工(煮開水、拖地)“併發”了。

同步與非同步

同步和非同步描述的是使用者執行緒與核心的互動方式。

·同步是指使用者執行緒發起I/O請求後需要等待或者輪詢核心I/O操作完成後才能繼續執行。·非同步是指使用者執行緒發起I/O請求後仍繼續執行,當核心I/O操作完成後會通知使用者執行緒,或者呼叫使用者執行緒註冊的回撥函式。

還是以生活中家庭主婦為例。在阻塞和非阻塞的例子中,家庭主婦需要時不時停下拖地這個動作,而去檢查水是否已經開了(輪詢),這其實一定程度上是一種浪費,因為拖地這個任務被經常打斷。那麼是否有一種機制,當開水煮好後再通知主婦過去關火呢?這就是非同步的優點,非同步相當於水壺上的報警器,當水煮好後,水壺會發出提示聲,以告知家庭主婦水已經煮好了,此時家庭主婦才停下拖地去關火。

非同步的優點是減少了輪詢。

總結

一個I/O操作其實分成了兩個步驟:發起I/O請求和實際的I/O操作。

阻塞I/O和非阻塞I/O的區別在於第一步,即發起I/O請求是否會被阻塞,如果阻塞直到I/O操作完成,那麼就是傳統的阻塞I/O;如果不阻塞,那麼就是非阻塞I/O。

同步I/O和非同步I/O的區別就在於第二個步驟是否阻塞,如果實際的I/O讀寫阻塞請求程序,那麼就是同步I/O。

9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 16、實驗十六:STP定時器的配置