通俗易懂理解阻塞和非阻塞,同步與非同步

2021-10-08 08:21:07 字數 769 閱讀 6779

什麼是阻塞和非阻塞,同步與非同步?

我沒聽明白,你可不可以說人話?

一般有三種情況

那有沒有非同步阻塞呢?錢都是取好送給你的,你要阻塞在那幹嘛呢?

接下來再看乙個io例子,加深印象。

首先,我們要知道一次io的過程必然會有三個角色的參與

應用程式

核心資料

以一次資料的讀取為例,應用程式是沒有辦法直接操縱硬體裝置的,只有通過核心才能跟硬體互動。當網絡卡接收到資料之後,此時資料在網絡卡中,需要核心將網絡卡中的資料讀取到核心空間中,再從核心空間拷貝到使用者空間,這個時候應用程式才拿到資料,讀取資料結束。

模擬於io過程中的三個角色

對於應用程式而言,最終始要讀取到資料。

應用程式的io,就相當於應用程式發起了乙個io請求(以讀取資料為例),此時需要進行一次系統呼叫,核心由使用者態切換到核心態,核心開始跟硬體裝置進行互動並從硬體裝置中讀取資料,此時可能硬體裝置還沒有接收到資料,所以核心函式一直阻塞,直到資料到達才進行返回。這就是同步阻塞模型

應用程式的io,當應用程式發起了一次讀取資料的請求,還是會發起系統呼叫,但是此時核心根據硬體中是否有資料執行不同的操作,如果有資料,那麼將資料拷貝到使用者空間,如果沒有資料也會返回乙個標誌,比如-1,應用程式在輪詢期間並沒有一直阻塞,而是可以進行執行。這就是同步非阻塞

模擬應用程式的io,應用程式只需要發起一次讀取資料的請求,接下來就等著核心將資料拷貝到使用者空間,並且核心將資料拷貝完成後會通知應用程式,在整個過程中程式可以繼續往下執行。

理解阻塞非阻塞與同步非同步

同步和非同步關注的是訊息通訊機制 synchronous communication asynchronous communication 所謂同步,就是在發出乙個 呼叫 時,在沒有得到結果之前,該 呼叫 就不返回。但是一旦呼叫返回,就得到返回值了。換句話說,就是由 呼叫者 主動等待這個 呼叫 的結...

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

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

形象理解同步和非同步與阻塞和非阻塞

同步簡述 當發出乙個 呼叫 時,在沒有得到結果之前,該 呼叫 就不返回,呼叫者 需一直等待該 呼叫 結束,才能進行下一步工作。特點 呼叫方主動等待。舉例 假設你給隔壁老王打 要他家wifi密碼,老王說他要找一下。這時你沒有掛 而是一直等待另一頭的老王找了半天,直到等待他把wifi密碼找到告訴你 返回...