回覆列表
  • 1 # 使用者1655439301037

    非同步IO是專有名詞, 你去看下wiki: Asynchronous I/O, 裡面說得很清楚, 非同步IO是要求提交一個IO請求後,程式的控制流可以繼續而不用等待IO完成, 對應POSIX標準裡面的話需要用aio系的API: aio(7) - Linux manual page, 因為這個API太複雜難用,所以我知道的情況而言,沒什麼人用它,但簡單說下它在使用者程序提交IO請求時可以指定用什麼方式獲得完成的通知,比如由核心給程序傳送一個訊號(像是SIGIO),使用者程序需要安裝訊號處理器響應訊號,或是核心啟動一個執行緒(由使用者指定執行緒的入口,即一個具有相應簽名的函式)。

    而當我們說同步非同步的時候,更多的是這個: Asynchrony (computer programming), 它是指代一個事件的發生是獨立於程式流的,比如你使用epoll的時候, 你在後臺有一個執行緒在做事件迴圈, 你的業務邏輯在自己的執行緒裡面註冊了一些事件的回撥(對某個檔案描述符上的特定事件感興趣),你的業務邏輯繼續自己的流程,當事件發生的時候,事件的處理在事件迴圈執行緒進行,獨立於你的業務邏輯在的執行緒。而且需要注意,為什麼epoll這種用法是不符合非同步IO的定義的,因為你註冊的是對某些事件的回撥,並沒有發起任何IO請求(read/write),你是在事件發生後,在事件處理函數里面才發起的IO請求,而因為事件已經發生了,所以這時候發起的慢速系統呼叫可以馬上完成,也就不會把事件迴圈執行緒給堵住了。

  • 中秋節和大豐收的關聯?
  • 諸葛亮為何要用關羽去守華容道?