亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang協(xié)程與線程區(qū)別簡(jiǎn)要介紹

 更新時(shí)間:2022年06月29日 09:30:49   作者:??ysj????  
這篇文章主要介紹了golang協(xié)程與線程區(qū)別簡(jiǎn)要介紹,進(jìn)程是操作系統(tǒng)資源分配的基本單位,是程序運(yùn)行的實(shí)例,線程是操作系統(tǒng)調(diào)度到CPU中執(zhí)行的基本單位

一、進(jìn)程與線程

進(jìn)程是操作系統(tǒng)資源分配的基本單位,是程序運(yùn)行的實(shí)例。例如打開一個(gè)瀏覽器就開啟了一個(gè)進(jìn)程。

線程是操作系統(tǒng)調(diào)度到CPU中執(zhí)行的基本單位。例如在瀏覽器里新建一個(gè)窗口就需要一個(gè)線程來(lái)進(jìn)行處理。

在一般情況下,線程是進(jìn)程的組成部分,一個(gè)進(jìn)程可以包含多個(gè)線程。例如瀏覽器可以新建多個(gè)窗口。

進(jìn)程中的多個(gè)線程并發(fā)執(zhí)行并共享進(jìn)程的內(nèi)存等資源。例如多個(gè)窗口之間可以共享登錄狀態(tài)、cookie等信息。

進(jìn)程之間相對(duì)獨(dú)立,不同進(jìn)程具有不同的內(nèi)存地址空間,系統(tǒng)資源描述符等。例如再新開一個(gè)瀏覽器,就又開啟了一個(gè)進(jìn)程,瀏覽器之間狀態(tài)相互獨(dú)立。

開啟一個(gè)進(jìn)程的開銷比開啟一個(gè)線程大得多,且進(jìn)程具有獨(dú)立的內(nèi)存空間,多進(jìn)程之間的通信通常比較困難。

二、并發(fā)與并行

并發(fā)不等于并行。

并發(fā)并不意味著同一時(shí)刻所有任務(wù)都在執(zhí)行,而是在一個(gè)時(shí)間段內(nèi),所有的任務(wù)都能執(zhí)行完畢。例如在單核CPU上運(yùn)行多線程程序,多線程會(huì)交替搶占CPU時(shí)間片,任意一個(gè)時(shí)刻只能執(zhí)行一個(gè)具體的線程。

在多核CPU上,線程可以分布在多個(gè)CPU核心上運(yùn)行,實(shí)現(xiàn)真正的并行處理。

在多核處理場(chǎng)景中,并發(fā)與并行往往同時(shí)存在,多核心在并行處理多個(gè)線程,單核心中的多個(gè)線程又在交替執(zhí)行。

三、go協(xié)程與線程

線程是系統(tǒng)調(diào)度的基本單位。go協(xié)程由go語(yǔ)言運(yùn)行時(shí)的調(diào)度器進(jìn)行調(diào)度,操作系統(tǒng)內(nèi)核感知不到協(xié)程的存在。

在多核處理場(chǎng)景中,線程是并發(fā)與并行同時(shí)存在的,而go協(xié)程依托于線程,因此多核處理場(chǎng)景下,go協(xié)程也是并發(fā)與并行同時(shí)存在的。因?yàn)間o協(xié)程從屬于某一個(gè)線程,所以即便在單核處理器上某一時(shí)刻運(yùn)行一個(gè)線程,在線程內(nèi)go語(yǔ)言調(diào)度器也會(huì)切換多個(gè)協(xié)程執(zhí)行,這時(shí)協(xié)程是并發(fā)的。在多核心處理器上,如果多個(gè)協(xié)程被分配給了不同的線程,而這些線程同時(shí)被不同的CPU核心所處理,這時(shí)協(xié)程就是并行處理的。

go協(xié)程與線程存在著很多不同之處:

1.調(diào)度方式

線程: 線程是根據(jù)CPU時(shí)間片進(jìn)行搶占式調(diào)度的。操作系統(tǒng)通過中斷信號(hào)(定時(shí)器中斷、I/O設(shè)備中斷等)執(zhí)行線程的上下文切換。當(dāng)發(fā)生線程上下文切換時(shí),需要從操作系統(tǒng)用戶態(tài)轉(zhuǎn)移到內(nèi)核態(tài),并保存狀態(tài)信息;當(dāng)切換到下一個(gè)要執(zhí)行的線程時(shí),需要加載狀態(tài)信息并從內(nèi)核態(tài)轉(zhuǎn)移到操作系統(tǒng)用戶態(tài)。

協(xié)程: 協(xié)程存在于用戶態(tài),由go語(yǔ)言運(yùn)行時(shí)調(diào)度器進(jìn)行調(diào)度。協(xié)程從屬于某一個(gè)線程,多個(gè)協(xié)程可以調(diào)度到一個(gè)線程中,一個(gè)協(xié)程也可能切換到多個(gè)線程中執(zhí)行,因此協(xié)程與線程是多對(duì)多(M:N)的關(guān)系。

2.調(diào)度策略

  • 線程搶占式調(diào)度。操作系統(tǒng)調(diào)度器為了均衡每個(gè)線程的執(zhí)行周期,會(huì)定時(shí)發(fā)出中斷信號(hào)強(qiáng)制執(zhí)行線程上下文切換。
  • 協(xié)程協(xié)作式調(diào)度。一個(gè)協(xié)程處理完自己的任務(wù)后,可以主動(dòng)將執(zhí)行權(quán)限讓渡給其他協(xié)程,不會(huì)被輕易搶占。只有在協(xié)程運(yùn)行了過長(zhǎng)時(shí)間后,go語(yǔ)言調(diào)度器才會(huì)強(qiáng)制搶占其執(zhí)行。

3.上下文切換速度

線程: 線程上下文的切換需要經(jīng)過操作系統(tǒng)用戶態(tài)與內(nèi)核態(tài)的切換,切換速度大約為1~2微秒。

協(xié)程: 協(xié)程屬于用戶態(tài)輕量級(jí)的線程,協(xié)程的切換不需要經(jīng)過用戶態(tài)與內(nèi)核態(tài)的切換,且切換時(shí)只需要保存極少的狀態(tài)值,因此切換速度快數(shù)倍,大約為0.2微秒左右。(大約10倍于線程的切換速度)

4.棧的大小

線程: 線程的棧大小一般是在創(chuàng)建時(shí)指定的,linux及mac上默認(rèn)的棧大小一般為8MB(可以通過ulimit -s查看)。2000個(gè)線程需要消耗16G虛擬內(nèi)存。

協(xié)程: go協(xié)程棧大小默認(rèn)為2KB, 16G虛擬內(nèi)存可以創(chuàng)建800多萬(wàn)個(gè)協(xié)程。在實(shí)踐中,經(jīng)??梢钥吹酱嬖诔汕先f(wàn)的協(xié)程。

四、GMP模型

協(xié)程(G)線程(M)邏輯處理器(P)模型描述了線程與協(xié)程的關(guān)系。在GMP模型中:

G代表go協(xié)程(Goroutine),M代表實(shí)際的線程,P代表邏輯處理器(Process)。go語(yǔ)言為了方便協(xié)程的調(diào)度與緩存,抽象出了邏輯處理器P。

在任一時(shí)刻,一個(gè)邏輯處理器P可能在本地包含多個(gè)協(xié)程G,同時(shí)綁定一個(gè)線程M。需要注意的是,一個(gè)協(xié)程G并不是固定綁定同一個(gè)邏輯處理器P的,可能轉(zhuǎn)移到其他邏輯處理器中。

邏輯處理器P對(duì)應(yīng)的線程M也是不固定的,在某些時(shí)候可能轉(zhuǎn)移到其他P中執(zhí)行。

image.png

到此這篇關(guān)于golang協(xié)程與線程區(qū)別簡(jiǎn)要介紹的文章就介紹到這了,更多相關(guān)golang協(xié)程與線程 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang 使用接口實(shí)現(xiàn)泛型的方法示例

    Golang 使用接口實(shí)現(xiàn)泛型的方法示例

    這篇文章主要介紹了Golang 使用接口實(shí)現(xiàn)泛型的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Go語(yǔ)言interface詳解

    Go語(yǔ)言interface詳解

    這篇文章主要介紹了Go語(yǔ)言interface詳解,本文講解了什么是interface、interface類型、interface值、空interface、interface函數(shù)參數(shù)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • go強(qiáng)制類型轉(zhuǎn)換type(a)以及范圍引起的數(shù)據(jù)差異

    go強(qiáng)制類型轉(zhuǎn)換type(a)以及范圍引起的數(shù)據(jù)差異

    這篇文章主要為大家介紹了go強(qiáng)制類型轉(zhuǎn)換type(a)以及范圍引起的數(shù)據(jù)差異,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 一文詳解golang中的gmp模型

    一文詳解golang中的gmp模型

    這篇文章主要介紹了golang中的gmp模型的誕生、概念及調(diào)度講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Golang并發(fā)利器sync.Once的用法詳解

    Golang并發(fā)利器sync.Once的用法詳解

    在某些場(chǎng)景下,我們需要初始化一些資源。有時(shí)會(huì)采用延遲初始化的方式,在真正需要資源的時(shí)候才進(jìn)行初始化。在這種情況下,Go語(yǔ)言中的sync.Once提供一個(gè)優(yōu)雅且并發(fā)安全的解決方案,本文將對(duì)其進(jìn)行詳細(xì)介紹
    2023-04-04
  • Go語(yǔ)言實(shí)現(xiàn)登錄驗(yàn)證代碼案例

    Go語(yǔ)言實(shí)現(xiàn)登錄驗(yàn)證代碼案例

    這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)登錄驗(yàn)證代碼案例,代碼和圖文講解的很清晰,有感興趣的可以學(xué)習(xí)下
    2021-03-03
  • Go語(yǔ)言中如何確保Cookie數(shù)據(jù)的安全傳輸

    Go語(yǔ)言中如何確保Cookie數(shù)據(jù)的安全傳輸

    這篇文章主要介紹了Go語(yǔ)言中如何確保Cookie數(shù)據(jù)的安全傳輸,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 一文帶你輕松學(xué)會(huì)Go語(yǔ)言動(dòng)態(tài)調(diào)用函數(shù)

    一文帶你輕松學(xué)會(huì)Go語(yǔ)言動(dòng)態(tài)調(diào)用函數(shù)

    這篇文章主要是帶大家學(xué)習(xí)一下Go語(yǔ)言是如何動(dòng)態(tài)調(diào)用函數(shù)的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考下
    2022-11-11
  • 解決Go語(yǔ)言中高頻次和高并發(fā)下隨機(jī)數(shù)重復(fù)的問題

    解決Go語(yǔ)言中高頻次和高并發(fā)下隨機(jī)數(shù)重復(fù)的問題

    在Golang中,獲取隨機(jī)數(shù)的方法一般會(huì)介紹有兩種,一種是基于math/rand的偽隨機(jī),一種是基于crypto/rand的真隨機(jī),math/rand由于其偽隨機(jī)的原理,經(jīng)常會(huì)出現(xiàn)重復(fù)的隨機(jī)數(shù),導(dǎo)致在需要進(jìn)行隨機(jī)的業(yè)務(wù)出現(xiàn)較多的重復(fù)問題,所以本文給大家介紹了較好的解放方案
    2023-12-12
  • vscode 通過Go:Install/Update Tools命令安裝失敗的問題解決

    vscode 通過Go:Install/Update Tools命令安裝失敗的問題解決

    本文介紹了在VSCode開發(fā)環(huán)境中通過Go:Install/UpdateTools命令安裝工具時(shí)遇到網(wǎng)絡(luò)問題的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12

最新評(píng)論