作業系統提供多工功能,程序和執行緒都是任務,程序有獨立的記憶體空間。多工被操作排程共享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個核心各有一個執行緒。
作業系統提供多工功能,程序和執行緒都是任務,程序有獨立的記憶體空間。多工被操作排程共享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個核心各有一個執行緒。