程序與執行緒的區別(面試題)
執行緒就是我們為了讓乙個程序能夠同時幹多件事情而發明的「分身術」。
執行緒的本質:擁有同樣的程式文字。
執行緒是程序裡面的乙個執行上下文或者執行序列。乙個程序可以擁有多個執行序列。
將程序分解為執行緒還可以有效利用多處理器和多核計算機。在沒有執行緒的情況下,增加乙個處理器並不能讓乙個程序的執行速度提高。但如果分解為多個執行緒,則可以讓不同的執行緒同時運轉在不同的處理器上,從而提高程序的執行速度。
評判標準:如果某資源不獨享會導致執行緒執行錯誤,則該資源就由每個執行緒獨享;而其他資源都由程序裡面的所有執行緒共享。
一般情況下執行緒共享和獨享資源的劃分
序號執行緒共享資源
執行緒獨享資源
1位址空間
程式計數器
2全域性變數
暫存器3
開啟的檔案棧4
子程序狀態字5鬧鈴
6訊號及訊號服務程式
7記賬資訊
使用者態和核心態的區別(面試題)
程序的排程有兩種。一、程序的排程交給執行緒;二、將執行緒的排程交給作業系統。
這兩種不同的排程形成了執行緒的兩種實現:使用者態實現和核心態實現。由程序自己管理就是使用者態執行緒,由作業系統管理就是核心態執行緒實現。
使用者態和核心態的判斷以執行緒表所處的位置為依據:位於核心叫做核心態實現,位於使用者層叫做使用者態實現。
執行緒的實現方式。因為執行緒是程序內部的東西,所以,存在由程序直接管理執行緒的可能性。因此,執行緒存在著核心態與使用者態兩種實現可能。
7.3.1 核心態執行緒實現
7.3.2 使用者態執行緒實現
使用者態實現就是使用者自己做執行緒的切換,自己管理執行緒的資訊,而作業系統無須知道執行緒的存在。
使用者態如何進行執行緒排程呢?使用者自己寫乙個執行系統(runtime system)作排程器,即成了正常執行任務的執行緒外,還有乙個專門負責執行緒排程的執行緒。使用者態下的執行,是乙個執行緒在執行完一段時間後主動把資源釋放給別人使用,而在核心態下則無須如此。因為作業系統可通過週期性的時鐘中斷把控制權奪過來。在使用者態實現情況下,執行系統的排程器(runtime scheduler)也是執行緒,沒有能力強行奪走控制權,所以必須合作。
使用者態的優點:
靈活性。因為作業系統無須知道執行緒的存在,所以在任何作業系統上都能應用。
執行緒切換快。因為切換在使用者態進行,無須陷入到核心態。
不用修改作業系統。
使用者態的缺點:
程式設計序變得很詭異。由於使用者態執行緒需要相互合作才能運轉,所以,我們在寫程式時,必須仔細斟酌在什麼時候應該讓出cpu給別的執行緒使用。而讓出時機的選擇對執行緒的效率和可靠性由很大的影響。
使用者態執行緒實現無法完全達到執行緒提出所要達到的目的:程序級多道程式設計。
1、程序和執行緒的區別
2、使用者態和核心態區別
3、使用者態和核心態區別
執行緒原理篇 第9章 死鎖應對之哲學原理
死鎖的發生,歸根結底是因為對資源的競爭。死鎖的定義 如果有一組執行緒,每個執行緒都在等待乙個事件的發生,而這個事件只能由該組執行緒裡面的另一線程發生,則我們稱這組執行緒發生了死鎖。這裡的事件通常是資源的釋放。如果a和b交替執行,a首先執行,獲得鎖x,然後b執行,獲得鎖y 但在b試圖獲得鎖x的時候將被...
第11章 執行緒
執行緒標識 就像每個程序有乙個程序id一樣,每個執行緒也有乙個執行緒id。程序id在整個系統中是唯一的,但執行緒id不同,執行緒id只有在它所屬的程序上下文中才有意義。程序id 用pid t資料型別表示 執行緒id用pthread t資料型別來表示 includeint pthread equal ...
第11章 執行緒
1.執行緒的作用 1 對於程式設計而言 當我們的乙個程序在某一時刻,需要做的事件不止一件的時候,一般有兩種方法。一種是採用非同步程式設計的模式,一種是採用多執行緒同步模式。但是多執行緒同步模式遠遠比非同步模式要方便的多。但是對於單核系統,往往非同步程式設計模式效率更高。2 對於互動程式,一般都是要多...