多核情況下,確實任務是併發處理的,一般不同的核心從cache取資料操作,增加併發效能。單核的都是分時處理的。程序可以理解為常見的裸機程式碼,回到原始的8086結構,那時軟硬體還沒那麼複雜。一個裸機程式碼基本上就是一個大迴圈控制狀態機不斷迭代。在沒有作業系統支撐的情況下,我們寫的裸機程式碼要完成多個功能,就要在迴圈中把諸多因素考慮進去,然後分別對其狀態變化時做一些處理。不過呢,這種程式碼非常不好,不容易遷移。而且邏輯複雜,難以理解。我這麼說的意思是,對於單核cpu而言,多工的系統也是可以做成純裸機的程式碼的,只不過結構不好設計,設計出來,也難以令人理解,特別是,程式碼遷移時,那就是一團糟。第二點就是缺少排程演算法,裸機程式碼基本上邏輯通了,就一股腦執行下去,緊急任務不能得到優先執行。有了os以後,不同功能的程式碼可以分開劃分成邏輯更為清晰的任務程序,程序負責主要相關事件的解決。作業系統負責排程任務。不同任務分別獲取資源執行。就好比3個人排隊在修車,修車師傅根據你們的車型,緊急情況,依次來修,我的修了一半了,師傅說要等一個零件,那麼就暫時修你的車,零件到了,我們三個人再排隊讓師傅決定修誰的車。師傅每次只修一點,修車速度很快,在外人看來我們三個就是併發在修車。上述模型在有os的情況下,可以把我們三個抽象成3個程序,師傅就是os。如果做成裸機模型就是,迴圈中依次檢測我們三個狀態,先修我的,沒有零件就跳過我修你的,有零件來個中斷,下次再來繼續修我的。並行的核心還是排程器,排程器效能也決定了os的好壞,當然這不是唯一因素。程序只是個概念,是排程器讓並行成為了可能。
多核情況下,確實任務是併發處理的,一般不同的核心從cache取資料操作,增加併發效能。單核的都是分時處理的。程序可以理解為常見的裸機程式碼,回到原始的8086結構,那時軟硬體還沒那麼複雜。一個裸機程式碼基本上就是一個大迴圈控制狀態機不斷迭代。在沒有作業系統支撐的情況下,我們寫的裸機程式碼要完成多個功能,就要在迴圈中把諸多因素考慮進去,然後分別對其狀態變化時做一些處理。不過呢,這種程式碼非常不好,不容易遷移。而且邏輯複雜,難以理解。我這麼說的意思是,對於單核cpu而言,多工的系統也是可以做成純裸機的程式碼的,只不過結構不好設計,設計出來,也難以令人理解,特別是,程式碼遷移時,那就是一團糟。第二點就是缺少排程演算法,裸機程式碼基本上邏輯通了,就一股腦執行下去,緊急任務不能得到優先執行。有了os以後,不同功能的程式碼可以分開劃分成邏輯更為清晰的任務程序,程序負責主要相關事件的解決。作業系統負責排程任務。不同任務分別獲取資源執行。就好比3個人排隊在修車,修車師傅根據你們的車型,緊急情況,依次來修,我的修了一半了,師傅說要等一個零件,那麼就暫時修你的車,零件到了,我們三個人再排隊讓師傅決定修誰的車。師傅每次只修一點,修車速度很快,在外人看來我們三個就是併發在修車。上述模型在有os的情況下,可以把我們三個抽象成3個程序,師傅就是os。如果做成裸機模型就是,迴圈中依次檢測我們三個狀態,先修我的,沒有零件就跳過我修你的,有零件來個中斷,下次再來繼續修我的。並行的核心還是排程器,排程器效能也決定了os的好壞,當然這不是唯一因素。程序只是個概念,是排程器讓並行成為了可能。