- Java并發編程之美
- 翟陸續 薛賓田
- 496字
- 2019-07-25 11:54:02
第2章 并發編程的其他基礎知識
2.1 什么是多線程并發編程
首先要澄清并發和并行的概念,并發是指同一個時間段內多個任務同時都在執行,并且都沒有執行結束,而并行是說在單位時間內多個任務同時在執行。并發任務強調在一個時間段內同時執行,而一個時間段由多個單位時間累積而成,所以說并發的多個任務在單位時間內不一定同時在執行。在單CPU的時代多個任務都是并發執行的,這是因為單個CPU同時只能執行一個任務。在單CPU時代多任務是共享一個CPU的,當一個任務占用CPU運行時,其他任務就會被掛起,當占用CPU的任務時間片用完后,會把CPU讓給其他任務來使用,所以在單CPU時代多線程編程是沒有太大意義的,并且線程間頻繁的上下文切換還會帶來額外開銷。
圖2-1所示為在單個CPU上運行兩個線程,線程A和線程B是輪流使用CPU進行任務處理的,也就是在某個時間內單個CPU只執行一個線程上面的任務。當線程A的時間片用完后會進行線程上下文切換,也就是保存當前線程A的執行上下文,然后切換到線程B來占用CPU運行任務。

圖2-1
圖2-2所示為雙CPU配置,線程A和線程B各自在自己的CPU上執行任務,實現了真正的并行運行。

圖2-2
而在多線程編程實踐中,線程的個數往往多于CPU的個數,所以一般都稱多線程并發編程而不是多線程并行編程。