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

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

使用者空間和核心空間

使用者空間:使用者空間是常規程序所在的區域,是非特權的空間,在該空間執行的程式碼不能訪問硬體裝置 核心空間:是作業系統所在的區域,是特權空間,能與裝置控制器通訊,控制著使用者區域程序的執行狀態,最重要的是所有的I/O都直接或間接的通過核心空間。

執行內容 是否有特權 是否可以訪問硬體
使用者程序 常規程序
核心程序 作業系統

I/0模型

對於網路的I/O操作,可以分為兩個準備階段和操作階段。 準備階段:判斷資料是否能夠操作(即等待資料是否可用),在核心空間進行。 操作階段:從核心緩衝區拷貝資料到使用者緩衝區,這是實際的I/O操作。 在這裡插入圖片描述

同步&非同步

同步/非同步是使用者空間的呼叫 同步 I/O:使用者呼叫系統I/O服務,如果核心空間沒有資料,程序將被掛起,核心著手把資料讀進記憶體。 非同步 I/O:使用者發起系統呼叫,系統會立即返回,如果沒有資料,就返回特定標識,由系統負責等待資料,資料到達就通知使用者。

實際上同步與非同步是針對應用程式與核心的互動而言的。同步過程中程序觸發IO操作並等待或者輪詢的去檢視IO操作是否完成。非同步過程中程序觸發IO操作以後,直接返回,做自己的事情,IO交給核心來處理,完成後核心通知程序IO完成。如下圖所示: 在這裡插入圖片描述

阻塞&非阻塞

阻塞/非阻塞是核心空間的呼叫 阻塞:核心空間判斷資料是否到達,沒有到達就處於等待狀態。 非阻塞:核心判斷資料是否到達,如果未到達就立即返回。

簡單理解為需要做一件事能不能立即得到返回應答,如果不能立即獲得返回,需要等待,那就阻塞了,否則就可以理解為非阻塞。如下圖所示: 在這裡插入圖片描述

參考資料