java併發編程(一)線程與進程 一、進程 二、線程

一、進程

進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。

  • 在早期面向進程設計的計算機結構中,進程是程序的基本執行實體。
  • 在當代面向線程設計的計算機結構中,進程是線程的容器。

程序是指令、數據及其組織形式的描述,進程是程序的實體

1.1 進程切換

進程從硬盤讀取我們的程序代碼,這個時候是比較費時的,CPU不會阻塞在這裏等着,而是切換到其他進程,當數據加載完成時,CPU會收到箇中斷,繼續執行這個請求。

對於單核CPU而言,短時間內會執行多個進程,造成並行的錯覺,實際可以理解爲是併發的操作。

1.2 內核態與用戶態

進程分爲用戶進程內核進程兩種。

爲了安全,用戶進程是受限的,它不能隨意訪問資源、獲取資源。所以,由內核進程負責管理和分配資源,它具有最高權限,而用戶進程使用被分配的資源。且,操作系統必須能夠在有需要的時候能立即切換回內核進程(通過中斷),只有這樣,操作系統纔能有安全感。

1.3 用戶態向內核態切換

1、發生系統調用時

2、產生異常時

3、外設產生中斷時

這裏不做過多解釋了,感興趣同學自行學習linux原理。

二、線程

線程(英語:thread)是操作系統能夠進行運算調度的最小單位。

它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。

2.1 進程與線程的關係

1、一個進程中可以同時存在多個線程;

2、各個線程之間可以併發執行;

3、各個線程之間可以共享當前線程中的地址空間和文件等資源;

4、線程是調度的基本單位,而進程則是資源擁有的基本單位;

5、當進程只有一個線程時,可以認爲進程就等於線程;

2.2 線程內存模型

1) 在看線程內存模型之前,我們首先看下計算機的硬件內存模型。


寄存器:寄存器部件,包括通用寄存器、專用寄存器和控制寄存器。通用寄存器又可分定點數和浮點數兩類,它們用來保存指令執行過程中臨時存放的寄存器操作數和中間(或最終)的操作結果。 通用寄存器是中央處理器的重要部件之一。

高速多級緩存:用於解決CPU核心與內存的速度差異問題,CPU核心速度快,內存相比要慢很多,而緩存要比內存速度快。

緩存協議:多級緩存的引入在多核CPU時代導致了緩存不一致的問題,這裏需要引入MESI協議緩存解決這一問題,保證緩存中的信息與內存中的信息一致。MESI協議緩存這裏不做講解。

2)下一步我們看下java內存模型與線程模型的關係

java程序的一次編寫到處運行如何體現的?

jvm內存模型屏蔽了不同硬件的內存模型。jvm內存模型規定,所有的變量都存儲在jvm主內存中,即堆內存,這裏指可共享的變量(new出來的實例化對象,數組等)。這裏提出主內存與工作內存的概念,每個線程有自己的工作內存,保存自己私有的變量,線程從主內存獲取變量的副本作爲自己的私有變量,不允許直接操作主內存的變量。線程的工作內存也是獨立的,無法操作其他線程的變量。

3)硬件內存模型與jvm內存模型的關係
如下圖所示,jvm內存模型和硬件內存模型相似,但並不完全相同。但是jvm的數據大部分會存儲到硬件主內存中,部分會存儲到寄存器或緩存中,這裏只做簡單說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章