天天看點

程序和線程(個人了解)

程序和線程(個人筆記)

(1)為什麼要使用程序?

如果程式在運作的過程中,頻繁的請求IO操作,那麼CPU就會等待該程式的IO操作完成後再為其服務,這就極大的浪費了CPU資源,降低CPU效率。是以采用一種“程式排隊”機制來提高CPU利用效率,進而産生了程序。

為了對排隊程式進行有效管理,作業系統使用PCB(程序管理塊)記錄着每個程式執行的各種資訊,包括優先級,程式記憶體位址,阻塞狀态等,這樣的一個程式管理就是一個程序。

下圖是程序狀态轉換示意圖,當一個程序被建立,它就會進入就緒隊列,擷取CPU資源,若配置設定給該程序的時間片到,該程序便會主動放棄CPU進入就緒隊列等待下一次時間片到來;若該程序請求IO操作時,也會主動放棄CPU,進入阻塞隊列,當IO操作完成後,才會從阻塞隊列進入就緒隊列。而隻有進入就緒隊列的程序才能有擷取CPU的機會。

程式和線程(個人了解)

(2)為什麼要使用線程?

程式和線程(個人了解)

如上圖,遊戲和浏覽器應用程式中可能包含多個功能子產品,它包含網絡功能,鍵盤輸入,UI渲染等等,根據程序隊列擷取CPU資源的特點,如果遊戲中的網絡功能要交換網絡資料,請求網卡時,那麼此時的遊戲程式就會自動放棄CPU,浏覽器擷取CPU,這就會導緻遊戲程式中的渲染代碼暫停執行,遊戲畫面就會卡頓。

****解決方案一:給程式的不同功能建立程序

如下圖,雖然這樣的方式可以避免上述所說的問題,但一旦程式内部功能子產品較多,那麼需要建立的程序較多,作業系統需要配置設定大量的PCB資源(該資源是有限的),且程序間切換頻繁,時間空間開銷大。

程式和線程(個人了解)

解決方案二:線程的“橫空出世”

程式和線程(個人了解)

如上圖,給一個應用程式配置設定一個程序,其對應的功能建立相應的線程,線程之間共享程序資源,建立快,消耗小。

(3)程序與線程比較

差別:

(1)程序是作業系統資源配置設定的基本機關;線程是任務排程和執行的基本機關。

(2)一個程式至少一個程序,一個程序至少一個線程,程序中的多個線程是共享程序的資源。

(3)程序擁有獨立的記憶體單元,而多個線程共享記憶體。

(4)程序結束後它擁有的所有線程都将銷毀,而線程的結束不會影響同個程序中的其他線程的結束。

(5)線程是輕量級的程序,它的建立和銷毀所需要的時間比程序小很多,所有作業系統中的執行功能都是建立線程去完成的。

繼續閱讀