進程與執行緒詳解

  • 2022 年 4 月 16 日
  • 筆記

進程與執行緒詳解

本部落格分以下幾個部分來闡述進程與執行緒

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

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

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

4、進程與執行緒有哪些聯繫呢?

什麼是進程?

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

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

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

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

從用戶使用的角度來看

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

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

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

執行緒的引入優點很多,又有哪些問題呢?

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

進程與執行緒有哪些聯繫呢?

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