執行緒基本概念

kiss_sheep發表於2024-05-08

1.程序與執行緒
1.1 程序
 程序是資源分配的單位,系統在執行時會為每個程序分配不同的記憶體區域
1.2 執行緒
  執行緒是排程和執行的單位,每個執行緒擁有獨立的執行棧和程式計數器(pc),執行緒切換的開銷小。
一個Java應用程式java.exe,其實至少有三個執行緒:main()主執行緒(受異常影響),gc()垃圾回收執行緒,異常處理執行緒。

 程序是程式的一次執行過程,或是正在執行的一個程式

 一個程序中的多個執行緒共享相同的記憶體單元/記憶體地址空間。它們從同一堆中分配物件,可以訪問相同的變數和物件。這就使得執行緒間通訊更簡便、高效。但多個執行緒操作共享的系統資源可能就會帶來安全的隱患。

2.單核CPU與多核CPU
  單核CPU,是一種假的多執行緒,因為在一個時間單元內,也只能執行一個執行緒的任務。Windows這種作業系統是把CPU的時間劃分成長短基本相同的時間區間,即”時間片”,透過作業系統的管理(作業系統的時間片分時排程),把這些時間片依次輪流地分配給各個應用使用,CPU是在多個程序之間來回切換執行的。
  舉個例子:收費站只有收了費才能透過。此時有多個車道,但只有一個工作人員在收費。那麼CPU就好比收費人員。如果有某個人磨磨蹭蹭不想交錢,那麼收費人員可以把他“掛起”(晾著他,等他想通了,準備好了錢,再去收費)。但是因為CPU時間單元特別短,因此感覺不出來。
 多核CPU,那就是在一個時間單元內,能真正的同時執行多個執行緒的任務。就好比有多個收費人員在同時收費。

3.並行與併發
  並行:多個CPU同時執行多個任務,並行的多個任務之間是不互相搶佔資源的。比如:多個人同時做不同的事。
  併發:一個CPU(採用時間片)同時執行多個任務,併發的多個任務之間是互相搶佔資源的。比如:多個人做同一件事
  在有多個CPU的情況下,才會出現真正意義上的同時進行(即並行)。

 以單核CPU為例,使用單個執行緒先後完成多個任務(呼叫多個方法),肯定比用多個執行緒來完成用的時間更短,為何仍需多執行緒呢?
 提高程式的效率和響應速度。
 同時執行多個任務、實現一些需要等待的任務時,可以拆分成多個執行緒同時執行

相關文章