1. 程式人生 > >同步異步阻塞非阻塞可中斷的睡眠不可中斷的睡眠

同步異步阻塞非阻塞可中斷的睡眠不可中斷的睡眠

執行時間 分支 但是 我們 多進程並發 預測 不支持 隊列實現 完成

同步:所有程序是按照一定邏輯先後順序執行的,前一個代碼沒有執行完成,後面的代碼不會執行。

異步:程序可能有若幹分支,各自的執行時間點沒有約束,也不可提前預測。

阻塞:阻塞指的是一個程序在執行的時候,沒有成功獲取到相應的資源(變量/標誌/內存/數據等),那麽就一直等待在這裏循環或者睡眠等待資源可以被獲取。這個時候我們一般會把阻塞的進程放到等待隊列中,等待被喚醒。這個會涉及到等待隊列的知識,在本章最後會講解。

非阻塞:非阻塞指的是程序在獲取資源或者其他數據的時候沒有成功,那麽直接返回錯誤碼。

不可中斷的睡眠:在上面阻塞的情況下會使用到睡眠的屬性。不可被中斷打斷

可中斷的睡眠:在上面阻塞的情況下會使用到睡眠的屬性。可被中斷打斷

等待隊列:進程阻塞的時候,要把進程加入到等待隊列中,加入的屬性有可中斷,不可中斷等。喚醒等待隊列中的進程時,也有幾個屬性(全部喚醒/喚醒可中斷的/喚醒若幹個可中斷)。其實還有一個互斥標誌,也是用來喚醒等待隊列中的進程用的屬性。相當一個進程的特殊標誌,不過一般情況下很少使用。

等待隊列實現多進程並發:等待隊列可實現多進程並發:但是目前添加進程到等待隊列的內核函數的現有實現方式不支持,我們需要自己去實現一下wait_event函數,都是使用原來wait_event函數內部的函數實現的,在邏輯上稍作修改。

同步異步阻塞非阻塞可中斷的睡眠不可中斷的睡眠