理解併發進程

1、說說你對順序程序設計與併發程序設計的理解。併發

順序程序設計:操作系統

把程序設計成順序執行的指令序列,不一樣程序也按照前後順序執行。程序順序執行與其速度無關,即程序的最終輸出僅與初始輸入數據有關,而與時間無關。具備如下特徵:
一、執行的順序性(即一個程序在處理器上是嚴格按照順序執行的,每一個操做必須在一個操做開始以前結束)。
二、環境的封閉性(程序運行獨佔全機資源,注意,是全機資源!後面咱們能夠看到和併發設計的不一樣點)。
三、過程的可再重現性(簡單點說就是無論你的計算機配置高仍是配置低、何時運行、什麼地方運行,它輸出的結果都是唯一的。這一點當你看到下面的併發進程就會深入體會到。由於併發程序執行的結果與時間相關)。設計


併發程序設計:
程序併發執行是指一組程序的執行在時間上是重疊的,所謂時間重疊就是一個程序還沒運行結束另外一個程序就開始執行了,或者說,多個程序處於都已開始執行但都還未執行完成。例如,A、B分別執行操做a1,a2,a3和b1,b2,b3。在單處理器上,順序執行操做序列爲a1,b1,a2,b2,a3,b3或a1,b1,a2,b2,b3,a3等,則稱A和B的執行是併發的。從宏觀上來看,併發性反映一個時間段內有幾個程序都處於運行但還沒有結束的狀態。注意:這只是宏觀上看來,其實處理器在同一時刻只能處理一個程序,千萬不要覺得同一時刻處理器在處理多個程序(要是有多個處理器那就另當別論了~)。就像你的大腦同樣,讓你同一時刻算多道運算題,你以爲可能嗎。計算機併發地計算多道題目只不過是先計算A題,可是還沒執行完,而後又去執行B題,B題還沒執行完,下面說不定又去執行A題或者其餘的題目。這樣在用戶看來好像是多個程序在同時執行。固然了這一切的保證是計算機運算速度是至關快的。若是計算機運行的速度很是慢(究竟有多慢本身腦補),你會明顯感受到cpu的控制權在各個程序之間來回交替。進程

進程的交互:競爭和協做
  一、競爭關係
    因爲建立了多個進程,這些進程共享計算機的資源。而對於一些獨佔型(就是同一時刻只能有一個進程在佔有這些資源)的資源,則會引起進程之間的競爭。資源

    進程互斥:若干進程相互爭奪獨佔型資源而產生的競爭制約關係。舉個通俗點的例子,就像多個男同窗同時追一個女同窗,這個女同窗一次只能選擇跟一個男生談戀愛。這個時候女生就至關於那個獨佔型資源。
  二、協做關係
    一組併發進程共同完成一個任務須要分工協做。可是因爲它們都獨立地以不可預知的速度推動(爲何說不可預知,由於操做系統啥時候讓你運行,讓你運行多久都不是進程這種小角色可以知道的~計算機的世界裏,操做系統就是最大的領導),可是他們在前後次序上又有一些約束。上個例子,有三個進程協做完成數據讀入、加工和打印任務,在一塊數據還未讀入以前是不能進行夠加工處理的,在加工處理完一塊數據以前是不能打印輸出的,這就是他們之間的協做關係。同步

 進程同步:併發進程之間協做完成共同的任務,可是在前後次序等等條件上有一些制約關係。數學

進程之間的互斥關係是一種特殊的同步關係。由於它們在那羣男生在排隊和那一個女生談戀愛的時候,也是有一個協調關係的。一次跟一羣男生談戀愛是很容易引發羣架的~因此他們之間得有個前後關係。程序設計

2、舉一個例子進行說明。class

   A、B分別要執行操做a1,a2,a3和b1,b2,b3。順序程序設計的執行順序是:a1,a2,a三、b1,b2,b3,即必須嚴格按照順序執行,先完成一個進程才能進行下一個進程。而併發運行:在單處理器上,順序執行操做序列爲a1,b1,a2,b2,a3,b3或a1,b1,a2,b2,b3,a3等,則稱A和B的執行是併發的。從宏觀上來看,併發性反映一個時間段內有幾個程序都處於運行但還沒有結束的狀態。但要注意:併發執行也只是宏觀上的角度來講,其實處理器在同一時刻只能處理一個程序,不要覺得同一時刻處理器在處理多個程序(要是有多個處理器那就另當別論了~)。就像你作數學運算,讓大腦同一時刻計算多道運算題是不可能的。計算機併發地計算多道題目只不過是先計算A題,可是還沒執行完,而後又去執行B題,B題還沒執行完,可能又會由於不明緣由又去執行A題或者其餘的題目。由於進程轉換的時間很是短,在用戶看來好像是多個程序在同時執行,也就是宏觀上的併發運行。而若是是順序運行,計算機只能先完成一道數學題,才能切換到下一道題。總的來講,併發程序設計比順序程序設計更充分的利用了計算機資源,運行效率也會更高,因此天然的對計算機的配置要求也會相應的提升。效率

相關文章
相關標籤/搜索