順序執行
定義
順序執行是程式的一種執行方式。是把一個具有獨立功能的程式獨占處理機直至最終結束的過程稱為程式的順序執行。
程式順序執行時的特徵
(1) 順序性:處理機的操作嚴格按照程式所規定的順序執行,即每一操作必須在上一個操作結束之後開始。
(2) 封閉性:程式是在封閉的環境下執行的,即程式運行時獨占全機資源,資源的狀態(除初始狀態外)只有本程式才能改變它。 程式一旦開始執行, 其執行結果不受外界因素影響。
(3) 可再現性:只要程式執行時的環境和初始條件相同,當程式重複執行時,不論它是從頭到尾不停頓地執行,還是“停停走走”地執行,都將獲得相同的結果。程式順序執行時的特性,為程式設計師檢測和校正程式的錯誤帶來了很大的方便。
並發執行
定義
並發的本質是一個CPU在多個程式運行過程中的時分復用。並發對有限的系統資源實現多用戶共享,消除計算機軟硬體之間的互相等待現象,以提高系統資源利用率。對於多CPU系統,可讓各程式在不同CPU上並行執行,以加快計算速度。並發還可以簡化程式設計任務,即一個較大較複雜的程式可以被分成幾個能夠同時運行的小程式,每個小程式的邏輯可獲得一定的簡化 。
並發執行時的特徵
程式的並發執行,雖然提高了系統吞吐量,但也產生了下述一些與程式順序執行時不同的特徵。
1) 間斷性
序在並發執行時,由於它們共享系統資源,以及為完成同一項任務而相互合作,致使在這些並發執行的程式之間,形成了相互制約的關係。例如,圖中的 I、C 和 P 是三個相互合作的程式,當計算程式完成的計算後,如果輸入程式 I 尚未完成的處理,則計算程式就無法進行的處理,致使計算程式必須暫停運行。又如,當列印程式完成 的列印後,若計算程式尚未完成的計算,則列印程式就無法對的計算結果進行列印。一旦使程式暫停的因素消失後(如已處理完成), 計算程式便可恢復執行對的處理。 簡而言之,相互制約將導致並發程式具有“執行—暫停—執行”這種間斷性的活動規律。
2) 失去封閉性
程式在並發執行時,是多個程式共享系統中的各種資源,因而這些資源的狀態將由多個程式來改變,致使程式的運行失去了封閉性。這樣,某程式在執行時,必然會受到其它程式的影響。例如,當處理機這一資源已被某個程式占有時,另一程式必須等待。
3) 不可再現性
程式在並發執行時,由於失去了封閉性,也將導致其再失去可再現性。例如,有兩個循環程式 A 和 B,它們共享一個變數 N。程式 A 每執行一次時,都要做 N:=N+1 操作;程式 B 每執行一次時,都要執行 Print(N)操作,然後再將 N 置成“0” 。程式 A 和 B 以不同的速度運行。這樣,可能出現下述三種情況(假定某時刻變數 N 的值為 n)。
(1) N:=N+1 在 Print(N)和 N:=0 之前,此時得到的 N 值分別為 n+1,n+1,0。
(2) N:=N+1 在 Print(N)和 N:=0 之後,此時得到的 N 值分別為 n,0,1。
(3) N:=N+1 在 Print(N)和 N:=0 之間,此時得到的 N 值分別為 n,n+1,0。
上述情況說明,程式在並發執行時,由於失去了封閉性,其計算結果已與並發程式的執行速度有關,從而使程式的執行失去了可再現性,亦即,程式經過多次執行後,雖然它們執行時的環境和初始條件相同,但得到的結果卻各不相同。
並發程式設計
一種程式設計。是設計、編制和調試並發程式的技術。一個並發程式由若干個可同時執行的程式模組組成。這種可同時執行的程式模組稱為並發進程,由數據和有關的語句序列組成.並發進程的執行在時間上是重疊的,因此,一個並發程式的多個並發進程可以同時在多台處理器上並行執行,也可以在一台處理器上穿插執行。採用並發程式設計方法的好處是:可以使計算機的外圍設備和處理器並行工作,縮短程式執行時間,提高計算機系統的效率。要有效地採用並發程式設計,必須提供並發程式設計語言,防止死鎖的算法和同步機制等。
1.並發程式設計語言。並發程式設計語言的主要特徵是引入了進程概念,這種語言提供實現進程同步和通信的手段。這類語言有並發PASCAL,Modula-2,ADA等。
2.死鎖的預防和檢測.進程因爭奪資源而無休止地相互等待稱為死鎖.解決死鎖問題有兩種途徑:一是預防死鎖,設計各種資源調度算法,積極地防止死鎖的發生;二是檢測死鎖,當死鎖發生時能及時地發現並進行排除。
3.同步機制。在並發程式設計中,各進程對公共變數的訪問必須加以制約,這種制約稱為同步。進程的同步是通過同步機制實現的。代表性的同步機制有PV操作和管程等。PV操作是最早提出的用來解決公共變數問題的同步操作。管程是指一組公共數據同與其有關的操作的集合,只有引用管程中的操作才能訪問管程中的數據。