IO的阻塞 非阻塞 同步 非同步

2021-09-02 15:39:59 字數 737 閱讀 2041

偽**:

void iotest()

void process(buffer)

同步: 下一句的執行必須等上一句執行返回,例子中第二句執行的條件需要第一句執行返回;但第三句是與之前語句無關的語句,不應該是同步語句。因此可以通過給同步**另開執行緒解決這個問題,即把第一和第二句放到另乙個執行緒去,則doothernotrelatetothesocket()方法不會受到阻塞

阻塞: io上的阻塞(系統呼叫read()後,馬上返回乙個狀態回使用者空間為非阻塞,不馬上返回只有等到有資料才返回到使用者空間則為阻塞)

這裡有乙個比較容易混淆的點,似乎阻塞就等於同步,第二第三句都要在第一句執行完後才執行(第二句位置合理,但第三句是不合適的同步)。阻塞是資源上的限制,不可改變,但同步**可以通過啟動多執行緒達到非同步的效果。

高效能io模型**

i/o多路復用機制都依賴於乙個事件多路分離器(event demultiplexer),reactor與proactor模式都具有i/o多路復用的特點,區別只在於reactor屬於同步io,proactor屬於非同步io。

proactor的乙個重要區別地方: 在分離器等待過程中,作業系統利用並行的核心執行緒執行實際的讀操作,並將結果資料存入使用者自定義緩衝區,最後通知事件分離器讀操作完成。(非同步io即應用程式運算元據時不需要才開始從io上讀取位元組流,而是讀取緩衝區上的資料(作業系統已經並行做了這個事情))。

reactor和proactor模式

reactor與proactor的概念

IO 同步,非同步,阻塞,非阻塞

參考文章 好文推薦 唉最近真是高產似母豬,剛進新公司工作量暫時不飽和,只能每天學學學學學學查漏補缺啦,學習使我快樂哈哈哈哈哈哈哈哈 標題裡的詞彙相信都經常看到,但是能說清楚的估計20個人裡面能有1個就不錯了,網上的資料也是五花八門,大部分描述差不多,很多時候估計作者本身也是似懂非懂,我也看了很多文章...

同步 非同步 阻塞 非阻塞 I O

一 同步 非同步 首先要是多個事物,只有乙個事物,是不存在同步或非同步的。同步 指協同步調。即,多個事物不能同時進行,必須乙個乙個的來,上乙個事物結束後,下乙個事物才開始。那當乙個事物正在進行時,其他事物在幹嘛呢?嚴格來講並沒有要求,但一般都處於 等待 狀態,因為後面事物的正常進行都需要依賴前面事物...

同步非同步IO,阻塞非阻塞

同步io操作 導致請求程序阻塞,知道io操作完成。非同步io操作 不導致程序阻塞。在處理 網路 io 的時候,阻塞和非阻塞都是同步io,阻塞,就是呼叫我 函式 我 函式 沒有接收完資料或者沒有得到結果之前,我不會返回。非阻塞,就是呼叫我 函式 我 函式 立即返回,通過select通知呼叫者 阻塞與非...