1. 程式人生 > 其它 >程式、程序、執行緒

程式、程序、執行緒

一、概述

程式: 存放在磁碟中的可執行檔案,對於計算機來說它就是一系列的指令集合,是一個靜態概念

程序: 程式的一次執行過程,是一個動態的概念,程序由程序控制塊、程式段、資料段組成,它是作業系統進行資源分配的最小單位

程式控制塊(PCB: Process Control Block)

  • 程序描述資訊: (程序識別符號 pid、使用者識別符號 uid)
  • 程序控制和管理資訊: (CPU、磁碟、網路流量使用情況、程序執行狀態)
  • 資源分配清單: (正在使用的記憶體區域、正在使用的 IO 裝置、正在使用的檔案)
  • 處理機相關資訊: (程式狀態字(PSW)、PC 等各種暫存器的值(用於程序切換))

程式段: 程式程式碼(一系列的指令序列)

資料段: 程序執行過程中產生和使用的各種資料

執行緒: 執行緒可以理解為輕量級程序,它是作業系統進行運算排程的最小單位

二、有了程序之後為什麼還要再引入執行緒

  • 執行緒是進行排程和運算的最小單位,引入了執行緒之後,不僅是程序與程序之間可以併發,同屬與一個程序內的執行緒也可以發生併發,從而提高了系統的併發度
  • 執行緒併發、建立、銷燬、切換的開銷相比於程序來說更低
  • 程序間通訊必須請求作業系統服務(CPU 需要從使用者態切換到核心態),系統開銷大,同進程下的所有執行緒共享該程序的資源,執行緒之間通訊無需作業系統進行干預,開銷更小

三、什麼是執行緒的上下文切換

對於單核 CPU 而言,在某一個時刻只能執行一個執行緒,當 CPU 結束執行一個執行緒,轉而去執行另外一個執行緒,這個過程就被稱為執行緒上下文切換

以下是 Java 中常見的發生 CPU 上下文切換的場景

  • CPU 時間片用完
  • 垃圾回收器進行垃圾回收
  • 有更高優先順序的執行緒加入
  • 執行緒主動呼叫 sleep、yield、wait、join、park、synchronized、lock 等方法