複製鏈接
請複製以下鏈接發送給好友

併發性

(計算機併發性)

鎖定
計算機科學中,併發性(Concurrence)是指在一個系統中,擁有多個計算,這些計算有同時執行的特性,而且他們之間有着潛在的交互。因此係統可進行的運行路徑會有相當多個,而且結果可能具有不確定性。併發計算可能會在具備多核心的同一個芯片中複合運行,以優先分時線程在同一個處理器中運行,或在不同的處理器執行。
中文名
併發性
外文名
Concurrence
學    科
計算機科學
定    義
不少於兩個事件在同一間隔內發生
有關術語
並行性
作    用
提高計算機的效率與性能

併發性簡介

計算機操作系統一般都具有併發、共享、虛擬和異步這四個基本特徵。其中,併發特徵是操作系統最重要的特徵,其它三個特徵都是以併發特徵為前提的。併發性 (Concurrence) 是指兩個或多個事件在同一時間間隔內發生。通常的程序是靜態實體(Passive Entity),在多道程序系統中,它們是不能獨立運行的,更不能和其它程序併發執行。在操作系統中引入進程,就是為了使多個程序能併發執行。
並行性和併發性 (Concurrence) 是既相似又有區別的兩個概念,並行性是指兩個或多個事件在同一時刻發生;而併發性是指兩個或多個事件在同一時間間隔內發生。在多道程序環境下,併發性是指在一段時間內宏觀上有多個程序在同時運行,但在單處理機系統中每一時刻卻僅能有一道程序執行,故微觀上這些程序只能是分時地交替執行。倘若在計算機系統中有多個處理機,則這些可以併發執行的程序便可被分配到多個處理機上,實現並行執行,即利用每個處理機來處理一個可併發執行的程序,這樣,多個程序便可同時執行。 [1] 

併發性併發性的不同層次

1、數字邏輯層幾乎所有事情都是並行的,信號在大量連線上同時傳播。
2、在現代處理器裏,流水線和超標量特徵就是為了利用指令級並行。
3、專用向量處理器實現一種中層的數據並行;各種多處理器系統中存在很多並行運行的進程;在互聯網上一切事情都併發地進行。
4、程序的併發性。

併發性併發性的優點和缺點

併發性優點

資源利用率更好
程序設計在某些情況下更簡單
程序響應更快
提高系統性能

併發性缺點

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

併發性併發計算

併發計算,簡單來説,就是將一個計算任務,分區成幾個小的部分,讓它們同時被計算,之後再彙整計算結果,以完成任務。它跟並行計算(Parallel computing)與分佈式計算,有重疊之處,在概念上不同,但常會讓人混淆。
併發計算是一種程序運算的特性,可以被視為是並行運算的進一步抽象,它包涵了時間片這種可以被用來實現虛擬並行運算(pseudo parallelism)的技術,因此在實際的物理運作中,計算過程可能是並行,或非並行的。
並行計算是指,當併發計算的程序,在機器平台上同時被運行的狀況,因此,並行計算是一種機器運算的形式之一。分佈式計算(Distributed computing)則是並行計算的一個特例,它採用計算機網絡來進行同步。
實現併發程序有許多方式,依編程語言與操作系統的支持,可以用進程,或是線程來實現。它可以運行在單一處理器上,將不同的運行步驟分散在不同時間片中運行,以非並行方式循序運算;它也可以用並行計算來實現,將每個進程指定給處理器組中的某個處理器,以單片機多處理器平台,或是通過網絡鏈接的分散平台來實做。
依照硬件與操作系統的支持,併發計算可以在同一個進程中完成,在同一個進程中以多線程來完成,以多個進程來達成,甚至可以分成數個程序來運行。可以用單處理器的循序計算來實現,也可以採並行計算或分佈式計算方式實做。但以並行方式來運作併發程序,並不必然會增進運行效率。因為運行結果可能會因為平台特性而改變,也增加它在設計上的難度。

併發性優點

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

併發性併發交互與通信

併發計算中,不同計算單元之間,需要進行通信以保持同步。這些通信方式,在某些併發編程語言中,是被隱藏起來的(例如,利用future方式)。以外顯方式來進行通信,可分成兩種主要方式:
共享內存通信,是指經由改變共享內存地址內的數據內容,讓不同的併發單元間進行通信,如Java與C#都支持這個方式。使用這種通信類型的併發程序,通常需要應用某種鎖定的方式來達成線程間的同步,這些鎖定技術包括mutex,semaphore,或monitor等。
消息傳遞通信,是指通過消息的交換,使不同的併發單元間同步,如Scala,Erlang與occam。

併發性並行性和併發性的區別

併發的實質是一個物理CPU(也可以多個物理CPU)在若干道程序之間多路複用,併發性是對有限物理資源強制行使多用户共享以提高效率。併發性是關於軟件過程分解成進程、線程並處理相關的效率、原子性、同步和調度問題。
實現併發技術的關鍵之一是如何對系統內的多個活動(進程)進行切換。
並行的時間或者活動一定是併發的,但是反之併發的時間或者活動未必是並行的。並行性是併發性的特例,而併發性是並行性的基本。
實行並行性的原因,由於計算機和外部的設備不匹配,輸入和輸出極大地影響了效率。例如一台計算機的內存裏只有一個程序在運行,該程序還不能處理它未擁有的數據,並且只有在它獲得數據後,它可以繼續執行下一步操作,要延續這個程序必須等待輸入或輸出。既然這個程序控制着個計算機,那麼計算機也必須等待。使得一個計算機等待時間要遠超過它處理數據時花的時間。為什麼不把兩個程序同時放進內存。一旦如此,程序A等待數據時,處理器就可以轉向程序B。還可以繼續推廣,有兩個或更多的程序裝入內存以便更好的利用內存。一般來説,裝入內存的程序越多,處理器的利用率也就越高,這是相對的。
那麼計算機是如何進行處理的呢?處理器在一個機器週期中捕獲並執行單個指令。如果處理器在同一時刻只能處理一條指令,那麼它是不可能同時處理兩個程序。因此,儘管多道程序可以共享內存,但是隻有一個程序是活躍的。並行性是指“在同一時刻”,多核處理器能夠同時運行多個程序。併發性是指“在一段時間內”一個處理器可以併發的處理多個程序。
一個併發程序是指能同時執行通常不相關的各種任務。以一個遊戲服務器為例子:它通常是有各種組件組成,每種組件都跟外部世界進行着複雜的信息交互。一個組件有可能要處理多個用户聊天;另外一些可能要處理用户的輸入,並把最新狀態反饋給用户;其它的用來進行物理計算。這些都是併發處理 [3] 
併發程序並不需要多核處理器
相比之下,並行程序是用來解決一個單一任務的。以一個試圖預估某支股票價格在下一分鐘波動情況的金融組件為例,如果想最快速度的知道標普500中哪支股票應該賣出還是買進,你不能一個一個的計算,而是將這些所有的股票同時計算。這是並行。
參考資料
  • 1.    湯小丹.計算機操作系統:西安電子科技大學出版社,2010
  • 2.    Cleaveland, Rance; Scott Smolka. Strategic Directions in Concurrency Research. ACM Computing Surveys. December 1996, 28 (4): 607. doi:10.1145/242223.242252.
  • 3.    Bryan O'Sullivan , John Goerzen , Don Stewart .Real World Haskell:O'Reilly Media,2008