回覆列表
  • 1 # 使用者9950870282902

    作業系統提供多工功能,程序和執行緒都是任務,程序有獨立的記憶體空間。多工被操作排程共享CPU,每個任務執行一個時間片,然後交出CPU,再由其他任務佔用CPU。多工又分為搶佔式多工和協作式多工。

    多工解決的問題是什麼?是多個任務對CPU的分時複用。

    通常情況下任務的程式有和記憶體打交道和IO裝置打交道,與記憶體相比,IO非常慢,如果任務長時間等待IO的就緒,對CPU資源是浪費的。也就是一個IO密集型任務的CPU利用率非常低,但是其他計算密集型的任務無法執行。

    有了多工,作業系統就可以對多個任務進行排程,每個任務執行一個時間片,再換佇列中的下一個任務。在單CPU系統上就可以支援多個任務。

    而Java的執行緒只不過是對作業系統執行緒的封裝。

    多核CPU是指一個CPU有多個核心(每個核心還可以有多個超執行緒),CPU早期計算能力的增長是隨著主頻的增長而增長,但是主頻上升到一定程度,功耗和散熱都是無法逾越的,於是CPU計算能力的增長轉變了思路,變為主頻不高的有多個核心的CPU。

    在只有一個核的CPU時代,程式設計師寫的程式不需要修改,就可以透過換成更高主頻的CPU而獲得性能的提升。但是,在多核CPU時代,如果程式寫的程式只有一個執行緒,換成2核,4核,8核的CPU,程式的效能無法獲得增長,於是就要求程式設計師寫多執行緒的程式,將計算問題分解到多個執行緒上解決,這樣才能獲得性能的提升。

    回到你的問題,當多工作業系統執行在單CPU的計算機上,多個執行緒/程序是輪流按照時間片共享單個CPU的。當多工作業系統執行在對稱對處理器/核的計算機上,多個程序會被排程到不同的核心上執行。

    也就是說,5個執行緒跑在4個核心上,可能一個核心有兩個執行緒,其他3個核心各有一個執行緒。

  • 中秋節和大豐收的關聯?
  • 新班主任在第一節課如何建立威信?