色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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ù)器中的下一條指令地址組成的軌跡稱為程序的執(zhí)行流。執(zhí)行流是邏輯上獨(dú)立的指令區(qū)域,是人為給處理器安排的處理單元。指令指導(dǎo)處理器的執(zhí)行方向,從處理器的角度看,執(zhí)行的指令形成一條路徑,稱為執(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í)行流。換句話說(shuō),實(shí)現(xiàn)任務(wù)調(diào)度,就是換不同的執(zhí)行流在CPU上運(yùn)行。我們要說(shuō)的線程就是一個(gè)執(zhí)行流。進(jìn)程和線程有很多相似的地方,當(dāng)一個(gè)進(jìn)程中只有一個(gè)線程時(shí),我們稱之為單線程進(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ú)一類事件放在一個(gè)執(zhí)行流等待就好了,沒(méi)有必要寫(xiě)成多線程,在調(diào)度器調(diào)度的時(shí)候反而會(huì)花費(fèi)額外的時(shí)間。

線程是一套機(jī)制,給一段代碼塊構(gòu)建它依賴的上下文環(huán)境,從而讓代碼塊稱為單獨(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í)就稱為運(yùn)行態(tài)。在有其他需求的時(shí)候可能還會(huì)由別的狀態(tài)出現(xiàn),只要合理就可以,說(shuō)明狀態(tài)都是因?yàn)槟撤N需求而出現(xiàn)的,然后當(dāng)狀態(tài)滿足后就說(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

    文章

    505

    瀏覽量

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

    關(guān)注

    0

    文章

    204

    瀏覽量

    13973
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入解析Linux程序與進(jìn)程

    什么是程序 組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令,用于指導(dǎo)計(jì)算機(jī)執(zhí)行特定任務(wù)或解決特定問(wèn)題。程序通常由代碼、數(shù)據(jù)和資源文件組成,涉及語(yǔ)法、算法和數(shù)據(jù)結(jié)構(gòu)。為二進(jìn)制文件 什么是進(jìn)程個(gè)具有獨(dú)立功能的程序
    的頭像 發(fā)表于 12-18 11:01 ?125次閱讀
    <b class='flag-5'>深入</b>解析Linux程序與<b class='flag-5'>進(jìn)程</b>

    深入淺出RISC-V調(diào)試

    、JTAG簡(jiǎn)介 目前RISC-V官方支持的調(diào)試方式是JTAG(Joint Test Action Group),而ARM支持的調(diào)試方式有JTAG和SWD(Serial Wire Debug)這兩種
    發(fā)表于 11-28 22:00

    socket 多線程編程實(shí)現(xiàn)方法

    是指在同個(gè)進(jìn)程中運(yùn)行多個(gè)線程,每個(gè)線程可以獨(dú)立執(zhí)行任務(wù)。線程共享進(jìn)程的資源,如內(nèi)存空間和文件句
    的頭像 發(fā)表于 11-12 14:16 ?430次閱讀

    搞懂Linux進(jìn)程的睡眠和喚醒

    。通過(guò)PPID,可以追蹤進(jìn)程的來(lái)源,并了解進(jìn)程之間的關(guān)系。 在PCB中記錄的進(jìn)程狀態(tài),不過(guò)是些整數(shù),這個(gè)整數(shù)是多少就代表
    發(fā)表于 11-04 15:15

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

    Python作為種高級(jí)編程語(yǔ)言,提供了多種并發(fā)編程的方式,其中多線程與多進(jìn)程是最常見(jiàn)的兩種方式之。在本文中,我們將探討Python中多線程
    的頭像 發(fā)表于 10-23 11:48 ?455次閱讀
    Python中多<b class='flag-5'>線程</b>和多<b class='flag-5'>進(jìn)程</b>的區(qū)別

    CPU線程和程序線程的區(qū)別

    CPU的線程與程序的線程在概念、作用、實(shí)現(xiàn)方式以及性能影響等方面存在顯著差異。以下是對(duì)兩者區(qū)別的詳細(xì)闡述,旨在深入探討這技術(shù)話題。
    的頭像 發(fā)表于 09-02 11:18 ?1116次閱讀

    深入淺出系列之代碼可讀性

    原創(chuàng)聲明:該文章是個(gè)人在項(xiàng)目中親歷后的經(jīng)驗(yàn)總結(jié)和分享,如有搬運(yùn)需求請(qǐng)注明出處。 這是“深入淺出系列”文章的第篇,主要記錄和分享程序設(shè)計(jì)的些思想和方法論,如果讀者覺(jué)得所有受用,還請(qǐng)“
    的頭像 發(fā)表于 08-09 16:00 ?285次閱讀

    掌握Python多線程

    使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理。
    的頭像 發(fā)表于 08-05 15:46 ?902次閱讀

    深入淺出談TDR阻抗測(cè)試

    、脈寬、時(shí)序、抖動(dòng)或噪聲內(nèi)容的任何事物都會(huì)影響整個(gè)系統(tǒng)的性能和可靠性。為保證信號(hào)完整性,必須了解和控制信號(hào)經(jīng)過(guò)的傳輸環(huán)境的阻抗。阻抗不匹配和不連續(xù)會(huì)導(dǎo)致反射,增加系
    的頭像 發(fā)表于 06-06 08:28 ?6369次閱讀
    <b class='flag-5'>深入淺出</b>談TDR阻抗測(cè)試

    句話讓你理解線程進(jìn)程

    今天給大家分享一下線程進(jìn)程,主要包含以下幾部分內(nèi)容:一句話說(shuō)明線程進(jìn)程操作系統(tǒng)為什么需要進(jìn)程為什么要引入
    的頭像 發(fā)表于 06-04 08:04 ?1280次閱讀
    <b class='flag-5'>一</b>句話讓你理解<b class='flag-5'>線程</b>和<b class='flag-5'>進(jìn)程</b>

    怎么理解負(fù)頻率呢?射頻人眼中的負(fù)頻率

    說(shuō)實(shí)話,我對(duì)負(fù)頻率這個(gè)概念,也是有點(diǎn)凌亂。不過(guò),最近不是正在看“深入淺出通信原理”嘛,看了些相關(guān)概念。
    的頭像 發(fā)表于 03-05 16:10 ?3438次閱讀
    怎么理解負(fù)頻率呢?射頻人眼中的負(fù)頻率

    pcb應(yīng)變測(cè)試有多重要?了解

    pcb應(yīng)變測(cè)試有多重要?了解
    的頭像 發(fā)表于 02-24 16:26 ?1159次閱讀

    RTThread中main線程有個(gè)循環(huán),如果main線程異常退出了,有什么辦法可以監(jiān)測(cè)到?

    RTThread中main線程有個(gè)循環(huán),如果main線程異常退出了,有什么辦法可以監(jiān)測(cè)到?
    發(fā)表于 02-22 08:15

    線程是什么的基本單位 進(jìn)程線程的本質(zhì)區(qū)別

    線程是操作系統(tǒng)中處理器調(diào)度的基本單位,它代表著獨(dú)立的執(zhí)行流。在個(gè)進(jìn)程中,可以包含多個(gè)線程,這些線程共享相同的
    的頭像 發(fā)表于 02-02 16:30 ?987次閱讀

    深入淺出了解高邊驅(qū)動(dòng)在汽車應(yīng)用中的挑戰(zhàn)

    隨著汽車電子技術(shù)發(fā)展,電動(dòng)化,輕量化與智能化需求帶動(dòng)了車規(guī)級(jí)高邊驅(qū)動(dòng)(High-side Driver, HSD)在車身負(fù)載驅(qū)動(dòng)中的大規(guī)模應(yīng)用。
    的頭像 發(fā)表于 01-23 10:05 ?5479次閱讀
    <b class='flag-5'>深入淺出了解</b>高邊驅(qū)動(dòng)在汽車應(yīng)用中的挑戰(zhàn)
    主站蜘蛛池模板: beeg日本老师按摩 | 暖暖 日本 视频 在线观看免费 | 我的美女房东未删减版免费观看 | 亚洲 色 欧美 爱 视频 日韩 | 国产精亚洲视频综合区 | 伊人久久大香线蕉综合亚洲 | 国产高清砖码区 | 久久精品国产亚洲AV未满十八 | 自拍视频亚洲综合在线精品 | 夜色爽爽爽久久精品日韩 | 国精产品一区一区三区有限在线 | 亚洲一区乱码电影在线 | 免费99精品国产自在现线 | 胸太大被男同桌吃好爽 | 日本一卡二卡三卡四卡无卡免费播放 | 一一本之道高清视频在线观看中文字幕 | 动漫美女被h动态图 | 国内精品久久人妻无码HD浪潮 | 嗯啊插的好深啊使劲抽视频 | 美国兽皇zoo在线播放 | 精品视频在线观看视频免费视频 | 两个奶被男人揉了一个晚上 | 护士被老头边摸边吃奶的视频 | 4480yy午夜私人影院 | 丁香成人网址 | 韩国免费啪啪漫画无遮拦健身教练 | 亚洲 日韩 欧美 另类 蜜桃 | 国产亚洲精品97在线视频一 | 日韩一区二区在线免费观看 | 中文字幕久久熟女人妻AV免费 | 国产AV国片精品无套内谢无码 | 日韩精品亚洲专区在线电影不卡 | 特大黑人娇小亚洲女mp4 | 亚洲色欲H网在线观看 | 亚洲免费一区二区 | 亚洲精品123区在线观看 | 国产又黄又粗又爽又色的视频软件 | 高h乱一受多攻男男 | 久久国产加勒比精品无码 | 97在线播放| 国产三级在线免费观看 |