程序和執行緒基礎內容
二十四桥冷月夜發表於2024-09-19
- 什麼是程序和執行緒?
程序是指執行中的程式,在windows裡可以在工作管理員中檢視;執行緒是CPU排程的基本單位,程序可以看成程式執行的一個例項。一個程序可以擁有多個執行緒,每個執行緒使用其所屬程序的棧空間。程序就是執行緒的容器,需要執行緒利用程序中的一些資源,處理一個程式碼、指令。最終實現程序所預期的結果。
- 程序和執行緒的區別?
1> 程序是作業系統分配的資源,而執行緒是CPU排程的基本單位
2> 資源方面:同一個程序下的執行緒共享程序中的一些資源。執行緒同時擁有自身的獨立儲存空間,程序之間的資源通常是獨立的。
3> 數量不同:程序一般指的就是一個程序。執行緒是依附於某個程序的,而且一個程序中至少會有一個或多個執行緒
4> 開銷不同:執行緒和建立和終止的時間是比較短的。而且執行緒之前的切換比程序之間的切換速度快的多。程序之前的通訊很麻煩,一般要藉助核心才可以實現,而執行緒之前的通訊很方便。
- 什麼是多執行緒?
多執行緒是指單個程序中同時執行多個執行緒。多執行緒的目的是為了提供CPU的利用率。
可以透過避免一些網路IO或者磁碟IO等需要等待的操作,讓CPU去排程其他執行緒。可以大幅度的提升程式的效率,提供使用者體驗。
- 多執行緒的侷限
執行緒不是越多越好的,如果執行緒數量特點多,CPU在切換執行緒上下文時,會額外造成很大的消耗
任務的拆分依賴業務場景,有些業務很難拆分,不是多執行緒處理更好
雖然多執行緒帶來了一定的效能提升,如果再做一些操作時,多執行緒如果操作臨界資源,可能會發生一些資料不一致的安全問題,甚至涉及到鎖操作時,會造成死鎖問題。
- 序列、並行、併發
序列是一個一個處理;並行是同時處理;多執行緒的併發:CPU在極短的時間內,反覆切換執行不同的執行緒,看似好像是並行,但是隻是CPU高速的切換。並行就是多核CPU同時排程多個執行緒,是真正的多個執行緒同時執行。單核CPU無法實現並行效果,單核CPU是併發。
- 同步非同步、阻塞非阻塞
同步與非同步:執行某個功能後,被呼叫者是否會主動反饋資訊
阻塞和非阻塞:執行某個功能後,呼叫者是否需要一直等待結果的反饋。
兩個概念看似相似,但是側重點是完全不一樣的。