[筆記]理解 —同步(Synchronous)、異步(Asynchronous)、阻塞(Block)、非阻塞(Non-block)

R. H.
hobo engineer
Published in
3 min readDec 26, 2018

今天在接觸 Tornado web 框架時,看了第一段發現幾個既熟悉又陌生的詞

Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user.

第一次看到這段指理解 Tornado 是個能處理大量連線的 web 框架 ,因為是 asynchronous networking 、non-blocking network I/O ……

這幾個字詞雖有聽過,但每次遇到總是似懂非懂的感覺,故以此篇紀錄,而以下是爬文後找到的比較有趣解釋方式

老張愛喝茶,廢話不說,煮開水。
出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。

情況1 -(同步阻塞):
老張把水壺放到火上,立等水開。
( 人會卡在那直到事情完成)

情況2 -(同步非阻塞):
老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。
老張還是覺得自己有點傻,於是變高端了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。
( 被請求方不會主動通知,所以每隔一段時間就要重新詢問一次)

情況3 -(異步阻塞):
老張把響水壺放到火上,立等水開。
老張覺得這樣傻等意義不大
( 被請求方變聰明了,會回傳訊息給請求方,但是請求方怎麼樣都會等待,所以會不會通知根本沒差。)

情況4 - (異步非阻塞):
老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。
老張覺得自己聰明了。
( 這就是目前比較有效率的處理方式)

而所謂的同步異步,只是對於水壺而言。
普通水壺,同步;響水壺,異步。
雖然都能幹活,但響水壺可以在自己完工之後,提示老張水開了。這是普通水壺所不能及的。
同步只能讓使用者去詢問(情況2中),造成老張效率的低下。

所謂阻塞非阻塞,僅僅對於老張而言。
立等的老張,阻塞;看電視的老張,非阻塞。
情況1和情況3中老張就是阻塞的。雖然3中響水壺是異步的,可對於立等的老張沒有太大的意義。所以一般異步是配合非阻塞使用的,這樣才能發揮異步的效用。

--

--