理解並發進程


一、說說你對順序程序設計與並發程序設計的理解。

順序程序設計:

把程序設計成順序執行的指令序列,不同程序也按照先后順序執行。程序順序執行與其速度無關,即程序的最終輸出僅與初始輸入數據有關,而與時間無關。具有以下特征:
1、執行的順序性(即一個程序在處理器上是嚴格按照順序執行的,每個操作必須在一個操作開始之前結束)。
2、環境的封閉性(程序運行獨占全機資源,注意,是全機資源!后面我們可以看到和並發設計的不同點)。
3、過程的可再重現性(簡單點說就是不管你的計算機配置高還是配置低、什么時候運行、什么地方運行,它輸出的結果都是惟一的。這一點當你看到下面的並發進程就會深刻體會到。因為並發程序執行的結果與時間相關)。


並發程序設計:
程序並發執行是指一組程序的執行在時間上是重疊的,所謂時間重疊就是一個程序還沒運行結束另一個程序就開始執行了,或者說,多個程序處於都已開始執行但都還未執行完成。例如,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的控制權在各個程序之間來回交替。

進程的交互:競爭和協作
  1、競爭關系
    由於創建了多個進程,這些進程共享計算機的資源。而對於一些獨占型(就是同一時刻只能有一個進程在占有這些資源)的資源,則會引發進程之間的競爭。

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

 進程同步:並發進程之間協作完成共同的任務,但是在先后次序等等條件上有一些制約關系。

進程之間的互斥關系是一種特殊的同步關系。因為它們在那群男生在排隊和那一個女生談戀愛的時候,也是有一個協調關系的。一次跟一群男生談戀愛是很容易引起群架的~所以他們之間得有個先后關系。

二、舉一個例子進行說明。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM