色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

進程切換與線程切換有啥區別

jf_78858299 ? 來源:碼農的荒島求生 ? 作者:碼農的荒島求生 ? 2023-02-24 14:16 ? 次閱讀

注意這個題目問的是進程切換與線程切換的區別,不是進程與線程的區別。當然這里的 線程指的是同一個進程中的線程

這個問題能很好的考察面試者對進程和線程的理解深度,有比較高的區分度。

要想正確回答這個問題,面試者需要理解虛擬內存。

虛擬內存解放生產力

對于程序員來說,我們在編程時實際上是不怎么操心內存問題的,對于使用JavaPython、JavaScript等動態類型語言的程序員來說更是如此,自動內存回收機制的引入使得使用這類語言的程序員幾乎完全不用關心內存問題;即使對于編譯型語言C/C++來說,程序員需要關心的也僅僅是內存的申請和釋放。

總的來說,作為程序員(無論使用什么類型的語言)我們根本就不關心數據以及程序被放在了 物理內存的哪個位置上 (設計實現操作系統的程序員除外),我們可以簡單的認為我們的程序 獨占內存 ,比如在32位系統下我們的進程占用的內存空間為4G;并且我們可以申請超過物理內存大小的空間,比如在只有256MB的系統上程序員可以申請1G大小的內存空間,這種假設極大的解放了程序員的生產力。

而這種假設實現的背后功臣就是虛擬內存。

什么是虛擬內存

虛擬內存是操作系統為每個進程提供的一種抽象,每個進程都有屬于自己的、私有的、地址連續的虛擬內存,當然我們知道 最終進程的數據及代碼必然要放到物理內存上 ,那么必須有某種機制能記住虛擬地址空間中的某個數據被放到了哪個物理內存地址上,這就是所謂的地址空間映射,也就是虛擬內存地址與物理內存地址的映射關系,那么操作系統是如何記住這種映射關系的呢,答案就是頁表,頁表中記錄了虛擬內存地址到物理內存地址的映射關系。有了頁表就可以將虛擬地址轉換為物理內存地址了,這種機制就是虛擬內存。

每個進程都有自己的虛擬地址空間,進程內的所有線程共享進程的虛擬地址空間。

現在我們就可以來回答這個面試題了。

進程切換與線程切換的區別

進程切換與線程切換的一個最主要區別就在于進程切換涉及到虛擬地址空間的切換而線程切換則不會。因為每個進程都有自己的虛擬地址空間,而線程是共享所在進程的虛擬地址空間的,因此同一個進程中的線程進行線程切換時不涉及虛擬地址空間的轉換。

舉一個不太恰當的例子,線程切換就好比你從主臥走到次臥,反正主臥和次臥都在同一個房子中(虛擬地址空間),因此你無需換鞋子、換衣服等等。但是進程切換就不一樣了,進程切換就好比從你家到別人家,這是兩個不同的房子(不同的虛擬地址空間),出發時要換好衣服、鞋子等等,到別人家后還要再換鞋子等等。

因此我們可以形象的認為線程是處在同一個屋檐下的,這里的屋檐就是虛擬地址空間,因此線程間切換無需虛擬地址空間的切換;而進程則不同,兩個不同進程位于不同的屋檐下,即進程位于不同的虛擬地址空間,因此進程切換涉及到虛擬地址空間的切換,這也是為什么進程切換要比線程切換慢的原因。

有的同學可能還是不太明白,為什么虛擬地址空間切換會比較耗時呢?

為什么虛擬地址切換很慢

現在我們已經知道了進程都有自己的虛擬地址空間,把虛擬地址轉換為物理地址需要查找頁表,頁表查找是一個很慢的過程,因此通常使用Cache來緩存常用的地址映射,這樣可以加速頁表查找,這個cache就是TLB,Translation Lookaside Buffer,我們不需要關心這個名字只需要知道TLB本質上就是一個cache,是用來加速頁表查找的。由于每個進程都有自己的虛擬地址空間,那么顯然每個進程都有自己的頁表,那么當進程切換后頁表也要進行切換,頁表切換后TLB就失效了,cache失效導致命中率降低,那么虛擬地址轉換為物理地址就會變慢,表現出來的就是程序運行會變慢,而線程切換則不會導致TLB失效,因為線程線程無需切換地址空間,因此我們通常說線程切換要比較進程切換塊,原因就在這里。

總結

虛擬內存是現代操作系統極其重要的一部分,當然在這里限于篇幅我們只能簡單介紹,關于虛擬內存的詳細講解見后續操作系統教程,敬請期待

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68524
  • 線程
    +關注

    關注

    0

    文章

    504

    瀏覽量

    19675
  • 進程
    +關注

    關注

    0

    文章

    203

    瀏覽量

    13960
收藏 人收藏

    評論

    相關推薦

    Linux中進程線程的深度對比

    關于進程線程,在 Linux 中是一對兒很核心的概念。但是進程線程到底有聯系,又有
    發表于 10-14 16:47 ?1304次閱讀
    Linux中<b class='flag-5'>進程</b>和<b class='flag-5'>線程</b>的深度對比

    進程線程區別

    線程是指進程內的一個執行單元,也是進程內的可調度實體.與進程區別:(1)地址空間:進程內的一個
    發表于 12-12 09:28

    線程進程、程序的區別

    程序中同時運行多個線程完成不同的工作,稱為多線程線程進程區別在于,子進程和父
    發表于 03-23 13:09

    進程線程區別和聯系介紹

    之輕裝運行;而對擁有資源的基本單位, 又不頻繁地對之進行切換。正是在這種思想的指導下,產生了線程概 念。 在引入線程的操作系統中,線程進程
    發表于 07-04 00:18

    請問UCOSIII中的任務調度和任務切換有什么區別

    疑惑:UCOSIII中的任務調度和任務切換有什么區別?原子哥在PPT里面的解釋是:任務調度就是中止當前正在運行的任務轉而去執行其他的任務。當UCOSIII需要切換到另外一個任務時,它將保存當前任務
    發表于 05-25 07:27

    進程線程區別在哪?

    1、進程線程區別:1. 線程是程序執行的最小單位,而進程是操作系統分配資源的最小單位;2. 一個進程
    發表于 07-07 06:53

    線程管理之線程切換

    線程管理之線程切換前言基本信息前言說明PendSV_Handler函數前言基本信息名稱描述說明RT-Thread Studio 軟件版本版本: 1.1.3RT-Thread 系統版本
    發表于 08-24 08:19

    什么是CDMA軟切換?它與硬切換有什么分別?

    什么是CDMA軟切換?它與硬切換有什么分別? 移動通訊是建立在移動之中的。有了頻率的復用,必然帶來移動中的頻率切換問題,一個網絡質量的
    發表于 06-01 20:27 ?951次閱讀

    什么是CDMA軟切換?它與硬切換有什么分別

    什么是CDMA軟切換?它與硬切換有什么分別 移動通訊是建立在移動之中的。有了頻率的復用,必然帶來移動中的頻率切換問題,一個網絡質
    發表于 06-15 09:42 ?1288次閱讀

    線程進程有哪些區別

    線程進程區別在于,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個
    發表于 07-20 07:48 ?1969次閱讀
    <b class='flag-5'>線程</b>與<b class='flag-5'>進程</b>有哪些<b class='flag-5'>區別</b>?

    線程進程區別和聯系,線程進程通信方式

    摘要:進程線程都是計算里的兩項執行活動,各有特色和優勢。下面就來介紹線程進程之間的區別聯系以及通信方式。
    發表于 12-08 14:12 ?1.3w次閱讀

    鴻蒙內核源碼之線程環境下的任務切換

    在中斷環境下,從當前線程切換到目標線程,這種方式也稱為硬切換.不由軟件控制的被動式切換.哪些情況下會出現硬
    的頭像 發表于 04-25 16:48 ?1460次閱讀
    鴻蒙內核源碼之<b class='flag-5'>線程</b>環境下的任務<b class='flag-5'>切換</b>

    進程線程分別是什么,它們的區別是什么

    程和線程區別是什么?有什么關系?相信大家對于進程都很熟悉了吧,而線程相對于進程而言,是一個更加接近于執行體的概念,為了讓大家更好的了解
    發表于 03-24 17:26 ?9385次閱讀
    <b class='flag-5'>進程</b>和<b class='flag-5'>線程</b>分別是什么,它們的<b class='flag-5'>區別</b>是什么

    進程線程區別

    每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個
    的頭像 發表于 05-09 11:06 ?6011次閱讀
    <b class='flag-5'>進程</b>和<b class='flag-5'>線程</b>的<b class='flag-5'>區別</b>

    mcu線程進程區別是什么

    MCU線程進程是嵌入式系統中常見的并行執行的概念,它們之間有許多區別,包括線程進程的定義、資源管理、通信機制、執行方式等等。下面將詳細介
    的頭像 發表于 01-04 10:45 ?743次閱讀
    主站蜘蛛池模板: 久久综合伊人 magnet| 2021精品国产综合久久| 性色香蕉AV久久久天天网| 无码AV动漫精品一区二区免费| 三级网址在线播放| 亚洲国产系列一区二区三区| 亚洲午夜AV久久久精品影院色戒| 一手揉着乳头一手模仿抽插视频| 中文字幕天堂久久精品| a免费视频| 果冻传媒色AV国产播放| 亚洲字幕在线观看| 坠落的丝袜美人妻| 午夜亚洲WWW湿好爽| 曰本老头同性xxxxx| 粉嫩AV国产一区二区福利姬| 91麻豆国产精品91久久久| 伊人亚洲综合网色| 国产亚洲免费观看| 少妇的肉体AA片免费观看| 亚洲AV无码乱码在线观看浪潮 | 同时和两老师双飞| 中文字幕在线免费视频| 东热rq大乱交| 第一次处破女高清电影| 少妇高潮久久久久7777| 在线免费视频国产| 国产精品亚洲精品久久国语| 国产成人免费不卡在线观看| 色爱区综合小说| 国产成人精品综合在线| 日韩视频中文在线一区| 国产AV一区二区三区日韩| 日本色呦呦| 国产精品看高国产精品不卡| 久久99视热频国只有精品| 亚洲日韩乱码人人爽人人澡人 | 久久免费看少妇高潮A片2012| 相声flash| 国产精品久久久久久熟妇吹潮软件| 久久青青草原精品国产软件|