1. 程式人生 > 其它 >對程序和執行緒的理解

對程序和執行緒的理解

程序的三個狀態
就緒、執行、阻塞
(1) 就緒->執行
就緒狀態是指程序獲得了排程程式為之分配的除了CPU時間之外的其他必要資源,只要CPU時間一到位就可執行了。
處於就緒狀態的程序,當程序排程程式為之分配了CPU後,該程序便由就緒狀態轉變成執行狀態。
(2) 執行->就緒
處於執行狀態的程序在其執行過程中,因分配給它的一個時間片已用完而不得不讓出處理機,於是程序從執行狀態轉變成就緒狀態。
(3) 執行->阻塞
正在執行的程序因等待某種事件發生而無法繼續執行時,便從執行狀態變成阻塞狀態。
(4) 阻塞->就緒
處於阻塞狀態的程序,若其等待的事件已經發生,於是程序由阻塞狀態轉變為就緒狀態。
三個狀態切換的條件:
就緒---->執行 排程
執行----->就緒 時間片到
執行------>等待 等待某個事件發生而睡眠
等待------->就緒 因等待事情發生而喚醒
參考:

https://blog.csdn.net/baidu_35534327/article/details/54317945

執行緒的五個狀態
建立、就緒、執行、阻塞、死亡

程序和執行緒的區別
作業系統給程序分配資源,一個程序有多個執行緒,執行緒共享程序內的資源。
對於共享變數,程序儲存共享變數,每個執行緒儲存變數的副本。
例子:
一個軟體可以有多個程序,一個程序內有多個執行緒。
瀏覽器有多個程序,開啟一個網頁就是一個程序,dns解析、請求這些是一個個的執行緒。
開個QQ,就是開了一個程序;開了迅雷,也是開了一個程序。在QQ的這個程序裡,傳輸文字開一個執行緒、傳輸語音開了一個執行緒、彈出對話方塊又開了一個執行緒。
所以執行某個軟體,相當於開了一個程序。在這個軟體執行的過程裡(在這個程序裡),多個工作支撐的完成QQ的執行,那麼這“多個工作”分別是一個執行緒。

執行緒崩潰是否會造成程序崩潰
會。當一個執行緒向非法地址讀取或者寫入,無法確認這個操作是否會影響同一程序中的其它執行緒,所以只能是整個程序一起崩潰。