RM新时代网站-首页

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

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

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

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

jf_78858299 ? 來(lái)源:碼農(nóng)的荒島求生 ? 作者:碼農(nóng)的荒島求生 ? 2023-02-24 14:16 ? 次閱讀

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

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

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

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

對(duì)于程序員來(lái)說(shuō),我們?cè)?a href="http://hljzzgx.com/v/tag/1315/" target="_blank">編程時(shí)實(shí)際上是不怎么操心內(nèi)存問(wèn)題的,對(duì)于使用JavaPython、JavaScript等動(dòng)態(tài)類型語(yǔ)言的程序員來(lái)說(shuō)更是如此,自動(dòng)內(nèi)存回收機(jī)制的引入使得使用這類語(yǔ)言的程序員幾乎完全不用關(guān)心內(nèi)存問(wèn)題;即使對(duì)于編譯型語(yǔ)言C/C++來(lái)說(shuō),程序員需要關(guān)心的也僅僅是內(nèi)存的申請(qǐng)和釋放。

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

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

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

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

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

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

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

進(jìn)程切換與線程切換的一個(gè)最主要區(qū)別就在于進(jìn)程切換涉及到虛擬地址空間的切換而線程切換則不會(huì)。因?yàn)槊總€(gè)進(jìn)程都有自己的虛擬地址空間,而線程是共享所在進(jìn)程的虛擬地址空間的,因此同一個(gè)進(jìn)程中的線程進(jìn)行線程切換時(shí)不涉及虛擬地址空間的轉(zhuǎn)換。

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

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

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

為什么虛擬地址切換很慢

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

總結(jié)

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

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

    關(guān)注

    30

    文章

    4779

    瀏覽量

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

    關(guān)注

    0

    文章

    504

    瀏覽量

    19675
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    203

    瀏覽量

    13960
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux中進(jìn)程線程的深度對(duì)比

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

    進(jìn)程線程區(qū)別

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

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

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

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

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

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

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

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

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

    線程管理之線程切換

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

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

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

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

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

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

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

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

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

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

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

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

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

    進(jìn)程線程區(qū)別

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

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

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