進程與線程詳解

  • 2022 年 4 月 16 日
  • 筆記

進程與線程詳解

本博客分以下幾個部分來闡述進程與線程

1、進程的概念很抽象?那麼什麼是進程呢?

2、開啟一個進程,操作系統會做哪些工作?

3、既然進程也可以使多個程序能並發執行,為什麼還需要線程?

4、進程與線程有哪些聯繫呢?

什麼是進程?

  • 進程是計算機程序從啟動到結束的過程。
  • 那麼什麼是計算機程序呢? 我們常見的QQ、微信、英雄聯盟這些軟件都是一個計算機程序,(可以說我們從打開QQ到關閉QQ就是一段進程)。
    不難理解,這些計算機程序是由代碼,以及圖片、音頻、jar包等必要的資源文件組成的。

開啟一個進程,操作系統會做哪些工作呢?

  • ①進程的ID號。當操作系統收到我們要打開QQ進程的時候,操作系統會給QQ進程一個ID號,我們可以通過任務管理器窗口看到該進程ID
  • ②申請內存空間。每個進程擁有獨立的地址空間。

既然進程也可以使多個程序能並發執行,為什麼還需要線程?

從用戶使用的角度來看

  • 進程的並發解決了哪些問題呢?
    • 多應用同時進行,在QQ音樂聽歌的同時 還可以刷QQ空間。
    • 應用分身,這允許我們同時登錄好多人的QQ號。
  • 如果我們QQ進程中只有一個線程,會發生什麼呢?
    • 單線程的進程是完全順序結構,只能在同一時間做一件事情。比如我們在使用QQ進行文件傳輸的時候,就無法和好友發消息 閑聊了。

從上下文狀態切換的角度來看

  • 進程的單位比較大,創建/銷毀、進行上下文切換比較浪費資源
  • 線程的單位比較小,創建/銷毀、上下文切換不太浪費資源
  • 所以,需要頻繁創建銷毀時,要考慮線程 。在需要大量計算、切換頻繁時 使用線程可以提高程序的響應速度 。

線程的引入優點很多,又有哪些問題呢?

  • 開發更加麻煩。
  • 線程可以共享一個進程的資源,所以共享的數據要保證安全。
  • 線程的執行順序,也需要保證,比如我們要給QQ好友發送一張圖片,這篇文章傳輸過程中可能被分成了很多份小的
    數據包來發送,這個時候QQ好友接收數據包的順序不能亂。

進程與線程有哪些聯繫呢?

  • 一個進程之中可以包含多個線程
  • 線程可以共享一個進程的資源