進程與線程詳解
- 2022 年 4 月 16 日
- 筆記
進程與線程詳解
本博客分以下幾個部分來闡述進程與線程
1、進程的概念很抽象?那麼什麼是進程呢?
2、開啟一個進程,操作系統會做哪些工作?
3、既然進程也可以使多個程序能並發執行,為什麼還需要線程?
4、進程與線程有哪些聯繫呢?
什麼是進程?
- 進程是計算機程序從啟動到結束的過程。
- 那麼什麼是計算機程序呢? 我們常見的QQ、微信、英雄聯盟這些軟件都是一個計算機程序,(可以說我們從打開QQ到關閉QQ就是一段進程)。
不難理解,這些計算機程序是由代碼,以及圖片、音頻、jar包等必要的資源文件組成的。
開啟一個進程,操作系統會做哪些工作呢?
- ①進程的ID號。當操作系統收到我們要打開QQ進程的時候,操作系統會給QQ進程一個ID號,我們可以通過任務管理器窗口看到該進程ID
- ②申請內存空間。每個進程擁有獨立的地址空間。

既然進程也可以使多個程序能並發執行,為什麼還需要線程?
從用戶使用的角度來看
- 進程的並發解決了哪些問題呢?
- 多應用同時進行,在QQ音樂聽歌的同時 還可以刷QQ空間。
- 應用分身,這允許我們同時登錄好多人的QQ號。
- 如果我們QQ進程中只有一個線程,會發生什麼呢?
- 單線程的進程是完全順序結構,只能在同一時間做一件事情。比如我們在使用QQ進行文件傳輸的時候,就無法和好友發消息 閑聊了。
從上下文狀態切換的角度來看
- 進程的單位比較大,創建/銷毀、進行上下文切換比較浪費資源
- 線程的單位比較小,創建/銷毀、上下文切換不太浪費資源
- 所以,需要頻繁創建銷毀時,要考慮線程 。在需要大量計算、切換頻繁時 使用線程可以提高程序的響應速度 。
線程的引入優點很多,又有哪些問題呢?
- 開發更加麻煩。
- 線程可以共享一個進程的資源,所以共享的數據要保證安全。
- 線程的執行順序,也需要保證,比如我們要給QQ好友發送一張圖片,這篇文章傳輸過程中可能被分成了很多份小的
數據包來發送,這個時候QQ好友接收數據包的順序不能亂。
進程與線程有哪些聯繫呢?
- 一個進程之中可以包含多個線程
- 線程可以共享一個進程的資源


