目錄
介紹
計算機架構相關名詞
- 中央處理器 (CPU)
- Central Processing Unit
- Processors (處理器)
- Sockets (實體插槽)
- Cores (實體核心)
- Logical processors (邏輯核心)
- 超執行緒(HT)
- Hyper-Threading Technology (HTT)
- Intel 專利的 SMT 技術
- SMT = Simultaneous MultiThreading
- Scalar processor vs. Superscalar processor
作業系統相關
- 電腦程式 (Program)
- 包含一系列指令 (a sequence of instructions) 用來讓電腦運作的檔案
- 執行 (Execution)
- 將電腦程式中的所有指令載入到記憶體 (RAM) 並建立處理程序的流程
- 處理程序 (Process)
- 電腦程式的實體 (instance of a computer program) (一台電腦可以同時執行多個相同的電腦程式)
- 作業系統可能會使用一個到多個執行緒來執行電腦程式中的指令 (instructions)
- 執行緒 (Thread)
- 排程器 (Scheduling)
- 排程器是作業系統的一個重要元件,用來安排「資源」來執行「工作」
- 資源包含處理器 (Processor)、核心(Core)、網路、… 等等。
- 工作包含執行緒(Thread)、處理程序(Process)、傳輸網路封包 (Traffic flow)、… 等等。
- 先佔式任務處理 (Preemption)
- 這是一種多工(Multi-Tasking)的實現方式。多工是指電腦同時執行多個程式的能力!
- 先佔式任務處理會中斷正在執行中的執行緒,並會在未來的一段時間後繼續執行
- 內容切換 (Context Switching)
- 由於先佔式任務處理會中斷正在執行中的執行緒,在執行緒之間反覆切換的過程叫做內容切換
- Windows / macOS / Linux / AIX / BSD / Solaris 皆採用先佔式多工 (Preemptive Multitasking),一個執行緒執行程式時間用完了,系統就會進行 Context Switch,把 CPU 分配給下一個執行緒,沒有一個程式能獨佔 CPU 時間!
- 多工處理 (Multi-Tasking)
- 多工是指電腦同時執行多個程式的能力
- 多工的一般方法是執行第一個程式的一段代碼,儲存工作環境;再執行第二個程式的一段代碼,儲存環境;……恢復第一個程式的工作環境,執行第一個程式的下一段代碼……現代的多工,每個程式的時間分配相對平均。
- 多執行緒 (Multithreading)
- 多執行緒是一種利用單一核心來提供多工處理的能力,用來提供同時執行多條執行緒的工作方式,而這種能力通常都是由作業系統內建提供的。
- 在多執行緒的應用程式中,執行緒會共用一個或多個核心,而共用的資源包含運算單元、CPU 快取或 TLB (translation lookaside buffer) 等資源。
- 新一代的 CPU 基本上都有提供硬體多執行緒的支援,能夠在同一時間執行多於一個執行緒,進而提升整體處理效能
Program vs. Process vs. ThreadScheduling, Preemption, Context Switching
相關名詞
- 同步 (Synchronous)
- 在計算機的世界裡,沒有什麼程式是真的「同步」的。
- 同步通常是指在一個系統中所發生的事件之間進行協調 (coordination of events),讓時間上出現 一致性與統一化的現象,讓整件事看起來像是依序執行的結果。
- 非同步 (Asynchronous)
- 非同步意味著在一個系統中所發生的事件 (occurrence of events) 都可以獨立執行,並且提供一些方法來處理這些事件。
- 這些發生的事件不會封鎖(Block)主程式的執行緒,因此可以多個工作進行平行處理
- 同步化 (Synchronization)
- 當多執行緒需要同時存取共用資源時,所需進行的管控機制,確保程式執行時可以得到預期結果
- 跨執行緒的同步化: lock, SpinLock, Mutex, ReaderWriterLockSlim, Barrier, CountdownEvent, …
- 跨處理程序同步化:Mutex, Semaphore (Windows), EventWaitHandle (Windows)
- 相關文章:Overview of synchronization primitives
- 執行緒安全 (Thread-safety)
- 在多執行緒環境下執行程式,用以確保執行可以得到預期執行結果!
- 實現執行緒安全的必要條件就是必須能夠提供同步化機制!
- 同步內容 (SynchronizationContext)
- 允許執行緒透過將工作單元(Work of Unit)進行封裝(Marshal)之後,傳遞給其他執行緒
- 競爭狀態 (Race Condition)
- 競爭情形是一種錯誤,這種錯誤是指根據兩個或多個執行緒之中,哪一個先到達程式碼的特定區塊而決定程式的結果。
- 執行程式多次會產生不同的結果,並且無法預測任何指定的執行結果。
- 關鍵區段 (Critical Section)
- 是一段程式碼不允許多執行緒同時執行
- 為了避免資源競爭的情況發生 (Race Condition)
- 死結 (Deadlock)
- 當兩個以上的執行緒,雙方都在等待對方停止執行,以取得系統資源,但是沒有一方會先結束。
- 當兩個以上的執行緒,雙方都在等待對方停止執行,以取得系統資源,但是沒有一方會先結束。
.NET程式啟動流程
- .NET 處理程序(Process)啟動後,僅會有一個前景執行緒!
- 每個執行程序都可以產生出許多前景執行緒或背景執行緒
- 前景執行緒 (Foreground Thread)
- 所有前景執行緒必須全部結束執行,否則處理程序無法結束執行
- 無論是否還有背景執行緒在執行,沒有前景執行緒在跑,該處理程序就一定會結束
- new Thread() 預設就是前景執行緒
- 背景執行緒 (Background Thread)
- new Task() 預設就是背景執行緒
- 從執行緒集區(Thread Pool)取得的執行緒,一定是背景執行緒
- Task.Run 從執行緒集區取得一個執行緒,因此是背景執行緒
- 主執行緒(main Thread)
- 程序啟動時的第一個執行緒
參考資料
我的鐵人賽文章
https://ithelp.ithome.com.tw/articles/10292654