(摘抄自知乎)
一句話概括:程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述。
詳細解釋如下:
cpu+ram+各種資源(比如顯示卡、光碟機、鍵盤、gps等等外設)構成我們的電腦。但是電腦的執行實際就是cpu和相關暫存器以及ram之間的事情。
乙個最基礎的事實:cpu快,太快,太快了,暫存器僅僅能夠追的上他的腳步,ram和別的掛在各匯流排上的裝置完全是望其項背。那當多個任務要執行的時候怎麼辦呢?輪流著來?或者誰優先順序高誰來?不管怎麼樣的策略,一句話就是在cpu看來就是輪流著來。
乙個必須知道的事實:執行一段程式**,實現乙個功能的過程介紹 ,當得到cpu的時候,相關的資源必須也已經就位,就是顯示卡啊,gps啊什麼的必須就位,然後cpu開始執行。這裡除了cpu以外所有的就構成了這個程式的執行環境,也就是我們所定義的程式上下文。當這個程式執行完了,或者分配給他的cpu執行時間用完了,那它就要被切換出去,等待下一次cpu的臨幸。在被切換出去的最後一步工作就是儲存程式上下文,因為這個是下次他被cpu臨幸的執行環境,必須儲存。
串聯起來的事實:前面講過在cpu看來所有的任務都是乙個乙個的輪流執行的,具體的輪流方法就是:先引導程式a的上下文,然後開始執行a,儲存程式a的上下文,調入下乙個要執行的程式b的程式上下文,然後開始執行b,儲存程式b的上下文
。。。。
*****==== 重要的東西出現了*****===
程序和執行緒就是這樣的背景出來的,兩個名詞不過是對應的cpu時間段的描述,名詞就是這樣的功能。
執行緒是什麼呢?
程序的顆粒度太大,每次都要有上下的調入,儲存,調出。如果我們把程序比喻為乙個執行在電腦上的軟體,那麼乙個軟體的執行不可能是一條邏輯執行的,必定有多個分支和多個程式段,就好比要實現程式a,實際分成 a,b,c等多個塊組合而成。那麼這裡具體的執行就可能變成:
程式a得到cpu =》cpu載入上下文,開始執行程式a的a小段,然後執行a的b小段,然後再執行a的c小段,最後cpu儲存a的上下文。
這裡a,b,c的執行是共享了a的上下文,cpu在執行的時候沒有進行上下文切換的。這裡的a,b,c就是執行緒,也就是說執行緒是共享了程序的上下文環境,的更為細小的cpu時間段。
到此全文結束,再乙個總結:
程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述,不過是顆粒大小不同
執行緒和程序
標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...
程序和執行緒
乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...
執行緒和程序
對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...