1、一分鐘弄懂同步,異步,阻塞,非阻塞

章節概覽

Netty源碼分析章節概覽


1、概述

不管是什麼開發語言,都會涉及到網絡編程。在分佈式計算、存儲、微服務中,網絡編程作爲底層的核心支柱技術必不可少。以Java開發語言爲例,我們經歷了從BIO,NIO,AIO的不同階段。但是每個階段都是圍繞着幾個概念展開:同步,異步,阻塞,非阻塞。這邊文章我們用淺顯易懂的案例去說明這些概念。


2、場景描述

爲了更好的講解,我們以身邊的訂外賣爲場景進行詳細說明

2.1、場景一:阻塞

小明在努力的工作,由於工作過於投入,錯過了以往訂外賣的時間。之前小明都是在11點訂外賣的,然後12點左右可以送達。現在時間是12點了,同事們都在喫飯,而小明只能拿手機訂外賣,等着外賣的送達,餓的毫無心思去工作。

以上的這個場景,我們注意到,小明等着外賣的送達,在等待的過程中沒有做任何事情。這個過程就是阻塞的過程。

2.2、場景二:非阻塞

小明還是在努力的工作。他打開手機一看,11點,剛好可以訂外賣,於是他訂了外賣。訂了外賣以後,他又投入都自己的工作中。

在這個場景中,小明訂完外賣以後,又投入到工作中,這個過程就是非阻塞,因爲小明不是一直等着外賣的送達

2.3、場景三:同步

配送員收到訂單以後,開始派送外賣。不巧的是,外賣延遲半個多小時還沒送過來。打電話給配送員,倒黴的是配送員電話沒人接聽。小明只能打開地圖,時刻的關注着外賣小哥的位置信息。

這個過程中,小明必須隔幾分鐘看下外賣小哥的位置。對外賣小哥而言,他是處於同步狀態。

2.4、場景四:異步

配送員接收到訂單以後,在規定的時間裏送達。到了小明的辦公地點,打電話給小明,同時小明下來取餐。

這個過程中就是異步的。外賣小哥達到地點以後,打電話通知,而不需要小明一直看着地圖。這個時候我們說外賣小哥是異步狀態。


3、總結

通過上面的幾個場景描述。我們可以發現。如果小明代表着客戶單,而配送員代表着服務器。那麼存在以下的幾種情況:
同步阻塞:場景1,場景3
同步非阻塞:場景1,場景4
異步阻塞:場景2,場景3(大多數情況下,這個是沒啥意義的)
異步非阻塞:場景2,場景4(最理想的狀態)

其中,同步異步描述的是服務端的狀態。阻塞非阻塞描述的是客戶端的狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章