BIO NIO AIO的概念及區別

2021-09-02 12:09:14 字數 1214 閱讀 3717

同步並阻塞,伺服器實現模式為乙個連線乙個執行緒,即客戶端有連線請求時服務端就需要啟動乙個執行緒進行處理。

同步非阻塞io:

同步並阻塞,伺服器實現模式為乙個請求乙個執行緒,即客戶端傳送的連線請求都會傳送到多路復用器上,多路復用器輪詢到連線有i/o請求時才啟動乙個執行緒進行處理。使用者程序也需要時不時的輪詢io操作是否就緒,這就要求使用者程序不停的去輪詢

非同步阻塞io:

此種方式是指使用者發一起乙個io操作以後,不等待核心io的操作完成,等核心io操作完成以後會通知應用程式。這其實就是同步與非同步最關鍵的區別,同步必須等待或者主動去輪詢io操作是否完成,那為什麼說是阻塞的呢?因為此時是通過select系統呼叫來完成的,而select函式本身是阻塞的,而採用select函式有個好處就是它可以同時監聽多個檔案控制代碼,從而提高系統併發性。

在此種模式下,使用者程序只需要發起乙個io操作然後立即返回,等待io操作完成以後,應用程式會得到io操作完成的通知,此時使用者程序只需要對資料進行處理就好了,不需要進行實際的io讀寫操作,因為真正的io讀取或者寫入操作已經由核心完成了。

註冊(讀、寫)就緒事件和相關聯的處理器

事件分隔器等待事件發生

發生(讀、寫)就緒事件時,呼叫第一步註冊的事件處理器

事件處理器作相應處理(讀、寫或後續處理)

應用程式初始化乙個非同步讀、寫操作,然後註冊相應的事件處理器,此時事件處理器不關注讀、寫就緒事件,而是關注讀、寫完成事件,這是區別於reactor的關鍵。

事件分離器等待讀、寫操作完成事件

在事件分離器等告待讀、寫操作完成的時候,作業系統呼叫核心執行緒完成讀寫操作(非同步io都是作業系統負責將資料讀寫應用傳遞進來的緩衝區**用程式操作,作業系統扮演了重要角色),應用程式需要傳遞緩衝區,這也是區別於reactor的一點。

事件分離器捕獲到讀、寫完成事件以後,啟用應用程式註冊的事件處理器,事件處理器直接從緩衝區讀寫資料,不需要進行實際的讀、寫操作。

從上面可以看出,reactor和proactor模式的主要區別就是真正的讀、寫操作是由誰來完成的,reactor中需要應用程式自己讀、寫資料,而proactor模式中,應用程式不需要進行實際的讀、寫過程,它只需要從快取區讀取或者寫入資料即可,作業系統會讀取快取區或者寫入快取區到真正的io裝置。nio通常採用reactor模式,而aio通常採用proactor模式。

綜上所述,同步和非同步是相對於應用和核心的互動而言的,同步需要主動去詢問,而非同步的時候核心在io事件發生的時候通知應用程式,而阻塞和非阻塞僅僅系統呼叫系統函式的實現方式而已。

ROM,RAM,SRAM,DRAM的概念及區別

rom和ram都是常見的儲存器,本文主要梳理rom,ram,sram,dram的概念及區別,屬於較簡單的介紹。早期的概念中,rom是唯讀儲存器 read only memory 的簡稱,從名字可以看出,rom只能讀取已經存好的資料,當資料一旦儲存完成後,就無法將之修改或者刪除,系統電源關閉後,資料也...

DML DDL DCL的概念及區別

dml data manipulation language 資料操縱語言 就是我們最經常用到的 select update insert delete。主要用來對資料庫的資料進行一些操作,用於運算元據庫物件中包含的資料,也就是說操作的單位是記錄 行 dml的操作物件 記錄 select 列名稱 f...

EHCI,OHCI,UHCI概念及區別

uhci ehci ohci基本概念 uhci universal host controller inte ce intel用在自家晶元組上的usb 1.1主控制器 host controller 的硬體介面 ehci enhanced host controller inte ce 增強型主機控...