日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程切换与线程切换的区别?

發(fā)布時(shí)間:2024/1/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程切换与线程切换的区别? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

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

?

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

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

總的來說,作為程序員(無論使用什么類型的語言)我們根本就不關(guān)心數(shù)據(jù)以及程序被放在了物理內(nèi)存的哪個(gè)位置上(設(shè)計(jì)實(shí)現(xiàn)操作系統(tǒng)的程序員除外),我們可以簡單的認(rèn)為我們的程序獨(dú)占內(nèi)存,比如在32位系統(tǒng)下我們的進(jìn)程占用的內(nèi)存空間為4G;并且我們可以申請超過物理內(nèi)存大小的空間,比如在只有256MB的系統(tǒ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)系的呢,答案就是頁表,頁表中記錄了虛擬內(nèi)存地址到物理內(nèi)存地址的映射關(guān)系。有了頁表就可以將虛擬地址轉(zhuǎn)換為物理內(nèi)存地址了,這種機(jī)制就是虛擬內(nèi)存。

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

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

?

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

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

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

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

有的同學(xué)可能還是不太明白,為什么虛擬地址空間切換會比較耗時(shí)呢?
這也是面試官緊接會問的第二個(gè)問題。
關(guān)于這個(gè)問題的答案,關(guān)注公眾號“碼農(nóng)的荒島求生”并回復(fù)“地址切換”幾個(gè)字你就能得到答案啦。

最后,有很多同學(xué)問有沒有書單,我也仔細(xì)回想自己認(rèn)真讀過的計(jì)算機(jī)書籍,在這里也給出自認(rèn)為很經(jīng)典的幾本,書單這東西貴精不貴多,我在這里精心挑選了10本 ,不要貪心,如果你真能把這里推薦的 10 本書讀通,可以說你已經(jīng)能超越 90% 的程序員了,供大家參考:程序員必看經(jīng)典書單
?

總結(jié)

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

更多計(jì)算機(jī)內(nèi)功文章,歡迎關(guān)注微信公共賬號:碼農(nóng)的荒島求生

計(jì)算機(jī)內(nèi)功決定程序員職業(yè)生涯高度

總結(jié)

以上是生活随笔為你收集整理的进程切换与线程切换的区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。