1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        進(jìn)程和線程的深入理解

        共 1466字,需瀏覽 3分鐘

         ·

        2021-08-07 10:39


        下面是抽象類比:


        1、單CPU:一臺(tái)單核處理器計(jì)算機(jī) = 一個(gè)車間;

        2、多CPU:一臺(tái)多核處理器計(jì)算機(jī) = 一座工廠;


        1、進(jìn)程:一個(gè)車間 = 一個(gè)進(jìn)程;(即一個(gè)運(yùn)行的程序)

        2、多進(jìn)程:一座工廠可以同時(shí)運(yùn)行多個(gè)車間;


        CPU和進(jìn)程:?jiǎn)蜟PU只能同時(shí)運(yùn)行單個(gè)進(jìn)程,多CPU可以同時(shí)運(yùn)行多個(gè)進(jìn)程。


        1、線程:車間內(nèi)一個(gè)工人 = 一個(gè)線程;

        2、進(jìn)程與線程:一個(gè)進(jìn)程可以包括多個(gè)線程。


        線程間內(nèi)存共享:車間的空間是工人們共享的,比如許多房間是每個(gè)工人都可以進(jìn)出的。一個(gè)進(jìn)程的內(nèi)存空間是共享的,每個(gè)線程都可以使用這些共享內(nèi)存。


        內(nèi)存安全:可是,每個(gè)車間容納大小不同,有的最多只能容納一個(gè)人。車間人滿的時(shí)候,其他人就進(jìn)不去了。


        一個(gè)線程使用某些共享內(nèi)存時(shí),其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。


        互斥鎖:一個(gè)防止他人進(jìn)入的簡(jiǎn)單方法,就是門口加一把鎖。先到的人鎖上門,后到的人看到上鎖,就在門口排隊(duì),等鎖打開(kāi)再進(jìn)去。


        這就叫"互斥鎖"–Mutex,防止兩個(gè)線程同時(shí)讀寫某一塊內(nèi)存區(qū)域。


        信號(hào)量:這時(shí)的解決方法,就是在門口掛n把鑰匙。進(jìn)去的人就取一把鑰匙,出來(lái)時(shí)再把鑰匙掛回原處。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門口排隊(duì)等著了。


        這種做法叫做"信號(hào)量"(Semaphore),用來(lái)保證多個(gè)線程不會(huì)互相沖突。


        鎖和信號(hào)量:不難看出,互斥鎖是信號(hào)量的一種特殊情況(n=1時(shí))。也就是說(shuō),完全可以用后者替代前者。但是,因?yàn)閙utex較為簡(jiǎn)單,且效率高,所以在必須保證資源獨(dú)占的情況下,還是采用這種設(shè)計(jì)。


        操作系統(tǒng)的資源分配與調(diào)度邏輯

        1、以多進(jìn)程形式,允許多個(gè)任務(wù)同時(shí)運(yùn)行;

        2、以多線程形式,允許單個(gè)任務(wù)分成不同的部分運(yùn)行;

        3、提供協(xié)調(diào)機(jī)制,一方面防止進(jìn)程之間和線程之間產(chǎn)生沖突,另一方面允許進(jìn)程之間和線程之間共享資源。


        下面是嚴(yán)謹(jǐn)?shù)慕忉專?/p>


        進(jìn)程

        進(jìn)程是程序的一次執(zhí)行過(guò)程,是一個(gè)動(dòng)態(tài)概念,是程序在執(zhí)行過(guò)程中分配和管理資源的基本單位,每一個(gè)進(jìn)程都有一個(gè)自己的地址空間,至少有 5 種基本狀態(tài),它們是:初始態(tài),執(zhí)行態(tài),等待狀態(tài),就緒狀態(tài),終止?fàn)顟B(tài)。


        線程

        線程是CPU調(diào)度和分派的基本單位,它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。


        進(jìn)程和線程的關(guān)系

        1、線程是進(jìn)程的一部分

        2、一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程


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

        理解它們的差別,我從資源使用的角度出發(fā)。(所謂的資源就是計(jì)算機(jī)里的中央處理器,內(nèi)存,文件,網(wǎng)絡(luò)等等)


        1、根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是任務(wù)調(diào)度和執(zhí)行的基本單位


        2、開(kāi)銷方面:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),進(jìn)程之間切換開(kāi)銷大;線程可以看做輕量級(jí)的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程之間切換的開(kāi)銷小


        3、所處環(huán)境:在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)進(jìn)程(程序);而在同一個(gè)進(jìn)程(程序)中有多個(gè)線程同時(shí)執(zhí)行(通過(guò)CPU調(diào)度,在每個(gè)時(shí)間片中只有一個(gè)線程執(zhí)行)


        4、內(nèi)存分配:系統(tǒng)為每個(gè)進(jìn)程分配不同的內(nèi)存空間;而對(duì)線程而言,除了CPU外,系統(tǒng)不會(huì)為線程分配內(nèi)存(線程所使用的資源來(lái)自其所屬進(jìn)程的資源),線程組之間只能共享資源


        5、包含關(guān)系:線程是進(jìn)程的一部分,所以線程也被稱為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程


        瀏覽 31
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            第四色成人网站 | 兔费看全黄三级 | 哦┅┅快┅┅用力啊┅┅校长 | 美女很黄很黄免费的 | 男男无遮挡啪啪 | 炙热滚烫的液体喷进她体内 | 精品国产一区二区三区四区在线观看 | 三级久久久久久久久高潮 | 国产91在线播放精品91 | AV片在线观看 |