1. 程式人生 > >Java併發程式設計札記-(一)基礎-01基本概念

Java併發程式設計札記-(一)基礎-01基本概念

在學習Java併發程式設計之前,先來了解一下幾個概念。

什麼是併發?維基百科中這樣介紹:

在電腦科學中,併發性是指程式,演算法或問題的不同部分或單元按無序或部分順序執行而不影響最終結果的能力。這允許並行單元的並行執行,這可以顯著提高在多處理器和多核系統中執行的總體速度。在更技術性的術語中,併發性指的是程式,演算法或問題的可分解性屬性成為順序無關或部分有序的元件或單元。

首先,併發是一種能力,是一種將程式分為幾個片段,在單獨的處理器上執行每個片段,而不影響最終結果的能力。

併發的優點上面也提到了,它可以顯著提高程式的效能。

併發可以既可以提高執行在多處理器上的程式的效能,也可以提高執行在單處理器上的程式的效能。如果程式在多處理器的機器上執行,可以將程式分為多個任務,將這些任務分配給多個處理器,可以極大提高效能。典型的應用是Web伺服器處理大量的使用者請求。但實際上併發通常用來提高執行在單處理器上的程式的效能。試想下,將程式分為多個任務,如果順序執行任務,萬一哪個任務由於某種原因卡住了(阻塞),整個程式都將停止執行。而有了併發,當一個任務阻塞時,其他任務還可以繼續執行。如果沒有阻塞,那麼在單處理器上使用併發就沒有意義,還會影響效能,因為併發需要切換任務,比順序執行任務開銷更大。

如何達到併發的目的呢?這裡就要提到多執行緒,多執行緒就是達到併發目的的一種手段。

什麼是多執行緒呢?多執行緒,是指從軟體或者硬體上實現多個執行緒併發執行的技術。應用程式可以使用多執行緒將程式分割為多個子任務,並讓底層體系結構管理執行緒如何執行,可以併發在一個核心上,也可以並行在多個核心上執行。

什麼是執行緒呢?執行緒是可以由排程程式獨立管理的最小程式指令序列。我的理解是上面說的任務就是由執行緒來負責的。

下面再補充幾個概念。

併發與並行
通俗的說,併發是多個任務交替執行,而並行是多個任務同時執行。兩者的關鍵在於“同時”這個關鍵詞。

執行緒和程序
在計算中,程序是正在執行的計算機程式的一個例項。執行緒是可以由排程程式獨立管理的最小程式指令序列。一個程序可以由多個執行執行緒組成。