1. cpu核心
cpu核心就是cpu執行指令的晶片。一顆核心在同一時間只能做一件事情(執行一條指令),一般我們說的cpu利用率就是在一定時間內cpu執行指令所佔用的總時間比例,當一個cpu利用率達到100%,就說明cpu一直在做事情。多核cpu就是把多個cpu核心融合到一個物理cpu上。
但是,一般上次軟體在執行任務(比如對一個檔案進行des加密)的時候,會將一個任務分成多個指令執行(當然這也說不太嚴謹,因為上層的任務本身就是由許多小的指令組成的,比如des加密,不是說直接把資料傳給cpu,cpu就給你加密了,而是執行加密des這個操作,軟體層是許多諸如加、減、乘、除、位運算等步驟組成的,而又比如軟體層的乘這個操作,底層也是由加和位運算組成)
比如我多個程序執行不同的任務,底層是很多小的任務,然後單核cpu會輪詢的執行這些任務。你上層看起來是並行的,其實底層是序列的(你可以想像一下,飛機檢票,一個檢票口兩列)。
2. 程序
比如你寫了個軟體,那麼這個軟體執行後就是產生一個或者n個程序(至於是一個還是n個,那是你程式碼控制的),你可以在程序管理器上看到的,可以從系統層面來管理(傳送訊號、殺死等操作)。具體的也不好描述。
3. 執行緒
大部分語言預設情況下,是順序執行的,順序只需就會遇到阻塞(連線某個tcp埠,但是對方遲遲不響應)後面的操作就不能執行,你就一直等著。如果你想執行後面的操作咋辦,需要就出現了執行緒的概念,我可以一邊連線某個tcp埠,一邊在介面上顯示總共花了多長時間。
多執行緒是邏輯上讓多個任務同時執行,底層也是讓cpu來回在不同的執行緒上切換(比如先看看tcp連線對方是否已經響應了,如果沒響應,就切換到另一個執行緒去繪製介面)
4.並行和併發
感覺網上這個我圖還不錯,一個核心的情況下,單一時間只能做一個事情,於是在不同任務上切換,從宏觀上來看,幾個任務是同時執行,但微觀來看,並不是同時執行,這個就是併發
而多核cpu的情況下,每個cpu核心都能單獨做自己的事情,這個就是並行
1. cpu核心
cpu核心就是cpu執行指令的晶片。一顆核心在同一時間只能做一件事情(執行一條指令),一般我們說的cpu利用率就是在一定時間內cpu執行指令所佔用的總時間比例,當一個cpu利用率達到100%,就說明cpu一直在做事情。多核cpu就是把多個cpu核心融合到一個物理cpu上。
但是,一般上次軟體在執行任務(比如對一個檔案進行des加密)的時候,會將一個任務分成多個指令執行(當然這也說不太嚴謹,因為上層的任務本身就是由許多小的指令組成的,比如des加密,不是說直接把資料傳給cpu,cpu就給你加密了,而是執行加密des這個操作,軟體層是許多諸如加、減、乘、除、位運算等步驟組成的,而又比如軟體層的乘這個操作,底層也是由加和位運算組成)
比如我多個程序執行不同的任務,底層是很多小的任務,然後單核cpu會輪詢的執行這些任務。你上層看起來是並行的,其實底層是序列的(你可以想像一下,飛機檢票,一個檢票口兩列)。
2. 程序
狹義定義:程序是正在執行的程式的例項(an instance of a computer program that is being executed)。廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。比如你寫了個軟體,那麼這個軟體執行後就是產生一個或者n個程序(至於是一個還是n個,那是你程式碼控制的),你可以在程序管理器上看到的,可以從系統層面來管理(傳送訊號、殺死等操作)。具體的也不好描述。
3. 執行緒
執行緒(英語:thread)是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。大部分語言預設情況下,是順序執行的,順序只需就會遇到阻塞(連線某個tcp埠,但是對方遲遲不響應)後面的操作就不能執行,你就一直等著。如果你想執行後面的操作咋辦,需要就出現了執行緒的概念,我可以一邊連線某個tcp埠,一邊在介面上顯示總共花了多長時間。
多執行緒是邏輯上讓多個任務同時執行,底層也是讓cpu來回在不同的執行緒上切換(比如先看看tcp連線對方是否已經響應了,如果沒響應,就切換到另一個執行緒去繪製介面)
4.並行和併發
感覺網上這個我圖還不錯,一個核心的情況下,單一時間只能做一個事情,於是在不同任務上切換,從宏觀上來看,幾個任務是同時執行,但微觀來看,並不是同時執行,這個就是併發
而多核cpu的情況下,每個cpu核心都能單獨做自己的事情,這個就是並行