這裏區分幾個概念,也是常見可是容易混淆的概念,就是標題中的同步、異步、阻塞、非阻塞。異步
同步與異步,關心的是消息通訊的機制。也就是調用者和被調用者之間,消息是如何進行通知的。若是是調用者主動等待調用的結果,那麼就是同步。若是是被調用者主動去通知調用者,就是異步。
從上面的描述中,咱們能夠看到。同步仍是異步,主要是看的消息通知的方式,一個是調用者主動等待,一個是調用者被通知。線程
一樣的,對於這樣兩個概念,咱們細細思考下,並不難理解。這兩個概念都是針對於調用者來講的,若是調用者在等待調用結果時,不能作其餘的事情,就是阻塞;不然就是非阻塞。也就是看調用過程當中,調用者線程的狀態,調用線程被掛起,沒法進行其餘的操做,就是阻塞;若是不被掛起,還能繼續其餘的操做,就是非阻塞。code
針對以上四個名詞,咱們進行組合,能夠獲得另外四個名詞:同步阻塞、異步阻塞、同步非阻塞、異步非阻塞。這幾個名詞咱們常常能夠見到,可是理解一下也不難。咱們舉個例子來看看。
好比,咱們要用迅雷下載一個文件,這個文件很大,大概要下載1個小時。
若是在下載過程當中,咱們什麼事也不作,就坐在電腦前,盯着迅雷等着下完,這個過程就是同步阻塞。
若是在下載過程當中,咱們也是坐在電腦前什麼也不作,可是迅雷下載完成會經過音樂來通知咱們下完了,這樣就是異步阻塞。
若是在下載過程當中,咱們不在電腦邊上,能夠去看書,玩耍,可是要時不時的去電腦前看看有沒有下載完,這個過程就是同步非阻塞。
若是在下載過程當中,咱們不在電腦邊上,也不用去電腦上看着,並且在下載完成後,迅雷放了一段音樂來提醒咱們已經下載完成,這個過程就是異步非阻塞。同步
歡迎你們關注個人公衆號,有各類一線分享。下載