溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

從性能,開(kāi)銷(xiāo)對(duì)進(jìn)程 線程 協(xié)程的理解

發(fā)布時(shí)間:2020-07-26 13:22:08 來(lái)源:網(wǎng)絡(luò) 閱讀:1763 作者:龍翔九天dl 欄目:編程語(yǔ)言
本文由以下文章參考整理:
http://www.cnblogs.com/Eva-J
https://www.jb51.net/article/102004.htm

進(jìn)程、線程和協(xié)程的關(guān)系

從性能,開(kāi)銷(xiāo)對(duì)進(jìn)程 線程 協(xié)程的理解從性能,開(kāi)銷(xiāo)對(duì)進(jìn)程 線程 協(xié)程的理解

進(jìn)程、線程和協(xié)程的特點(diǎn)

進(jìn)程:擁有自己獨(dú)立的堆和棧,既不共享堆,也不共享?xiàng)#M(jìn)程由操作系統(tǒng)調(diào)度;
線程:擁有自己獨(dú)立的棧和共享的堆,共享堆,不共享?xiàng)?,?biāo)準(zhǔn)線程由操作系統(tǒng)調(diào)度;
協(xié)程:擁有自己獨(dú)立的棧和共享的堆,共享堆,不共享?xiàng)?,協(xié)程由程序員在協(xié)程的代碼里顯示調(diào)度

# 例,進(jìn)一步講述“線程和協(xié)程”之間的區(qū)別:
假設(shè)有一個(gè)單核的操作系統(tǒng),系統(tǒng)上沒(méi)有其它的程序需要運(yùn)行,現(xiàn)有兩個(gè)線程 A 和 B,A 和 B 在單獨(dú)
運(yùn)行時(shí)都需要10 秒來(lái)完成自己的任務(wù),而且任務(wù)都是運(yùn)算操作,線程 A 和 B 之間沒(méi)有競(jìng)爭(zhēng)和共享數(shù)據(jù)
的問(wèn)題?,F(xiàn)在讓 A 和 B 兩個(gè)線程并行,則操作系統(tǒng)會(huì)不停的在 A 和 B 兩個(gè)線程之間切換,達(dá)到一種
偽并行的效果。

如果操作系統(tǒng)切換的頻率是每秒一次,切換的成本是 0.1 秒(主要是棧切換),則總共需
20 + 19 * 0.1 = 21.9 秒;如果使用協(xié)程的方式,可以先運(yùn)行協(xié)程 A,A 結(jié)束的時(shí)候讓位給協(xié)程 B,
只發(fā)生一次切換,則總共需要 20 + 1 * 0.1 = 20.1 秒。如果操作系統(tǒng)是雙核的,而且線程是標(biāo)準(zhǔn)線程,
那么線程 A 和 B 可以達(dá)到真的并行,則總時(shí)間為 10 秒;而協(xié)程的方式仍然需要 20.1 秒的時(shí)間

線程??臻g大小

1. 線程棧: windows 默認(rèn)1M ,Linux 默認(rèn)8M ,根據(jù)線程實(shí)際需要?jiǎng)討B(tài)擴(kuò)展棧大小
------在windows中------
   $ 若線程需要的線程棧小于默認(rèn)的1M,則按照頁(yè)面文件大小的倍數(shù)開(kāi)辟, 例需要10k 則開(kāi)辟 4k * 3 = 12k
     $ 若大于1M,例 需要1025k, 則按照1M的整數(shù)倍開(kāi)辟??臻g 2M

進(jìn)程,線程切換的性能消耗

 進(jìn)程切換分兩步:

1.切換頁(yè)目錄以使用新的地址空間

2.切換內(nèi)核棧和硬件上下文

對(duì)于linux來(lái)說(shuō),線程和進(jìn)程的最大區(qū)別就在于地址空間,對(duì)于線程切換,第1步是不需要做的,第2是進(jìn)程和線程
切換都要做的。

切換的性能消耗:

1、線程上下文切換和進(jìn)程上下問(wèn)切換一個(gè)最主要的區(qū)別是線程的切換虛擬內(nèi)存空間依然是相同的,但是進(jìn)程切換
是不同的。這兩種上下文切換的處理都是通過(guò)操作系統(tǒng)內(nèi)核來(lái)完成的。內(nèi)核的這種切換過(guò)程伴隨的最顯著的性能
損耗是將寄存器中的內(nèi)容切換出。

2、另外一個(gè)隱藏的損耗是上下文的切換會(huì)擾亂處理器的緩存機(jī)制。簡(jiǎn)單的說(shuō),一旦去切換上下文,處理器中所有
已經(jīng)緩存的內(nèi)存地址一瞬間都作廢了。還有一個(gè)顯著的區(qū)別是當(dāng)你改變虛擬內(nèi)存空間的時(shí)候,處理的頁(yè)表緩沖
(processor's Translation Lookaside Buffer (TLB))或者相當(dāng)?shù)纳耨R東西會(huì)被全部刷新,這將導(dǎo)致內(nèi)存的
訪問(wèn)在一段時(shí)間內(nèi)相當(dāng)?shù)牡托А5窃诰€程的切換中,不會(huì)出現(xiàn)這個(gè)問(wèn)題

未完,待續(xù)~~

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI