首先我們的問題是,執行緒是什麼?
執行緒是程序中的一條執行流,是cpu執行排程的基本單位,乙個程序中可以有多個執行緒。在linux下,執行緒執行流是通過pcb實現的,且乙個程序中可能有多個pcb,這些pcb共享同乙個程序中大部分資源,也可以將其稱作輕量級程序。(linux下程序是系統進行資源分配的基本單位)
執行緒之間共享虛擬位址空間(**段和資料段)、檔案描述符表、訊號處理方式、工作路徑等,執行緒之間獨有的有執行緒棧、暫存器(上下文資料)、訊號遮蔽字(訊號阻塞集合)、優先順序、errno、執行緒識別符號等。
多執行緒與多程序在多工處理中具有共同的優點:
在cpu資源足夠的情況下,可以實現並行的任務處理,提高效率。但執行緒與程序也不是越多越好,在io密集型程式中,程式中進行大量io操作,對cpu資源要求不高,因此執行流的數量越多效率越高,但在cpu密集型程式中,程式中進行大量資料運算,對cpu資源要求高,此時執行流的數量過多反而會增加排程成本(切換時間多),此時執行流數量最好是cpu核心數+1。
多執行緒進行多工處理也有其獨特的優點:
1.共享虛擬位址空間,因此執行緒間通訊更加靈活,除了ipc的四種通訊方式外,還可以通過全域性變數、函式傳參的方式進行執行緒間通訊。
2.執行緒的建立與銷毀成本更低
3.同乙個程序中線程排程切換成本更低
多執行緒進行多工處理的缺點:
1.健壯性低(健壯性是指程式在執行過程**現一般性的錯誤,程式會自動進行錯誤處理函式。簡單來說是指出錯了也能繼續執行的能力)
2.有些系統呼叫和異常是針對整個程序產生的(例如exit介面,直接退出所有執行緒)
在大多數情況下,都是使用多執行緒更好,但在要求穩定性高的場景裡還是使用多程序的方式更好(例如shell中)
多執行緒與多程序的理解
參考 執行緒是最小的執行單元,而程序由至少乙個執行緒組成。如何排程程序和執行緒,完全由作業系統決定,程式自己不能決定什麼時候執行,執行多長時間。多程序和多執行緒的程式涉及到同步 資料共享的問題,編寫起來更複雜。在unix linux下,可以使用fork 呼叫實現多程序。要實現跨平台的多程序,可以使用...
多執行緒與多程序
程序 程序是程式的一次執行,在傳統的計算機中,程序既是基本的分配單元,也是基本的執行單元。執行緒 執行緒是可執行的實體單元,它是處理機排程的基本單位。由於執行緒在同一位址空間,因此建立和撤銷執行緒的開銷小,執行緒間的通訊效率高,切換迅速。在多處理機系統中,對程序的個數有所限制,但對執行緒的個數不存在...
多執行緒與多程序
魚還是熊掌 多程序多執行緒的選擇 關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有的xdjm問 多程序好還是多執行緒好?...