經典面試題:進程、線程、協程開銷問題,為什么進程切換的開銷比線程的大?

上下文切換的過程?

上下文切換是操作系統在將CPU從一個進程切換到另一個進程時所執行的過程。它涉及保存當前執行進程的狀態并加載下一個將要執行的進程的狀態。下面是上下文切換的詳細過程:

  1. 保存當前進程的上下文
  • 當操作系統決定切換到另一個進程時,首先需要保存當前正在執行的進程的執行狀態。
  • 這包括將當前進程的寄存器狀態(如通用寄存器、程序計數器PC、棧指針等)保存到進程控制塊(PCB)中。
  • 操作系統還可能會保存其他與進程相關的狀態信息,如頁表、內存映射、打開的文件等。
  1. 選擇新進程
  • 操作系統根據調度算法從就緒隊列中選擇下一個要執行的進程。
  • 這個選擇可能基于各種因素,如優先級、時間片大小、進程狀態等。
  1. 加載新進程的上下文
  • 一旦新進程被選擇,操作系統需要加載該進程的執行狀態,以便CPU可以開始執行該進程。
  • 這包括從該進程的PCB中恢復寄存器狀態,如通用寄存器、程序計數器PC、棧指針等。
  • 操作系統還可能恢復其他與進程相關的狀態信息,如頁表、內存映射、打開的文件等。
  1. 更新調度信息
  • 在進行上下文切換后,操作系統可能需要更新調度信息,如更新就緒隊列、時間片計數等。
  • 這確保了系統可以繼續有效地調度進程,并避免出現死鎖或其他資源爭用問題。
  1. 切換到新進程執行
  • 一旦新進程的上下文被加載到CPU中,CPU開始執行新進程的代碼。
  • 新進程從其上次中斷或被搶占的位置繼續執行。

進程、線程、協程切換的開銷?

  1. 進程切換的開銷
  • 進程切換涉及到從一個進程切換到另一個進程,因此需要保存和恢復大量的上下文信息,包括寄存器狀態、內存映射、文件描述符等。
  • 進程切換的開銷通常較大,因為它需要切換整個進程的上下文,可能涉及到內存的切換和頁面交換等操作。
  • 由于進程之間是相互隔離的,切換進程需要操作系統進行較多的工作,包括內存管理、權限檢查等,因此進程切換的開銷相對較大。
  1. 線程切換的開銷
  • 線程是在同一個進程內部運行的,因此線程切換的開銷相對較小。
  • 線程切換只需要保存和恢復線程的寄存器狀態和堆棧信息等少量上下文信息。
  • 由于線程共享進程的地址空間和其他資源,線程切換無需進行內存管理或權限檢查等操作,因此開銷較進程切換要小。
  1. 協程切換的開銷
  • 協程是輕量級的用戶態線程,其切換開銷比進程和線程都要小。
  • 協程切換只需要保存和恢復協程的棧幀信息,以及一些額外的狀態信息,如指令指針等。
  • 由于協程是在用戶態管理的,無需涉及操作系統的內核調度和內存管理,因此協程切換的開銷最小。

為什么進程切換的開銷比線程的大?

  • 進程是系統資源的基本單位,它們之間是相互隔離的,切換進程需要操作系統進行大量的內存管理和權限檢查等工作,因此開銷較大。
  • 各個進程之間可能擁有獨立的內存空間,切換進程需要進行內存頁的切換和可能的頁面交換,把虛擬地址轉換為物理地址需要查頁表,查頁表是很慢的過程,轉換檢測緩沖區 TLB 可以提高頁表查詢速度就是一個緩存,頁表切換后 TLB 就會失效,命中率就會變低,切換過程就會慢,線程則不需要切換地址空間所以開銷比較小。

為什么線程切換的開銷比協程的大?

協程切換比線程切換開銷小的主要原因有以下幾點:

  1. 用戶空間操作: 協程通常在用戶空間內管理,切換時不需要陷入內核態,而線程切換涉及內核態和用戶態之間的切換。由于內核態切換通常涉及到上下文的保存和恢復,以及內核數據結構的操作,開銷較大。
  2. 輕量級調度: 協程的調度是由用戶程序自行控制的,通常采用協作式調度,用戶程序在適當的時機主動讓出CPU,切換到其他協程。這種調度方式不需要內核的介入,開銷較小。
  3. 上下文切換成本低: 協程切換通常只涉及保存和恢復協程的執行上下文,如棧指針、寄存器等,這個過程在用戶空間內完成,不涉及內核調度器和內核態的切換,因此開銷較小。
  4. 無需同步原語: 在線程切換時,通常需要考慮同步原語(如互斥鎖、條件變量)的狀態和處理,以確保線程間的數據一致性。而在協程切換時,通常不需要考慮這些同步原語,因為協程之間共享同一個線程的地址空間,不涉及多線程之間的競爭和同步。

協程切換比線程切換開銷小的主要原因是協程在用戶空間內管理,不涉及內核態和用戶態之間的切換,調度方式輕量級,上下文切換成本低,且無需考慮同步原語等因素。這使得協程在高并發、IO密集型等場景下具有較好的性能和效率。

什么是 TLB?

TLB(Translation Lookaside Buffer,譯碼后備緩沖器)是一種硬件緩存,存儲了最近使用的虛擬地址到物理地址的映射關系,用于加速虛擬地址到物理地址的轉換過程。在現代計算機體系結構中,TLB通常被用于處理虛擬內存系統中的地址轉換。由于TLB的容量有限,如果訪問的虛擬地址不在TLB中,就會發生TLB缺失(TLB Miss),此時需要訪問MMU進行地址轉換,并將新的映射關系加載到TLB中。因此,TLB的命中率直接影響了系統的性能表現。

  1. 加速地址轉換: TLB存儲了虛擬地址到物理地址的映射關系,當CPU需要訪問內存時,先在TLB中查找對應的物理地址,如果命中則直接獲取物理地址,避免了訪問內存管理單元(MMU)進行地址轉換的開銷。
  2. 減少內存訪問延遲: 由于TLB位于CPU芯片內部,其訪問速度遠高于訪問主存的速度,因此能夠大大減少內存訪問的延遲,提高程序執行效率。
  3. 提高性能: TLB的存在可以大幅度提高系統的性能,特別是在需要頻繁進行地址轉換的應用場景下,如多任務操作系統、虛擬化環境等。

為什么每次切換 TLB 都會失效?

TLB(Translation Lookaside Buffer,譯碼后備緩沖器)每次失效的原因主要有以下幾點:

  1. 容量限制: TLB是一個硬件緩存,其容量通常比較有限。當系統中的虛擬地址空間非常大時,TLB無法存儲所有的虛擬地址到物理地址的映射關系,因此會發生TLB失效。
  2. 進程切換: 在多任務操作系統中,每個進程都有自己的虛擬地址空間,當發生進程切換時,當前進程的虛擬地址空間會被替換為下一個進程的虛擬地址空間。由于不同進程的虛擬地址空間可能不同,因此TLB中存儲的映射關系就會失效。
  3. 頁表更新: 虛擬地址到物理地址的映射關系是由操作系統的頁表管理的,當頁表發生變化時(如頁面置換、頁表更新等),TLB中存儲的映射關系也會失效。
  4. 地址空間切換: 在虛擬化環境中,虛擬機之間的地址空間是相互隔離的,當虛擬機切換時,TLB中存儲的映射關系也會失效。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15910.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

浪潮信息IPF24:AI+時代,創新驅動未來,攜手共創智慧新紀元

如今,數字化時代的浪潮席卷全球,人工智能已經成為推動社會進步的重要引擎。浪潮信息IPF24作為行業領先的AI技術盛會,不僅為業界提供了交流合作的平臺,更在激發創新活力、拓展發展路徑、加速AI技術落地等方面發揮了重要作用。 升級…

OS復習筆記ch6-2

死鎖的解決 死鎖的預防(打疫苗)死鎖的避免(戴口罩)死鎖的檢測(做核酸) 死鎖的預防 前面我們提到了死鎖的四個必要條件 防止前三個必要條件,就是間接預防防止最后一個必要條件–循環等待&…

軟測刷題-錯題1

提高測試效率的方法: 1、不要做無效的測試 2.不要做重復的測試 3.不同測試版本的測試側重點 4.優化測試順序 LoadRunner是對服務器進行施壓。 在數據庫中存在的用戶數是指注冊用戶數。 input標簽可以直接使用send_keys實現上傳,而非input標簽是無法直…

Rust后臺管理系統Salvo-admin源碼編譯

1.克隆salvo-admin后臺管理系統源碼: https://github.com/lyqgit/salvo-admin.git 2.編譯 編譯成功 3.創建mysql數據庫與執行sql腳本 輸入名稱ry-vue 執行sql腳本 全部執行上面3個sql 修改數據庫用戶名與密碼: 清理及重新編譯 cargo clean cargo build 4.運行并測試 cargo…

Android內存碎片化調優

概念 內存碎片分為兩種,一種是內存頁中的碎片,被稱為內部碎片;另一種是空閑分散的內存頁,湊不齊一個組物理地址連續的空閑內存頁,就沒辦法分配了,這些散落的內存頁被稱為外部碎片。 在Android系統中,內存碎片化是指內存中存在很多小塊的空閑內存,這些內存塊之間不連續…

使用vue,mybatis,mysql,tomcat,axios實現簡單的登錄注冊功能

目錄 第一步環境搭建 后端: 前端: 第二步畫流程圖 web: service: dao層: 第三步前端代碼的實現 這是開始的頁面,接下來我們要到router路由下書寫#login的路徑 路由中的component在我們自己創建的views書寫vue文件…

單日收益1000+看了就會的項目,最新靈異短視頻項目,簡單好上手可放大操作

各位好友,佳哥在此與大伙兒聊聊一項神秘莫測的短視頻項目。你或許會想,“又是一個視頻創作項目?” 但別急,這個項目與眾不同,日入千元不再是夢,而且它的易用性讓人驚喜,無論你是初學者還是資深玩…

春秋云境CVE-2018-7422

簡介 WordPress Plugin Site Editor LFI 正文 1.進入靶場 2.漏洞利用 /wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path/../../../../../../flag看別人wp做的。不懂怎么弄的,有沒有大佬講一下的

沒有電商經驗的人去操作抖音小店,難度大不大?好操作嗎?

大家好,我是電商小V 很多新手小伙伴想去操作抖音小店項目,咨詢的最多的問題就是我沒有電商運營的經驗可以去操作嗎? 當然是可以操作的,抖音小店項目對于新手來說是一個非常友好的項目,很多小伙伴都是感覺沒有電商經驗去…

數據庫攻防之MySQL

MySQL 是最流行的關系型數據庫,與此同時也是 web 應用中最好的關系型數據庫管理應用軟件。我們在滲透過程中碰到的 PHP 站點大部分都會搭配 MySQL 數據庫,因此它是紅隊攻防中最常遇到的數據庫。 0x01 MySQL簡介 MySQL 是典型的關系型數據庫,…

YOLOv10 | 無NMS的YOLO | 實時端到端目標檢測的新突破

過去幾年里,YOLOs因在計算成本和檢測性能之間實現有效平衡而成為實時目標檢測領域的主流范式。研究人員針對YOLOs的結構設計、優化目標、數據增強策略等進行了深入探索,并取得了顯著進展。然而,對非極大值抑制(NMS)的后…

redis--消息隊列

分類 生產者消費模式 發布者訂閱模式 生產者消費模式 在生產者消費者(Producer/Consumer)模式下,上層應用接收到的外部請求后開始處理其當前步驟的操作,在執行完成后將已經完成的操作發送至指定的頻道(channel)當中,并由其下層的應用監聽…

【Chrono Engine學習總結】6-創建自定義場景-6.2-chrono中的光線設置

由于Chrono的官方教程在一些細節方面解釋的并不清楚,自己做了一些嘗試,做學習總結。 上一篇文章中,自己【用sketchup重建了三維場景】,但導入chrono中顏色很不正確,幾乎都是白色的,但也不是完全白色。經過…

IDE上傳本地倉庫到GitHub

IDE上傳本地倉庫到GitHub 1、選擇遠程倉庫平臺2、下載安裝Git3、IDE集成Git4、本地項目上傳GitHub 1、選擇遠程倉庫平臺 1.1、注冊遠程倉庫平臺 常見的遠程倉庫托管平臺有: 1)GitHub 域名:https://github.com 介紹:GitHub是全球最…

Java訂餐系統源碼 springboot點菜系統源碼

Java訂餐系統源碼 springboot點菜系統源碼 源碼下載地址:https://download.csdn.net/download/xiaohua1992/89341358 功能介紹: 前臺登錄:前臺登錄: ①首頁:菜品信息推薦、菜品信息展示、查看更多 ②菜品信息&…

Stanford斯坦福 CS 224R: 深度強化學習 (3)

基于模型的強化學習 強化學習(RL)旨在讓智能體通過與環境互動來學習最優策略,從而最大化累積獎勵。傳統的強化學習方法如Q-learning、策略梯度等,通過大量的試錯來學習值函數或策略,樣本效率較低。而基于模型的強化學習(MBRL)則利用對環境的預測模型來加速學習過程,大大提高了…

參數的本質:詳解 JavaScript 函數的參數

文章導讀:AI 輔助學習前端,包含入門、進階、高級部分前端系列內容,當前是 JavaScript 的部分,瑤琴會持續更新,適合零基礎的朋友,已有前端工作經驗的可以不看,也可以當作基礎知識回顧。 上篇文章…

地理信息系統(GIS)軟件開發

地理信息系統(GIS)軟件開發是一項復雜且系統性很強的工程,涉及空間數據的采集、管理、分析和展示。以下是一個典型的GIS軟件開發流程,包括各個步驟的詳細說明。北京木奇移動技術有限公司,專業的軟件外包開發公司&#…

面向對象------多態

1.多態的定義 通俗來說,當同一種行為或者事情發生在不同的對象上,這些行為或者事情最終得到的結果不同。 注意:多態要發生在繼承的基礎上。 例如:彩色打印機和黑白打印機。 彩色打印機和黑白打印機是不同的對象,但…

詳細分析Element中的MessageBox基本知識(附Demo)

目錄 前言1. 基本知識2. Demo2.1 確認框2.2 警告框2.3 對話框 3. this.$confirm 前言 詳細知識推薦閱讀:詳細分析Element Plus中的ElMessageBox彈窗用法(附Demo及模版) MessageBox則常用于Vue2 1. 基本知識 MessageBox 是 Element UI 提供…