乙個例子讓你清楚的理解同步,非同步,阻塞,非阻塞

2022-08-19 01:01:43 字數 924 閱讀 2548

同步阻塞、同步非阻塞、非同步阻塞、非同步非阻塞

出場人物:小明,水壺2個(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)

1.小明把水壺放到火上,然後在那傻等水開。(同步阻塞)

小明覺得自己有點傻。。。。。。

2.小明把水壺放到火上,然後去客廳看電視,時不時的去廚房看看水開沒有。(同步非阻塞)

小明還是覺得自己有點傻,於是變高階了,買了乙個水燒開了會響的水壺。水開之後能大聲的發出響聲提示人水開了。。。

3.小明把響水壺放到火上,然後在那傻等水開。(非同步阻塞)

小明覺得傻等沒有意義,不應該傻等。。。

4.小明把響水水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去處理。(非同步非阻塞)

小明覺得自己聰明了。。。完。。。

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

所謂阻塞非阻塞,僅僅對於小明而言。立等(傻等)的小明,阻塞;看電視的小明,非阻塞。情況1和情況3中小明就是阻塞的,有人喊他都不知道。雖然3中響水壺是非同步的,可對於立等的小明沒有太大的意義。所以一般非同步是配合非阻塞使用的,這樣才能發揮非同步的效用。

我們可以分組對比著理解記憶:

同步非同步:同步是指乙個時間點只能有乙個程式在占用cpu,而非同步是指可以有多個程式並行(可以很好的利用作業系統的多核)

阻塞非阻塞:阻塞是指作業系統發出乙個呼叫/操作之後,必須等到此呼叫返回結果後才返回。而非阻塞是指在作業系統發出乙個呼叫/操作後,不用等到執行完畢得到結果才返回,而是立即返回,然後可以執行其他的呼叫/操作(例如:在遇到比較耗時的io操作時,無需等待此io操作完成再返回)。

乙個例子讓你理解Generator語法

function foo let generator foo 返回迭代器例項 指標物件 console.log generator.next 111 console.log generator.next aaaa console.log generator.next console.log gene...

非同步操作的乙個例子

using system using system.collections.generic using system.linq using system.web using system.web.ui using system.web.ui.webcontrols using system.io u...

乙個例子理解C 位移

來自 很多人覺得位移這東西很複雜,二進位制一堆0 1看不懂。其實很簡單。位移理解可能簡單一些 其實位移就是資料轉換成二進位制的左右移動 右移左補0,左移右補0,後面多出來的部分去掉。用乘除法去理解位移也可以 左位移 相當於乘 左移1位相當於乘2,左移2位相當於乘4,左移3位相當於乘8,左移4位相當於...