阻塞與非阻塞 同步和非同步

2021-10-03 17:13:47 字數 1672 閱讀 8071

阻塞與非阻塞

主要指的是訪問 io 的執行緒是否會阻塞(或者說是等待)

執行緒訪問資源,該資源是否準備就緒的一種處理方式。

同步和非同步

主要是指的資料的請求方式

同步和非同步是指訪問資料的一種機制

bio同步阻塞 io,block io,io 操作時會阻塞執行緒,併發處理能力低。

我們熟知的 socket 程式設計就是 bio,乙個 socket 連線乙個處理執行緒(這個執行緒負責這個 socket 連線的一系列資料 傳輸操作)。阻塞的原因在於:作業系統允許的執行緒數量是有限的,多個 socket 申請與服務端建立連線時,服務端 不能提供相應數量的處理執行緒,沒有分配到處理執行緒的連線就會阻塞等待或被拒絕。

nio同步非阻塞 io,none-block io

nio 是對 bio 的改進,基於 reactor 模型。我們知道,乙個 socket 連線只有在特點時候才會發生資料傳輸 io 操作, 大部分時間這個「資料通道」是空閒的,但還是占用著執行緒。nio 作出的改進就是「乙個請求乙個執行緒」,在連線到 服務端的眾多 socket 中,只有需要進行 io 操作的才能獲取服務端的處理執行緒進行 io。這樣就不會因為執行緒不夠用 而限制了 socket 的接入。

非同步非阻塞 io

這種 io 模型是由作業系統先完成了客戶端請求處理再通知伺服器去啟動執行緒進行處理。aio 也稱 nio2.0,在 jdk7 開始支援。

netty reactor 模型 - 單執行緒模型、多執行緒模型、主從多執行緒模型介 紹

使用者發起 io 請求到 reactor 執行緒

ractor 執行緒將使用者的 io 請求放入到通道,然後再進行後續處理 處理完成後,reactor 執行緒重新獲得控制權,繼續其他客戶端的處理

這種模型乙個時間點只有乙個任務在執行,這個任務執行完了,再去執行下乙個任務。
1. 但單執行緒的 reactor 模型每乙個使用者事件都在乙個執行緒中執行: 2. 效能有極限,不能處理成百上千的事件

3. 當負荷達到一定程度時,效能將會下降

4. 某乙個事件處理器發生故障,不能繼續處理其他事件

reactor 多執行緒模型

這種模式使用多個執行緒執行多個任務,任務可以同時執行

reactor 主從多執行緒模型

這種執行緒模型是 netty 推薦使用的執行緒模型 這種模型適用於高併發場景,一組執行緒池接收請求,一組執行緒池處理 io。

非同步與同步 阻塞和非阻塞

非同步與同步 阻塞和非阻塞 總是讓人覺得難以理解 實際上常用的函式是都是同步的,很多io函式也是預設的阻塞的。同步是最常見的,就是一步一步的執行函式,執行完返回。他簡單,你不需要額外的去考慮,這是很自然的事情。阻塞是說當檔案描述符不可用的時候,就等待,等到他可用。對於乙個函式來說,非阻塞時可以設定的...

阻塞非阻塞與同步非同步

老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻塞 老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺...

同步 非同步與阻塞 非阻塞

怎樣理解阻塞非阻塞與同步非同步的區別?嚴肅的回答 知乎 知乎這個問題下的各個回答,以及這篇blog已經講的很清楚了。也有提到同步阻塞,和非同步非阻塞是繫結的。但也有對同步非阻塞,和非同步非阻塞的模型的闡釋,特此記錄解釋。在這套解釋中,同步和非同步的語義不只是立即返回與否,還是獲取結果已完成的方式是通...