線程1--線程和進程的區別和其他術語

進程(process)和線程(thread)是操作系統的基本概念。
進程和線程都是CPU工作時間段的描述。

背景:由于CPU與其他PC資源之間速度的不協調,人們想提高資源利用率,所以提出了多任務系統。得益于CPU的計算速度,我們可以“同時”運行多個任務,實質上是多個任務之間輪流使用CPU資源,由于速度超快,給用戶的感覺就是連續的。

如何實現:任務的執行需要依賴各個PC資源,我們可以稱為計算機執行的上下文環境。要實現“同時執行”,就需要不斷輪換,為了下一次繼續從當前狀態執行下去,計算機需要保存切換前的程序上下文。所以有了進程:用進程去描述程序當前上下文的狀態信息----內存位置、變量值、任務ID……所以,進程是資源分配的單位。一般來說宏觀上可以看做是一個軟件的運行,例如一個word文檔的打開。

多個任務之間切換因為要保存上下文、調入上下文,一旦多了的時候,還是有一定的時間消耗。為了進一步提高資源利用率,人們在進程中,引入了線程,線程只是CPU輪流調度的單位,其他上下文信息用所在進程中的。這樣上下文切換的耗時就降了下來。同樣的,宏觀上來可以看做是一個軟件中的多個處理功能,例如上述打開word中拼寫檢查功能、字體加粗……

區別:
進程:
進程是具有獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配的獨立單位。
進程之間的地址空間是相互獨立的,每個進程都是用虛擬地址空間,每個進程都以為整個地址空間只有自已在運行。操作系統在進行進程切換時,要把每個進程的上下文保存完整;
進程之間不能共享資源;
進程切換的開銷較大。

線程:
線程是進程中的一個執行路徑。(進程可以創建多個線程);
線程是CPU調度的單位;
線程共享所在進程的地址空間和其它資源。同時線程還有自己的棧和棧指針,程序計數器等寄存器;
線程沒有自己獨立的地址空間,線程必須依賴于進程而存在;
線程切換的開銷相對較小。

其他術語:
并發:
Concurrency,是并發的意思。并發的實質是一個物理CPU(也可以多個物理CPU) 在若干道程序(或線程)之間多路復用,并發性是對有限物理資源強制行使多用戶共享以提高效率。
從微觀角度看,所有的并發處理都有排隊等候、喚醒、執行等這樣的步驟,在微觀上他們都是序列被處理的,如果是同一時刻到達的請求(或線程)也會根據優先級的不同,而先后進入隊列排隊等候執行。
從宏觀角度看,多個幾乎同時到達的請求(或線程)在宏觀上看就像是同時在被處理。

并行:
Parallelism,即并行,指兩個或兩個以上事件(或線程)在同一時刻發生,是真正意義上的不同事件或線程在同一時刻,在不同CPU資源呢上(多核),同時執行。并行,不存在像并發那樣競爭,等待的概念。

通過多線程實現并發,并行:
1.java中的Thread類定義了多線程,通過多線程可以實現并發或并行。
2.在CPU比較繁忙,資源不足的時候(開啟了很多進程),操作系統只為一個含有多線程的進程分配僅有的CPU資源,這些線程就會為自己盡量多搶時間片,這就是通過多線程實現并發,線程之間會競爭CPU資源爭取執行機會。
3.在CPU資源比較充足的時候,一個進程內的多線程,可以被分配到不同的CPU資源,這就是通過多線程實現并行。
4.至于多線程實現的是并發還是并行?上面所說,所寫多線程可能被分配到一個CPU內核中執行,也可能被分配到不同CPU執行,分配過程是操作系統所為,不可人為控制。所有,如果有人問我我所寫的多線程是并發還是并行的?我會說,都有可能。
5.不管并發還是并行,都提高了程序對CPU資源的利用率,最大限度地利用CPU資源。

串行、并行:
并行和串行指的是任務的執行方式。串行是指多個任務時,各個任務按順序執行,完成一個之后才能進行下一個。并行指的是多個任務可以同時執行,異步是多個任務并行的前提條件。

異步和同步
異步和同步是相對的,同步就是順序執行,執行完一個再執行下一個,需要等待、協調運行。異步就是彼此獨立,在等待某事件的過程中繼續做自己的事,不需要等待這一事件完成后再工作。線程就是實現異步的一個方式。異步是讓調用方法的主線程不需要同步等待另一線程的完成,從而可以讓主線程干其它的事情。

并發編程又叫多線程編程
并發的實質是一個物理CPU(也可以多個物理CPU) 在若干道程序之間多路復用,并發性是對有限物理資源強制行使多用戶共享以提高效率。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.內存的頁面置換算法 (1)最佳置換算法(OPT)(理想置換算法):從主存中移出永遠不再需要的頁面;如無這樣的...
    杰倫哎呦哎呦閱讀 3,325評論 1 9
  • 一. 操作系統概念 操作系統位于底層硬件與應用軟件之間的一層.工作方式: 向下管理硬件,向上提供接口.操作系統進行...
    月亮是我踢彎得閱讀 5,998評論 3 28
  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,165評論 0 23
  • 7月18日具身認知 4:55-5:08聽 5:08-6:10第一遍寫-脫稿 6:15-6:42第二遍寫-邊聽邊記錄...
    zazabo閱讀 759評論 0 0
  • 她三十歲,人俏,白白的皮膚,細細的腰。不過,她命不好,先是生下傻閨女,再就是,二十九歲那年,丈夫死了。 后來,她選...
    Allie__閱讀 630評論 2 8