操作系統(tǒng)的并發(fā)
1. 前言
本節(jié)內容是從操作系統(tǒng)的層面談并發(fā),本節(jié)課程我們需要掌握如下內容:
- 掌握并發(fā)編程的定義,并發(fā)編程的定義是了解并發(fā)的前提基礎;
- 從 CPU 談并發(fā)誕生的意義,一切語言的基礎都是操作系統(tǒng),CPU 的并發(fā)與 Java 并發(fā)息息相關,了解 CPU 對學習并發(fā)編程至關重要;
- 操作系統(tǒng),進程,線程之間的聯(lián)系。本節(jié)課程的重點之一,三者之間的聯(lián)系有助于對整體上有更加透徹的了解(重點);
- 了解什么是進程和線程以及兩者之間的區(qū)別。起初學習并發(fā)編程的同學對兩者之間的區(qū)別區(qū)分不明確,進程與線程的區(qū)別也是本節(jié)課程的重點之一(重點);
- 理解串行,并行,并發(fā)三種線程執(zhí)行方式的區(qū)別,不同的執(zhí)行方式會有不同的執(zhí)行效果。
2. 并發(fā)編程的定義
定義: 所謂并發(fā)編程是指在一臺處理器上 “同時” 處理多個任務。并發(fā)是在同一實體上的多個事件,多個事件在同一時間間隔發(fā)生。
意義:開發(fā)者通過使用不同的語言,實現(xiàn)并發(fā)編程,充分的利用處理器(CPU)的每一個核,以達到最高的處理性能,提升服務器的資源利用率,提升數(shù)據(jù)的處理速度。
3. 從 CPU 談并發(fā)編程
首先看下圖,圖中展示了最簡單的 CPU 核心通過緩存與主存進行通訊的模型。
在緩存出現(xiàn)后不久,系統(tǒng)變得越來越復雜,緩存與主存之間的速度差異被拉大,由于 CPU 的頻率太快了,快到主存跟不上,這樣在線程處理器時鐘周期內,CPU 常常需要等待主存,這樣就會浪費資源。從我們的感官上,計算機可以同時運行多個任務,但是從 CPU 硬件層面上來說,其實是 CPU 執(zhí)行線程的切換,由于切換頻率非??欤率刮覀儚母泄偕细杏X計算機可以同時運行多個程序。
為了避免長時間的線程等待,我們一方面提升硬件指標(如多級高速緩存的誕生,這里不做討論),另一方面引入了并發(fā)概念,充分的利用處理器(CPU)的每一個核,減少 CPU 資源等待的時間,以達到最高的處理性能。
4. 操作系統(tǒng),進程,線程之間的聯(lián)系與區(qū)別
我們首先來看看,三者之間的關系,從圖中可以看到,操作系統(tǒng)是包含多個進程的容器,而每個進程又是容納多個線程的容器。
什么是進程?
官方定義: 進程(baiProcess)是計算機中的程序關于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調度的基本單位,是操作系統(tǒng)結構的基礎。
Tips:系統(tǒng)進行資源分配和調度的基本單位其實就是 CPU 時間片的切換,一個 CPU 同一時間只能操作一個任務,只不過 CPU 在不停的切換工作任務,這里的時間片就是我們所說的系統(tǒng)進行資源分配和調度的基本單位。
那么從定義上感覺非常的抽象,但是進程其實就在我們日常的計算機使用過程中。請看下圖,進入任務管理器看 Windows 操作系統(tǒng)下的進程:
什么是線程?
官方定義: 線程是操作系統(tǒng)能夠進行資源調度的最小單位,它被包含在進程之中,是進程中的實際運作單位,每個線程執(zhí)行的都是進程代碼的某個片段,特定的線程總是在執(zhí)行特定的任務。
線程與進程的區(qū)別?
- 誕生起源:先有進程,后有線程。進程由于資源利用率、公平性和便利性誕生。處理器的速度往往比外設的速度快(鍵盤、鼠標等),為了提高 CPU 的利用率,誕生了線程,目的就是為了提高程序的執(zhí)行效率;
- 概念:進程是資源分配的最小單位。 線程是程序執(zhí)行的最小單位(線程是操作系統(tǒng)能夠進行資源調度的最小單位,同個進程中的線程也可以被同時調度到多個 CPU 上運行),線程也被稱為輕量級進程;
- 內存共享:默認情況下,進程的內存無法與其他進程共享(進程間通信通過 IPC 進行)。 線程共享由操作系統(tǒng)分配給其父進程的內存塊。
5. 串行,并行與并發(fā)
串行:順序執(zhí)行,按步就搬。在 A 任務執(zhí)行完之前不可以執(zhí)行 B。
并行:同時執(zhí)行,多管齊下。指兩個或兩個以上事件或活動在同一時刻發(fā)生。在多道程序環(huán)境下,并行性使多個程序同一時刻可在不同 CPU 核心上同時執(zhí)行。
并發(fā):穿插執(zhí)行,減少等待。指多個線程輪流穿插著執(zhí)行,并發(fā)的實質是一個物理 CPU 在若干道程序之間多路復用,其目的是提高有限物理資源的運行效率。
6. 小結
本節(jié)課程重點講解了操作系統(tǒng)的并發(fā)原理,以及進程和線程之間的區(qū)別與聯(lián)系。除此之外,理解串行,并行,并發(fā)三種線程執(zhí)行方式的區(qū)別尤為重要,對以后的課程學習有很大的幫助。