同步阻塞:

以在飲料店點飲料為例子,你向店員點了一杯珍珠奶茶(假設店員只有一位),付了錢之後,你不讓出你的位置到旁邊去給下一位客人點飲料,而是站在原地,一直死命地盯著店員,看他有沒有好好地做你的珍珠奶茶,你也沒有辦法做其他事情,直到店員做好你的珍珠奶茶拿給你為止。(同步:你的飲料做完之後才能做別人的飲料;阻塞:死命盯著看,不能做別的事情)

同步非阻塞:

同樣以剛剛的例子為例,同樣點了一杯飲料之後,不讓出你的位置到旁邊給下一位客人點飲料,站在原地死命地盯著店員,看他有沒有好好地做你的珍珠奶茶。不過這次你聰明了一點,你不再分分秒秒死盯著店員看,而是每 30 秒看一下店員確認進度,在這 30 秒之前,你可以滑手機做你的事情。(同步:你的飲料做完之後才能做別人的飲料;非阻塞:改每 30 秒確認一次,其他時間可以做其他事情)

非同步非阻塞:

同樣子剛剛的例子為例,同樣點了一杯飲料之後,你就讓出位置到等候區讓其他人點餐。你也不會死命地盯著店員,看他到底做好了沒,而是做你的事情,例如滑滑手機、講講電話,等到店員做好叫號的時候,聽到店員叫號才去拿你的飲料

非同步阻塞:

所以非同步的動作是不是就等於非阻塞呢?因為都到等候區了,想要做自己的事就做自己事情,你也不會去理會店員做什麼。但是意外總是發生在大意的時候,例如你忘記帶手機了,即使可以做自己的事情也根本沒有事情可以做,只能眼睜睜地看著店員做飲料。

所以以你的立場來說,你雖然到了等候區做了非同步的動作想要做自己的事情,但是你想做的事情做不了(因為沒帶手機,必須等飲料做好之後,才能回家拿手機繼續做事情),所以對你來說你要做的事情還是被堵住了,這就是非同步阻塞

最後總結這四個概念:

  • 同步阻塞:你做你的,我盯著你做
  • 同步非阻塞:你做你的,我每隔 30 秒看一下你的進度
  • 非同步阻塞:你做你的,做好了告訴我,我等你做
  • 非同步非阻塞:你做你的,我忙我的,好了告訴我

同步和非同步表示過程,阻塞和非阻塞表示過程中的狀態