1. 程式人生 > >同步、異步、阻塞、非阻塞。

同步、異步、阻塞、非阻塞。

進行 媽媽 文件 好的 消息 是否 結果 不讓 操作

看到一個很好的解釋,於是記錄下來。

非阻塞式通常是對於I/O操作而言的,意思就是當你請求一個系統調用的時候,不管收到什麽結果函數都會立即返回,而不讓線程進入休眠狀態以等待I/O操作的完成。相反阻塞式I/O方式在請求一個磁盤文件時會進入線程休眠狀態以等待磁盤I/O完成後再蘇醒。

異步/同步與阻塞式/非阻塞式的區別在於前者主要描述消息通信機制,異步時被調用者通過通知、狀態或回調來告知調用者。而後者主要描述程序在等待調用結果時的狀態,非阻塞式時調用者主動以一定的間隔時間查看調用是否完成。

感覺還沒講清楚,再來一個栗子。小黃餓了,讓媽媽做蛋糕給他吃(發起調用)。

同步阻塞:小黃啥也不幹,就盯著(阻塞)媽媽做完蛋糕立即(同步)開吃。

異步阻塞:媽媽讓小黃先去一邊玩並答應蛋糕一做好就叫小黃來吃(異步通知),但小黃還是什麽也不做(阻塞),等著媽媽把蛋糕做好。

同步非阻塞:媽媽開始做蛋糕之後小黃就去看電視了(非阻塞),但隔一下就去廚房看(同步)媽媽做好沒。

異步非阻塞:媽媽答應蛋糕一做好就叫小黃來吃(異步通知),小黃安心看電視去了(非阻塞)。

從這裏面可以看出,異步通常帶有通知(或狀態、回調),由被調用者通知調用者任務已完成,同步則調用者主動盯著任務是否完成。阻塞與非阻塞即描述被調用者進行任務時,調用者是幹等著還是抽空幹點別的。

原文鏈接:https://www.cnblogs.com/yulibostu/articles/9797983.html

同步、異步、阻塞、非阻塞。