天天看點

程序線程相關概念

提到程序線程就不得不把他們的父老鄉親都拉出來問候一下。

首先是程式(計算機程式)

百度百科中定義程式為一組計算機能識别和執行的指令,運作于計算機上,滿足人們某種需求的資訊化工具。

通俗點講程式就是可以讓CPU完成指定任務的指令序列,而作為一個程式員程式可以簡單的将其看做使用程式設計語言實作得到的資料結構和算法有機結合。

即程式 = 資料結構 + 算法

為了友善區分,我将程式了解為一個靜态的概念,不管計算機運作與否,程式就在那裡不增不減。沒有啟動的時候程式就是和資料類似的儲存在計算機中的一串串01。

在這個定義中程式隻包含了資料結構和算法,為了讓程式運作,一些基本的資料會在代碼中直接設定好,而實質上有一些特定的應用場景下還需要額外的資料程式才能夠跑起來(比較典型的例子就是機器學習算法訓練),為了友善管理作業系統的管理這樣就引入了一個關于計算機中程式運作的概念程序

百度百科中對程序的定義是計算機中一個具有獨立功能的程式關于某資料集合上的一次運作活動,是系統進行資源配置設定和排程的基本機關,是作業系統結構的基礎。

程序是一個動态的概念。在作業系統裡面,程序就是一個配置設定了資料裝置等資源可以執行的程式體,也即

程序 = 程式 + 資料 + 程序控制塊(PCB)

借用一下相親的場景,程式可以相當于适齡青年,但平時由于缺少房子車子和票子(資料)隻能保持冷靜,當他(她)掙夠了米(配置設定了資料),拿到了PCB,這個PCB就相當于愛的号碼牌,他就可以開始相親了,但是開始相親不一定就馬上能脫單,還得排隊,脫了單也不一定能結婚,還有可能分手,分了手也不一定GG,還有可能複合。也即程序還擁有等待、阻塞、執行、就緒等狀态。

程序是程式運作的執行個體,一個程式可能有多個程序。一段程式代碼每執行一次都會建立一個新的程序。

那線程是什麼呢?線程是作業系統能夠運算排程的最小機關。可以看做程序裡面獨立運作的子任務,程序負責向系統申請資源,多個線程共用這些資源來完成分立的不同任務。

這裡就要提到兩個性質并發性和并行性

并發性:一個處理機同時應對多個任務的能力。

并行性:多個處理機同時處理多個任務的能力。

具體了解可以參考這篇

并發性的實作就可以通過多線程技術。

打一個不恰當的比方,幼稚園有一整個班10個孩子在哭鬧等着哄,并發相當于隻有一個老師,這個老師先每個孩子哄2分鐘讓孩子們的哭聲小一點,然後重複這個過程直到每個孩子都哄好為止;并行就相當于有10位老師,每個老師哄一個孩子最好把孩子哄好。同樣都能夠完成所有的任務。第一位老師哄每一個孩子的時候就相當于在進行當下的線程,10個孩子就有10個線程任務,兩種方式最終都能夠完成任務。

繼續閱讀