程序同步及非同步的概念

2021-04-12 17:15:41 字數 760 閱讀 5759

所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事.就像早上起床後,先洗涮,然後才能吃飯,不能在洗涮沒有完成時,就開始吃飯.按照這個定義,其實絕大多數函式都是同步呼叫(例如sin,isdigit等)。但是一般而言,我們在說同步、非同步的時候,特指那些需要其他部件協作或者需要一定時間完成的任務。最常見的例子就是

sendmessage。該函式傳送乙個訊息給某個視窗,在對方處理完訊息之前,這個函式不返回。當對方處理完畢以後,該函式才把訊息處理函式所返回的

lresult值返回給呼叫者。

非同步的概念和同步相對。當乙個非同步過程呼叫發出後,呼叫者不能立刻得到結果。實際處理這個呼叫的部件在完成後,通過狀態、通知和**來通知呼叫者。

以casycsocket類為例(注意,csocket從casyncsocket派生,但是起功能已經由非同步轉化為同步),當乙個客戶端通過呼叫

connect函式發出乙個連線請求後,呼叫者執行緒立刻可以朝下執行。當連線真正建立起來以後,socket底層會傳送乙個訊息通知該物件。

這裡提到執行部件和呼叫者通過三種途徑返回結果:狀態、通知和**。可以使用哪一種依賴於執行部件的實現,除非執行部件提供多種選擇,否則不受呼叫者控制。如

果執行部件用狀態來通知,那麼呼叫者就需要每隔一定時間檢查一次,效率就很低(有些初學多執行緒程式設計的人,總喜歡用乙個迴圈去檢查某個變數的值,這其實是一

種很嚴重的錯誤)。如果是使用通知的方式,效率則很高,因為執行部件幾乎不需要做額外的操作。至於**函式,其實和通知沒太多區別。

程序同步與非同步

過程的執行有一定的順序,也就是說必須一步一步執行。舉個例子,在socket中,伺服器accept 等待客戶端的連線,這裡的等待實際上就是阻塞了,在客戶端連線之前,該過程不會往下執行。在同步阻塞中,應用程式執行到需要io操作,會執行乙個系統呼叫,然後講控制權交給核心,此時應用程式便發生的堵塞。核心得到...

程序同步(一) 程序同步相關概念

在os中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數 鍊錶時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執...

12程序同步的概念

程序同步的基本概念 多道程式下,程序是併發的,為了協調程序之間的相互制約關係,引入了程序同步的概念。1 臨界資源 一次僅允許乙個程序使用的資源稱為臨界資源。如印表機,一些變數 資料 臨界資源的訪問,必須互斥進行,每個程序中,訪問臨界資源的那段 稱為臨界區 為保證臨界資源的正確使用,可以把臨界資源的訪...