1. 程式人生 > >程序同步與非同步

程序同步與非同步

首先我們要清楚程序的同步與非同步說的是程序間的執行關係,而不是程序的執行的執行狀態(阻塞與非阻塞)。

我們所謂的程序同步是說在某些地方,多個併發程序需要相互等待或交換資訊而產生的制約關係,併發程序之間不是相互排斥臨界資源,而是相互依賴的關係。確切說,同步關係就是前一個程序的輸出作為後一個程序的輸入;當第一個程序沒有輸出時,第二個程序必須等待。

而非同步是相對於同步而言,同步是順序執行程序,執行完一個程序再執行下一個程序,需要程序之間等待、協調執行;非同步是程序之間彼此獨立,在等待其他程序的執行時,本程序繼續做自己的事,不需要等待其他程序完成後再工作。

舉個泡茶的例子來說明,假設說我們燒水需要10分鐘,洗茶具需要三分鐘,準備茶葉需要兩分鐘,泡茶需要2分鐘,那麼我們都知道最好的解決辦法是在燒開水的過程中清洗茶具和準備茶葉,這樣我們需要12分鐘就能喝到茶,這個事件中燒水,洗茶具和準備茶葉就是非同步進行,不需要互相等待資源,但是泡茶與燒水,洗茶具和準備茶葉就是程序同步,需要這三個時間都完成後才能泡茶。