三 阻塞 非阻塞 同步 非同步理解

2022-03-14 06:03:40 字數 873 閱讀 7488

這裡先定義兩個方法funca和funcb,funca中將呼叫funcb,以下我們假設funcb中做了一些耗時的io操作。

public

void

funca()

public

void

funcb()

先了解一下核心態和使用者態。計算機在呼叫層上劃分了使用者態、核心態。

我們編寫的應用程式即執行在使用者態,與核心態相對隔離。當我們的應用程式發起乙個io操作的時候,會通過api系統呼叫核心態執行核心操作。

我們可以簡單理解為:應用程式的執行緒呼叫了系統的api介面,從而在核心中執行了另乙個執行緒執行io操作。

當執行核心呼叫的時候,應用程式的執行緒通常會停止執行,這時候進入了「阻塞」狀態。進入阻塞狀態的執行緒不能做任何操作,它得等待核心呼叫完成。

可是執行緒如何知道核心呼叫有沒有完成呢?

1、執行緒一直阻塞,等到核心呼叫返回結果,即「同步」等待結果。 ---- 阻塞同步

2、執行緒一直阻塞,等待核心呼叫通知其已就緒,執行緒再去獲取結果即「非同步」等待通知。 ---- 阻塞非同步

阻塞的方式使得執行緒在阻塞期間完全不能做其它事情。於是我們希望在核心呼叫的執行期間,執行緒可以繼續執行以提高利用率,這種狀態即「非阻塞」狀態。

非阻塞狀態下執行緒可以繼續執行:

1、如果你不斷地去輪詢核心呼叫的執行結果,那麼即「同步」;---- 非阻塞同步

2、如果你去做了別的事,等到核心呼叫結束,通知執行緒的時候才繼續執行,即「非同步。---- 非阻塞非同步

總結:同步、非同步是關注於是主動獲取結果,還是被動等通知。阻塞、非阻塞是關注於你是否能繼續執行。

同步 非同步,阻塞 非阻塞理解

由於同步非同步,阻塞非阻塞都學習了有一段時間了。慢慢了快忘了,所以乾脆趁著寒假把知識點都撿起來,寫出來。同步和非同步是一組概念,阻塞和非阻塞是一組概念。大家不要搞混了,不要把同步和阻塞等價,也不要把非同步和非阻塞等價 戲說不是胡說,改編不是亂編 滑稽 在剛開始理解的時候很容易搞混,我們這樣想,同步和...

非同步,同步,阻塞,非阻塞個人理解

同步 所謂同步,就是函式在發出乙個功能呼叫過程時,在過程沒有完成結束前,函式也是得不到返回的。按照這個定義,其實絕大多數函式都是同步呼叫 例如sin,isdigit等 但是一般而言,我們在說同步 非同步的時候,特指的是那些需要其他部件協作或者需要一定時間完成的任務。最常見的例子就是 sendmess...

怎樣理解 同步 非同步 阻塞 非阻塞

老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻塞 老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺...