【学习笔记】第二章——线程与多线程模型
生活随笔
收集整理的這篇文章主要介紹了
【学习笔记】第二章——线程与多线程模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一. 線程
- 為什么要引入線程:
- 引入進程后的變化
- 線程的屬性
- 線程的實現
- 二. 多線程模型
- 1. 多對一模型
- 2. 一對一模型
- 3. 多對多模型
- 三. 總結
一. 線程
為什么要引入線程:
- 有的進程可能要“同時進行很多事”(如QQ的語音、視頻、文件處理等)。但傳統進程只能串行地執行,為此引入線程增加并發度
- 程序執行流的最小單位:傳統為進程,如今為線程
- 線程可以理解為“輕量級進程”
- 進程內的各線程之間也可以并發,從而進一步提升系統的并發度
- 引入線程后,進程只作為除CPU外的系統資源分配單元(如打印機、內容地址空間等)
引入進程后的變化
- 調度的基本單位更換成線程
- 切換進程,需要切換運行環境,系統開銷大。
- 切換線程,不需要切換運行環境,系統開銷小。
- 舉個例子:后端組的電腦,更換使用員工:同樣換成后端員工,就可以省去不少環境配置的功夫;而換成前端員工,那么相對肯定麻煩點。
線程的屬性
- CPU 調度的單位
- 幾乎不擁有系統資源
- 共享內存地址空間,同一進程的線程間通信無需系統干預
- 同一進程中線程切換,不會引起進程切換;不同進程中線程則會。
- 同一進程中線程切換,系統開銷小;反之則大
- 每個線程都有線程ID、線程控制塊。
線程的實現
- 用戶級線程:
- 用戶態下,即可完成線程切換
- 對用戶而言,是多線程;對操作系統而言,是單線程(透明)
- 可以理解成:“從用戶視角能看到的線程”
- 系統級線程:
- 線程管理由操作系統內核完成,必須在核心態下進行。
- 可以理解成“從操作系統內核視角看得到的線程”
- 二者結合的情況
- 注意:用戶級線程數大于等于內核級線程
- 重點:只有內核級線程才是處理機分配的單位。
- 圖中例子看一下,幫助理解。
二. 多線程模型
1. 多對一模型
- 優點:不用切換到核心態,效率高
- 缺點:一個線程阻塞則整個進程阻塞,并發度不高。不支持多核CPU下并行。
2. 一對一模型
- 優點:一線程阻塞,其他線程還可繼續運行,并發能力強,支持多核CPU下并行。
- 缺點:線程管理成本高,開銷大。一用戶進程占多個內核級線程
3. 多對多模型
- 結合以上兩種模型的結果,解決缺點。
三. 總結
總結
以上是生活随笔為你收集整理的【学习笔记】第二章——线程与多线程模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode笔记】2. 两数相加(
- 下一篇: android 启动服务同时传递数据,A