談起你心愛的多任務、進程、多線程、線程,你是否可以侃侃而談???

在計算機的世界中,你得看到更加廣闊的視野,除了你可能瞭解的多線程,其實還有着多任務、進程、線程這些概念。

多任務

什麼是多任務?,從字面意思理解就簡單多了, 字很好理解,不單一個,有兩個或兩個以上;而 任務 呢?這個也不難,每個進程都可以稱作一個任務。

多任務是指用戶在同一時間內運行多個進程。

舉個生活中的小栗子

當你在上你最喜愛的編程課的時候,你的好兄弟 一顆剽悍的種子 叫你吃雞,你想啊,難得好兄弟叫你一起開黑,當然是趕緊上號;所以你一邊和好兄弟一起打遊戲,一邊還要看看眼前的老師在敲代碼(其實是看老師有沒有過來 ),兩個任務同時進行。

這節課很快就過去了,快樂的時光總是走得很快很快,下課的你是乎有點恍惚,雞是吃到了,但是課就有迷了,聽得似懂非懂。

不管在以往的生活中,還是上面的比方,你是否會發現,看起來是在做多個任務,但是 本質上我們大腦同一時間依舊只做一件事情。

計算機也是同樣如此…

你看計算機能同時運行多個任務,其實是一個錯覺。

事實上CPU在某一時刻只會執行一件任務,因爲CPU任務調度機制在任務之間的切換速度非常迅速。
在這裏插入圖片描述

進程

除了看上面的多任務,想必你在遊蕩計算機世界裏也沒少聽說過進程這個概念。

在操作系統中一個任務就是一個進程,也就是說你運行的程序就是進程,你打開的微信、遊戲、瀏覽器等等都是一個個的進程。

那進程就只能幹一件事情嗎,當然不止,正如現在在使用瀏覽器寫文章的我,寫文章是一個頁面,打開新頁面搜歌又是一個頁面,一邊聽歌一邊無休止的寫。

CSDN中寫文章裏的功能只是寫這個功能嗎,它可以同時在我寫的時候一邊統計字數和行數,還有當前是幾行幾列。聽歌只有聲音嗎,它還有歌詞呢。

在一個進程中,需要同時運行多個"子任務",我們可以稱進程內的這些"子任務"是線程。下面線程中會說到。

一個進程可以有多個線程,如視頻中可以同時聽到聲音,看一幀幀圖像,還可以跟着看彈幕和刷彈幕,等等…

進程有一定的生命期,所以是執行程序的一次執行過程,是一個動態概念。是系統資源分配的單位。

說起進程不得不提和進程很類似的 程序

可以簡單的理解:程序其本身沒有任何運行的含義,是一個靜態的概念。

多線程

上面進程舉的栗子中,進程每做一件事情,就需要有一個線程。那麼一個進程要做一件事情,就需要至少有一個線程。如瀏覽器這種進程可以有多個線程,多個線程可以同時執行。

多線程執行方式和多進程可以說一樣的,是由操作系統在多個線程之間快速切換,短暫交替運行,所以看起來像同時執行一樣。

對比普通方法調用&多線程調用

普通方法調用

主線程跑下來調用run方法,run方法執行完,依然回到主線程。

主線程只有一條執行路徑

在這裏插入圖片描述
多線程調用

分工協作各走各的,主線程走主線程的,子線程走子線程的,多線程調用多條路徑執行,而不像普通調用只執行主線程一條。

多線程可以有多條執行路徑,主線程與子線程並行交替執行。

在這裏插入圖片描述
但是在多線程當中,除了每個線程交替運行速度快,讓你看起來如同同時執行一樣的錯覺;是出現在只有一個CPU的情況下。

多核CPU就不再是這種快速交替運行的錯覺了,多核CPU是真正實現同時執行多線程。

線程

當看到這裏,相信你對線程這個概念已經不再陌生了,多線程很簡單指的是執行多條路徑,那線程呢?

線程是獨立的執行路徑。

最後

我是一顆剽悍的種子 把我會的,認真的分享 是我寫博客一直不變的信條。 如果你能看到這篇博文,說明咱們還是很有緣的;希望能帶給你一些許幫助,創作的不易, 把我文章的知識帶走,你的三連留下,點贊,評論,關注,是我最大的動力。