chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

進程切換與線程切換有啥區(qū)別

jf_78858299 ? 來源:碼農(nóng)的荒島求生 ? 作者:碼農(nóng)的荒島求生 ? 2023-02-24 14:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

注意這個題目問的是進程切換與線程切換的區(qū)別,不是進程與線程的區(qū)別。當(dāng)然這里的 線程指的是同一個進程中的線程

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

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

虛擬內(nèi)存解放生產(chǎn)力

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

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

而這種假設(shè)實現(xiàn)的背后功臣就是虛擬內(nèi)存。

什么是虛擬內(nèi)存

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

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

現(xiàn)在我們就可以來回答這個面試題了。

進程切換與線程切換的區(qū)別

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

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

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

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

為什么虛擬地址切換很慢

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

總結(jié)

虛擬內(nèi)存是現(xiàn)代操作系統(tǒng)極其重要的一部分,當(dāng)然在這里限于篇幅我們只能簡單介紹,關(guān)于虛擬內(nèi)存的詳細講解見后續(xù)操作系統(tǒng)教程,敬請期待

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4956

    瀏覽量

    73491
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20796
  • 進程
    +關(guān)注

    關(guān)注

    0

    文章

    208

    瀏覽量

    14501
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Linux中進程線程的深度對比

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

    進程線程區(qū)別

    線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體.與進程區(qū)別:(1)地址空間:進程內(nèi)的一個
    發(fā)表于 12-12 09:28

    線程、進程、程序的區(qū)別

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

    進程線程區(qū)別和聯(lián)系介紹

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

    請問UCOSIII中的任務(wù)調(diào)度和任務(wù)切換有什么區(qū)別?

    疑惑:UCOSIII中的任務(wù)調(diào)度和任務(wù)切換有什么區(qū)別?原子哥在PPT里面的解釋是:任務(wù)調(diào)度就是中止當(dāng)前正在運行的任務(wù)轉(zhuǎn)而去執(zhí)行其他的任務(wù)。當(dāng)UCOSIII需要切換到另外一個任務(wù)時,它將保存當(dāng)前任務(wù)
    發(fā)表于 05-25 07:27

    進程線程區(qū)別在哪?

    1、進程線程區(qū)別:1. 線程是程序執(zhí)行的最小單位,而進程是操作系統(tǒng)分配資源的最小單位;2. 一個進程
    發(fā)表于 07-07 06:53

    線程管理之線程切換

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

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

    什么是CDMA軟切換?它與硬切換有什么分別? 移動通訊是建立在移動之中的。有了頻率的復(fù)用,必然帶來移動中的頻率切換問題,一個網(wǎng)絡(luò)質(zhì)量的
    發(fā)表于 06-01 20:27 ?1263次閱讀

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

    什么是CDMA軟切換?它與硬切換有什么分別 移動通訊是建立在移動之中的。有了頻率的復(fù)用,必然帶來移動中的頻率切換問題,一個網(wǎng)絡(luò)質(zhì)
    發(fā)表于 06-15 09:42 ?1482次閱讀

    線程進程有哪些區(qū)別?

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

    線程進程區(qū)別和聯(lián)系,線程進程通信方式

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

    鴻蒙內(nèi)核源碼之線程環(huán)境下的任務(wù)切換

    在中斷環(huán)境下,從當(dāng)前線程切換到目標(biāo)線程,這種方式也稱為硬切換.不由軟件控制的被動式切換.哪些情況下會出現(xiàn)硬
    的頭像 發(fā)表于 04-25 16:48 ?2074次閱讀
    鴻蒙內(nèi)核源碼之<b class='flag-5'>線程</b>環(huán)境下的任務(wù)<b class='flag-5'>切換</b>

    進程線程分別是什么,它們的區(qū)別是什么

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

    進程線程區(qū)別

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

    mcu線程進程區(qū)別是什么

    MCU線程進程是嵌入式系統(tǒng)中常見的并行執(zhí)行的概念,它們之間有許多區(qū)別,包括線程進程的定義、資源管理、通信機制、執(zhí)行方式等等。下面將詳細介
    的頭像 發(fā)表于 01-04 10:45 ?1649次閱讀