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

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

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

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

一文深入淺出了解進(jìn)程和線程

如意 ? 來(lái)源:CSDN ? 作者:Peter盼 ? 2020-06-20 10:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

No.1

執(zhí)行流

這里先說(shuō)一說(shuō)執(zhí)行流,有助于線程的理解。

程序計(jì)數(shù)器中的下一條指令地址組成的軌跡稱(chēng)為程序的執(zhí)行流。執(zhí)行流是邏輯上獨(dú)立的指令區(qū)域,是人為給處理器安排的處理單元。指令指導(dǎo)處理器的執(zhí)行方向,從處理器的角度看,執(zhí)行的指令形成一條路徑,稱(chēng)為執(zhí)行流。執(zhí)行流可大可小,可以是整個(gè)程序文件,也可以是一個(gè)函數(shù)。

一個(gè)代碼段想要突然去執(zhí)行另外一個(gè)代碼段的指令,比如call指令或者因中斷去執(zhí)行中斷處理程序,只要先將調(diào)用前或中斷前的上下文環(huán)境保存好就可以在iret或中斷返回后繼續(xù)執(zhí)行原代碼段的指令。所以說(shuō)當(dāng)我們?yōu)槿魏我欢沃噶钐峁┧枰纳舷挛沫h(huán)境,那么這段指令就可以在獨(dú)立的上CPU運(yùn)行,也就是說(shuō)這段指令成為了一個(gè)單獨(dú)的執(zhí)行流。這里說(shuō)的上下文環(huán)境指的是指令所使用的寄存器映像、棧、內(nèi)存等資源??梢元?dú)立在CPU上運(yùn)行的代碼段,哪怕被中斷也可以返回繼續(xù)執(zhí)行,因?yàn)樗枰馁Y源得到了維護(hù)。

在任務(wù)調(diào)度器的眼里,執(zhí)行流是調(diào)度單元,即處理器上運(yùn)行的每個(gè)任務(wù)都是調(diào)度器分配的執(zhí)行流。換句話(huà)說(shuō),實(shí)現(xiàn)任務(wù)調(diào)度,就是換不同的執(zhí)行流在CPU上運(yùn)行。我們要說(shuō)的線程就是一個(gè)執(zhí)行流。進(jìn)程和線程有很多相似的地方,當(dāng)一個(gè)進(jìn)程中只有一個(gè)線程時(shí),我們稱(chēng)之為單線程進(jìn)程,它比線程就只多了處理的資源。我們可以認(rèn)為線程和進(jìn)程都是由執(zhí)行流實(shí)現(xiàn)的。

No.2

線程

回想創(chuàng)建線程的過(guò)程,我們先聲明并定義一個(gè)函數(shù)作為線程的處理函數(shù),該函數(shù)的返回值為void*參數(shù)也是void*,然后調(diào)用pthread_create()函數(shù)創(chuàng)建線程。可以理解為線程就是去執(zhí)行一個(gè)函數(shù),但線程和普通的函數(shù)的區(qū)別在于線程擁有獨(dú)立的上下文環(huán)境成為了獨(dú)立的執(zhí)行流,也就成為了獨(dú)立的調(diào)度單元,可以獨(dú)立在CPU上運(yùn)行。在一般的函數(shù)調(diào)用中,函數(shù)隨著程序的執(zhí)行流被順便執(zhí)行。給每個(gè)執(zhí)行流分配的時(shí)間是有限的,一個(gè)普通函數(shù)要等到該它運(yùn)行的時(shí)候才可以在CPU上運(yùn)行,前面有再多的函數(shù)它都要等著,還沒(méi)有到它運(yùn)行的時(shí)候可能該執(zhí)行流就被換下CPU了。而線程則因?yàn)槌闪藛为?dú)的執(zhí)行流,可以獨(dú)自享用分配的CPU時(shí)間,這才是線程真正優(yōu)勢(shì)的地方。

只有理解了線程的優(yōu)勢(shì),在使用線程的時(shí)候才能恰到好處,現(xiàn)在再回想自己寫(xiě)的多線程程序是否真的需要使用多線程。將要處理的單獨(dú)一類(lèi)事件放在一個(gè)執(zhí)行流等待就好了,沒(méi)有必要寫(xiě)成多線程,在調(diào)度器調(diào)度的時(shí)候反而會(huì)花費(fèi)額外的時(shí)間。

線程是一套機(jī)制,給一段代碼塊構(gòu)建它依賴(lài)的上下文環(huán)境,從而讓代碼塊稱(chēng)為單獨(dú)的執(zhí)行流,也就成為了調(diào)度器的調(diào)度單元可以直接在CPU運(yùn)行。

線程中調(diào)用的函數(shù)讓所運(yùn)行的函數(shù)以調(diào)度單元的身份獨(dú)立運(yùn)行在CPU上,當(dāng)函數(shù)運(yùn)行時(shí),可以讓程序中多個(gè)函數(shù)(執(zhí)行流)以偽并行的方式運(yùn)行,為程序提速。

No.3

線程與進(jìn)程

進(jìn)程是運(yùn)行中的程序。對(duì)于處理器來(lái)說(shuō),進(jìn)程是執(zhí)行流的集合,至少包含一個(gè)執(zhí)行流,執(zhí)行流之間相互獨(dú)立,但它們共享進(jìn)程的所有資源。

Linux早期版本(Linux 0.11),其中并沒(méi)有操作系統(tǒng)書(shū)籍說(shuō)到的有關(guān)線程的代碼,比如thread_info結(jié)構(gòu)體和創(chuàng)建線程的函數(shù)。那時(shí)CPU調(diào)度的單元是進(jìn)程,進(jìn)程就是各個(gè)執(zhí)行流(調(diào)度單元),這里想說(shuō)明的是進(jìn)程和線程都是概念上的。在線程出現(xiàn)之前依然能夠?qū)崿F(xiàn)并發(fā)處理,線程在進(jìn)程的基礎(chǔ)上實(shí)現(xiàn)了二次并發(fā),目的是提高效率。進(jìn)程與線程的區(qū)別,一個(gè)是上面所說(shuō)的進(jìn)程中可以有多個(gè)線程。第二個(gè)就是線程沒(méi)有自己的資源,沒(méi)有自己的地址空間,必須要依附于進(jìn)程的地址空間中才可以運(yùn)行。

No.4

進(jìn)程線程的狀態(tài)

上面說(shuō)了進(jìn)程和線程是概念上的,真正實(shí)現(xiàn)時(shí)都是人為創(chuàng)造的代碼塊,因此執(zhí)行流的狀態(tài)也是人為劃分的。比如因?yàn)橛械木€程在讀寫(xiě)磁盤(pán)時(shí)需要等待,那么就需要該線程為阻塞狀態(tài),當(dāng)線程可以上CPU運(yùn)行時(shí)該線程就叫就緒態(tài),在CPU運(yùn)行時(shí)就稱(chēng)為運(yùn)行態(tài)。在有其他需求的時(shí)候可能還會(huì)由別的狀態(tài)出現(xiàn),只要合理就可以,說(shuō)明狀態(tài)都是因?yàn)槟撤N需求而出現(xiàn)的,然后當(dāng)狀態(tài)滿(mǎn)足后就說(shuō)明線程符合了某些條件,比如線程由阻塞態(tài)變?yōu)榫途w態(tài)說(shuō)明現(xiàn)在線程可能正在等待的資源已經(jīng)等到了可以上CPU運(yùn)行了。

No.5

程序控制塊PCB

PCB(Process Control Block)是進(jìn)程的身份證,記錄了與進(jìn)程相關(guān)的所有信息,比如進(jìn)程狀態(tài)、PID、優(yōu)先級(jí)等。每個(gè)進(jìn)程都有自己的一個(gè)PCB。所有PCB放到一張表格中維護(hù),就是進(jìn)程表,調(diào)度器根據(jù)這張表選擇上處理器運(yùn)行的進(jìn)程。PCB的內(nèi)容取決于操作系統(tǒng)功能的復(fù)雜程度。PCB可以確定處理器要執(zhí)行的任務(wù),記錄程序運(yùn)行時(shí)所需要的數(shù)據(jù)資源、給任務(wù)分配的時(shí)間大小、上下文信息的存儲(chǔ)地址、進(jìn)程狀態(tài)、進(jìn)程地址空間等信息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    0

    文章

    510

    瀏覽量

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

    關(guān)注

    0

    文章

    211

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    瑞芯微(EASY EAI)RV1126B 系統(tǒng)操作-線進(jìn)程操作

    1.多線程介紹進(jìn)程線程概念是操作系統(tǒng)與普通單片機(jī)最大的區(qū)別,多任務(wù)系統(tǒng)可以將系統(tǒng)資源分塊,使得不同任務(wù)相互獨(dú)立運(yùn)行,且在宏觀層面觀察,多個(gè)應(yīng)用像同時(shí)間運(yùn)行
    的頭像 發(fā)表于 04-13 14:14 ?180次閱讀
    瑞芯微(EASY EAI)RV1126B 系統(tǒng)操作-線<b class='flag-5'>進(jìn)程</b>操作

    飛凌嵌入式ElfBoard-進(jìn)程進(jìn)程狀態(tài)

    ,會(huì)列出進(jìn)程當(dāng)前的狀態(tài)代碼;也可以通過(guò)/proc/PID/status查看State行了解到單個(gè)進(jìn)程的狀態(tài),例如:cat /proc/1/statusLinux 是個(gè)多用戶(hù)多任務(wù)的操
    發(fā)表于 03-27 09:12

    長(zhǎng)線距離驅(qū)動(dòng)對(duì)變頻器和電機(jī)的影響及對(duì)策

    本文擬對(duì)長(zhǎng)電機(jī)電纜對(duì)變頻驅(qū)動(dòng)系統(tǒng)造成的損害作深入淺出的探討,并提出指導(dǎo)性的建議。
    發(fā)表于 03-25 15:22 ?0次下載

    技術(shù)干貨 | 鋰電池保護(hù)芯片工作原理詳解:四大機(jī)制守護(hù)電池安全

    鋰電池為何“嬌貴”?保護(hù)芯片如何24小時(shí)防止過(guò)充、過(guò)放和短路?本文深入淺出解析鋰電池保護(hù)IC的四大核心職責(zé)與技術(shù)原理。
    的頭像 發(fā)表于 03-20 10:54 ?607次閱讀
    技術(shù)干貨 | 鋰電池保護(hù)芯片工作原理詳解:四大機(jī)制守護(hù)電池安全

    深入淺出:SN65LVDSxxx高速差分線驅(qū)動(dòng)與接收器解析

    深入淺出:SN65LVDSxxx高速差分線驅(qū)動(dòng)與接收器解析 在高速數(shù)據(jù)傳輸?shù)念I(lǐng)域中,低電壓差分信號(hào)(LVDS)技術(shù)以其低功耗、高速度和抗干擾能力強(qiáng)等優(yōu)勢(shì),成為了眾多電子工程師的首選。德州儀器(TI
    的頭像 發(fā)表于 01-15 15:30 ?369次閱讀

    進(jìn)程通信

    空間般都是獨(dú)立的,要想讓兩個(gè)用戶(hù)進(jìn)程共享空間必須通過(guò)特殊的系統(tǒng)調(diào)用實(shí)現(xiàn),而進(jìn)程內(nèi)的線程是自然共享進(jìn)程空間的。   消息傳遞   
    發(fā)表于 01-15 06:16

    深入Linux內(nèi)核:進(jìn)程調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    在Linux系統(tǒng)中,進(jìn)程調(diào)度就像位精明的“CPU管理員”——它決定著哪個(gè)進(jìn)程能優(yōu)先使用CPU,多久切換進(jìn)程,如何平衡系統(tǒng)響應(yīng)速度與資源
    的頭像 發(fā)表于 12-24 07:05 ?4608次閱讀
    <b class='flag-5'>深入</b>Linux內(nèi)核:<b class='flag-5'>進(jìn)程</b>調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    解析Linux的進(jìn)程線程和協(xié)程

    和系統(tǒng)資源。線程的引入使得多核處理器得以充分利用,因?yàn)槎?b class='flag-5'>線程程序可以更有效地分配和管理多核心的計(jì)算資源。 線程的特點(diǎn)包括: (1)共享性:線程之間共享同
    發(fā)表于 12-22 11:00

    Linux多線程對(duì)比單線程的優(yōu)勢(shì)

    在Linux系統(tǒng)中,線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。線程被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)行單位。個(gè)
    發(fā)表于 12-01 06:11

    飛凌嵌入式ElfBoard-文件I/O的了解探究之競(jìng)爭(zhēng)冒險(xiǎn)

    競(jìng)爭(zhēng)冒險(xiǎn)(Race Condition)指的是在多線程或多進(jìn)程環(huán)境中,多個(gè)線程進(jìn)程對(duì)共享資源進(jìn)行訪問(wèn)和修改時(shí)可能導(dǎo)致的不確定性結(jié)果或錯(cuò)誤行為。競(jìng)爭(zhēng)冒險(xiǎn)通常發(fā)生在多個(gè)
    發(fā)表于 11-26 15:38

    ALM(應(yīng)用生命周期管理)解析:了解其概念、關(guān)鍵階段及Perforce ALM工具推薦

    什么是ALM(應(yīng)用生命周期管理)?它遠(yuǎn)不止是SDLC!了解其概念、關(guān)鍵階段以及如何借助Perforce ALM這類(lèi)工具,實(shí)現(xiàn)端到端的可追溯性、加速發(fā)布并保障合規(guī)性。
    的頭像 發(fā)表于 09-19 11:03 ?2174次閱讀
    ALM(應(yīng)用生命周期管理)解析:<b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>其概念、關(guān)鍵階段及Perforce ALM工具推薦

    【HZ-T536開(kāi)發(fā)板免費(fèi)體驗(yàn)】—— linux創(chuàng)建線程

    線程進(jìn)程 個(gè)進(jìn)程指的是個(gè)正在執(zhí)行的應(yīng)用程序,而線程的功能是執(zhí)行應(yīng)用程序中的某個(gè)具體任務(wù)。
    發(fā)表于 09-01 21:31

    了解電壓諧波

    我們經(jīng)常會(huì)聽(tīng)到諧波,到底什么是諧波,怎么定義的?為什么要關(guān)注諧波?什么時(shí)候關(guān)注諧波?諧波如何計(jì)算或標(biāo)準(zhǔn)規(guī)定的諧波的算法是怎樣的?GB關(guān)于電壓諧波又是如何評(píng)估的?帶著諸多的問(wèn)題,我們一起來(lái)了解。
    的頭像 發(fā)表于 06-28 17:23 ?5301次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>電壓諧波

    門(mén)老師教你快速看懂電子電路圖

    本文從最基本的電容電阻開(kāi)講,包含模電數(shù)電,以及部分電氣知識(shí)點(diǎn),深入淺出。 資料介紹: 全文共分7課,以老師授課和師生交流的形式系統(tǒng)地介紹了電子電路識(shí)圖方面的基本知識(shí)和技能,包括電路圖的基本概念和要素
    發(fā)表于 05-16 15:17

    程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)

    的地址)出發(fā),采用推導(dǎo)的方式,深入淺出的分析了廣大C程序員學(xué)習(xí)和開(kāi)發(fā)中遇到的難點(diǎn)。 2. 從方法論的高度對(duì)C語(yǔ)言在數(shù)據(jù)結(jié)構(gòu)和算法方面的應(yīng)用進(jìn)行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開(kāi)發(fā)
    發(fā)表于 05-13 16:45