並發性[計算機並發性]

並發性[計算機並發性]
並發性[計算機並發性]
更多義項 ▼ 收起列表 ▲

在計算機科學中,並發性(Concurrence)是指在一個系統中,擁有多個計算,這些計算有同時執行的特性,而且他們之間有著潛在的互動。因此系統可進行的運行路徑會有相當多個,而且結果可能具有不確定性。並發計算可能會在具備多核心的同一個晶片中複合運行,以優先分時執行緒在同一個處理器中運行,或在不同的處理器執行。

簡介

計算機作業系統一般都具有並發、共享、虛擬和異步這四個基本特徵。其中,並發特徵是作業系統最重要的特徵,其它三個特徵都是以並發特徵為前提的。並發性 (Concurrence) 是指兩個或多個事件在同一時間間隔內發生。通常的程式是靜態實體(Passive Entity),在多道程式系統中,它們是不能獨立運行的,更不能和其它程式並發執行。在作業系統中引入進程,就是為了使多個程式能並發執行。

並行性和並發性 (Concurrence) 是既相似又有區別的兩個概念,並行性是指兩個或多個事件在同一時刻發生;而並發性是指兩個或多個事件在同一時間間隔內發生。在多道程式環境下,並發性是指在一段時間內巨觀上有多個程式在同時運行,但在單處理機系統中每一時刻卻僅能有一道程式執行,故微觀上這些程式只能是分時地交替執行。倘若在計算機系統中有多個處理機,則這些可以並發執行的程式便可被分配到多個處理機上,實現並行執行,即利用每個處理機來處理一個可並發執行的程式,這樣,多個程式便可同時執行。

並發性的不同層次

1、數字邏輯層幾乎所有事情都是並行的,信號在大量連線上同時傳播。

2、在現代處理器里,流水線和超標量特徵就是為了利用指令級並行。

3、專用向量處理器實現一種中層的數據並行;各種多處理器系統中存在很多並行運行的進程;在網際網路上一切事情都並發地進行。

4、程式的並發性。

並發性的優點和缺點

優點

資源利用率更好

程式設計在某些情況下更簡單

程式回響更快

提高系統性能

缺點

因為在並發系統下運算可以在運行時彼此互動,系統可進行的運行路徑會有相當多個,產生的結果可能具有不確定性(Indeterminacy)。並發使用的分享資源可能變成一個不確定的資源並導致諸如死鎖和資源匱乏等問題 。

並發計算

概述

並發計算,簡單來說,就是將一個計算任務,分區成幾個小的部分,讓它們同時被計算,之後再匯整計算結果,以完成任務。它跟並行計算(Parallel computing)與分散式計算,有重疊之處,在概念上不同,但常會讓人混淆。

並發計算是一種程式運算的特性,可以被視為是並行運算的進一步抽象,它包涵了時間片這種可以被用來實現虛擬並行運算(pseudo parallelism)的技術,因此在實際的物理運作中,計算過程可能是並行,或非並行的。

並行計算是指,當並發計算的程式,在機器平台上同時被運行的狀況,因此,並行計算是一種機器運算的形式之一。分散式計算(Distributed computing)則是並行計算的一個特例,它採用計算機網路來進行同步。

實現並發程式有許多方式,依程式語言與作業系統的支持,可以用進程,或是執行緒來實現。它可以運行在單一處理器上,將不同的運行步驟分散在不同時間片中運行,以非並行方式循序運算;它也可以用並行計算來實現,將每個進程指定給處理器組中的某個處理器,以單片機多處理器平台,或是通過網路連結的分散平台來實做。

依照硬體與作業系統的支持,並發計算可以在同一個進程中完成,在同一個進程中以多執行緒來完成,以多個進程來達成,甚至可以分成數個程式來運行。可以用單處理器的循序計算來實現,也可以采並行計算或分散式計算方式實做。但以並行方式來運作並發程式,並不必然會增進運行效率。因為運行結果可能會因為平台特性而改變,也增加它在設計上的難度。

優點

並發計算可以增加產出 - 讓並發程式以並行方式運行,在某個特定時間內,可以讓數個進程同時完成計算任務,增加了產出。

輸入/輸出的反應時間加快 - 密集進行輸入/輸出(I/O)操作的應用程式,多數的時間,都在等待輸入或輸出操作完成。在等待的時間中,並發計算編程可以讓另外的進程來運作。更適當的程式架構 - 某些計算問題或問題的領域,特別適合以並發計算來解決。

並發互動與通信

並發計算中,不同計算單元之間,需要進行通信以保持同步。這些通信方式,在某些並發程式語言中,是被隱藏起來的(例如,利用future方式)。以外顯方式來進行通信,可分成兩種主要方式:

共享記憶體通信,是指經由改變共享記憶體地址內的數據內容,讓不同的並發單元間進行通信,如Java與C#都支持這個方式。使用這種通信類型的並發程式,通常需要套用某種鎖定的方式來達成執行緒間的同步,這些鎖定技術包括mutex,semaphore,或monitor等。

訊息傳遞通信,是指通過訊息的交換,使不同的並發單元間同步,如Scala,Erlang與occam。

並行性和並發性的區別

並發的實質是一個物理CPU(也可以多個物理CPU)在若干道程式之間多路復用,並發性是對有限物理資源強制行使多用戶共享以提高效率。並發性是關於軟體過程分解成進程、執行緒並處理相關的效率、原子性、同步和調度問題。

實現並發技術的關鍵之一是如何對系統內的多個活動(進程)進行切換。

並行的時間或者活動一定是並發的,但是反之並發的時間或者活動未必是並行的。並行性是並發性的特例,而並發性是並行性的基本。

實行並行性的原因,由於計算機和外部的設備不匹配,輸入和輸出極大地影響了效率。例如一台計算機的記憶體里只有一個程式在運行,該程式還不能處理它未擁有的數據,並且只有在它獲得數據後,它可以繼續執行下一步操作,要延續這個程式必須等待輸入或輸出。既然這個程式控制著個計算機,那么計算機也必須等待。使得一個計算機等待時間要遠超過它處理數據時花的時間。為什麼不把兩個程式同時放進記憶體。一旦如此,程式A等待數據時,處理器就可以轉向程式B。還可以繼續推廣,有兩個或更多的程式裝入記憶體以便更好的利用記憶體。一般來說,裝入記憶體的程式越多,處理器的利用率也就越高,這是相對的。

那么計算機是如何進行處理的呢?處理器在一個機器周期中捕獲並執行單個指令。如果處理器在同一時刻只能處理一條指令,那么它是不可能同時處理兩個程式。因此,儘管多道程式可以共享記憶體,但是只有一個程式是活躍的。並行性是指“在同一時刻”,多核處理器能夠同時運行多個程式。並發性是指“在一段時間內”一個處理器可以並發的處理多個程式。

一個並發程式是指能同時執行通常不相關的各種任務。以一個遊戲伺服器為例子:它通常是有各種組件組成,每種組件都跟外部世界進行著複雜的信息互動。一個組件有可能要處理多個用戶聊天;另外一些可能要處理用戶的輸入,並把最新狀態反饋給用戶;其它的用來進行物理計算。這些都是並發處理 。

並發程式並不需要多核處理器。

相比之下,並行程式是用來解決一個單一任務的。以一個試圖預估某支股票價格在下一分鐘波動情況的金融組件為例,如果想最快速度的知道標普500中哪支股票應該賣出還是買進,你不能一個一個的計算,而是將這些所有的股票同時計算。這是並行。

相關詞條

相關搜尋

熱門詞條

聯絡我們