關於同步 非同步和阻塞 非阻塞的理解

2021-09-24 02:28:04 字數 1278 閱讀 1538

有人說到,同步和非同步是從訊息通訊機制來看的,a 請求 b,如果a 需要等b的應答,則是同步;如果a不需要等b的應答,直接處理其他事情,則是非同步。這樣看起來也沒什麼問題。但是也有另外一種解釋,就是兩個事物的協同,或者兩個事情的執行順序是否是順序執行的,還是可以並行執行的。

1)從程式設計(業務**)層面,我們時常會用到非同步方法,直接呼叫,不需要理會結果,就繼續處理其他事情了。和上面提到的解釋比較吻合。

2)從io操作層面,io操作有倆件事情,(傳送io請求->得到io結果),如果總是按這個有序序列進行就是同步io,反之是非同步io。

通俗一點說,就是我們碰到乙個障礙的時候,根據我們的狀態來判斷是非阻塞。如果我們要等待,則是阻塞,如果不等待,去幹其他事情了,則是非阻塞。即阻塞和非阻塞是從程式等待狀態來判斷的。

1)從程式設計(業務**)層面,這個層面已經沒有討論阻塞和非阻塞的必要了,和同步、非同步已經有點趨同了。

2)從io操作層面,阻塞和非阻塞更多的是在討論io.在等待資料的過程中如果繼續等待則是阻塞,如果不等待,而是隔三差五地來問是否準備好了,則是非阻塞。

1) 阻塞io:   在等待資料和拷貝資料兩個階段都被block住了(掛起)

2)非阻塞io: 在等待資料階段沒有被block住,但是需要自己不斷地來檢查是否可讀。但在拷貝資料地時候也被block住了。其實只是把阻塞的點放後了,但是非阻塞io的定義就是這樣,並不是它整個io過程都是都可以做到非阻塞。

3)io多路復用:這個其實也是阻塞的,只是對於使用者程序,它沒有被block住,而是有人來代替它監視socket.多路復用在於可以管理多個socket,輪詢每個socket,看是否準備好資料。從這個角度看已經有些非同步概念了。現在很多高併發的網路框架用的就是這個模型。宣稱是非同步網路io.

4)訊號驅動:不要監視socket了,被動等待訊號通知

5)非同步io:傳送io請求後,不需要等了,核心會把資料準備好,要做的就是等核心通知,然後處理資料。這才是真正的非同步io,傳送io請求->得到io結果並不是順序執行的。

在網路上很多人將同步、非同步和阻塞、非阻塞兩兩組合,其實對於io來說,這種兩兩組合是不適合的。你真的將這種概念硬是套在上面的話,很容易陷入困惑中。 有人將io多路復用稱為非同步阻塞,但是這個非同步有待商討,如果從io層面,根本沒有非同步阻塞io一說,非同步就是非同步,就只有非同步io,非同步io就是不阻塞的。但是如果從使用者執行緒角度看,也是有一點點非同步了,畢竟委託了別人看管了。

參考:五種io模型

關於同步、非同步和阻塞、非阻塞的理解

關於同步非同步 阻塞非阻塞的理解

之前看到乙個用來形容同步非同步 阻塞非阻塞的比喻,感覺非常形象生動,這裡把它記錄下來。場景 你想買一本書,於是你給書店老闆打 詢問,老闆查詢需要花費一段時間,幫你查詢好以後告訴你結果,即書店有沒有這本書。解決方式 一 同步 你給老闆打通了 並一直等待該事件的結果,老闆幫你查詢的過程中不斷 得到結果以...

同步 非同步,阻塞 非阻塞理解

由於同步非同步,阻塞非阻塞都學習了有一段時間了。慢慢了快忘了,所以乾脆趁著寒假把知識點都撿起來,寫出來。同步和非同步是一組概念,阻塞和非阻塞是一組概念。大家不要搞混了,不要把同步和阻塞等價,也不要把非同步和非阻塞等價 戲說不是胡說,改編不是亂編 滑稽 在剛開始理解的時候很容易搞混,我們這樣想,同步和...

同步 非同步 阻塞和非阻塞的理解

這一段來自 處理大併發之一 對非同步非阻塞的理解 阻塞 執行緒在執行中如果遇到 i o 操作 如磁碟讀寫或網路通訊,通常要耗費較長的時間,這時作業系統會剝奪這個執行緒的 cpu 控制權,使其暫停執行,同時將資源讓給其他的工作執行緒,這種執行緒排程方式稱為 阻塞。當 i o 操作完畢時,作業系統將這個...