欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語(yǔ)言的線程 go 線程 協(xié)程

Golang 線程和協(xié)程的區(qū)別

線程:

創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、網(wǎng)站制作、淅川網(wǎng)絡(luò)推廣、微信小程序、淅川網(wǎng)絡(luò)營(yíng)銷(xiāo)、淅川企業(yè)策劃、淅川品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供淅川建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:chinadenli.net

多線程是為了解決CPU利用率的問(wèn)題,線程則是為了減少上下文切換時(shí)的開(kāi)銷(xiāo),進(jìn)程和線程在Linux中沒(méi)有本質(zhì)區(qū)別,最大的不同就是進(jìn)程有自己獨(dú)立的內(nèi)存空間,而線程是共享內(nèi)存空間。

在進(jìn)程切換時(shí)需要轉(zhuǎn)換內(nèi)存地址空間,而線程切換沒(méi)有這個(gè)動(dòng)作,所以線程切換比進(jìn)程切換代價(jià)要小得多。

協(xié)程:

想要簡(jiǎn)單,又要性能高,協(xié)程就可以達(dá)到我們的目的,它是用戶(hù)視角的一種抽象,操作系統(tǒng)并沒(méi)有這個(gè)概念,主要思想是在用戶(hù)態(tài)實(shí)現(xiàn)調(diào)度算法,用少量線程完成大量任務(wù)的調(diào)度。

Goroutine是GO語(yǔ)言實(shí)現(xiàn)的協(xié)程,其特點(diǎn)是在語(yǔ)言層面就支持,使用起來(lái)十分方便,它的核心是MPG調(diào)度模型:M即內(nèi)核線程;P即處理器,用來(lái)執(zhí)行Goroutine,它維護(hù)了本地可運(yùn)行隊(duì)列;G即Goroutine,代碼和數(shù)據(jù)結(jié)構(gòu);S及調(diào)度器,維護(hù)M和P的信息。

golang多線程簡(jiǎn)單邏輯

實(shí)現(xiàn)指定個(gè)核心最大化使用,比如核心總數(shù)減一。

必要的庫(kù)。

要使用的cpu數(shù)量,建議不全使用。

建立管道。

聲明使用的cpu數(shù)。

建立互斥關(guān)系,本例中主要為了實(shí)現(xiàn)所有線程執(zhí)行完后再執(zhí)行后續(xù)程序。

創(chuàng)建cpu數(shù)減1個(gè)線程

后面每個(gè)任務(wù)結(jié)束時(shí)要done一個(gè)wg,這里根據(jù)具體情況加,是循環(huán)就在每個(gè)循環(huán)里加,保證后面能全部done即可

沒(méi)有緩沖的、阻塞式的往管道傳遞字符串。

Wait是等所有線程都執(zhí)行完,即增加的數(shù)字被全done掉。

關(guān)閉管道。

假設(shè)已有的函數(shù)是ReadLogs,在它的基礎(chǔ)上加個(gè)Wg加函數(shù)名的新函數(shù),我覺(jué)得這種方式不改變?cè)械模容^舒服。

大意是:循環(huán)從管道讀取字符串,讀不到了就跳出循環(huán)。

每個(gè)ReadLogs()之后加一個(gè)wg.Done(),相當(dāng)于計(jì)數(shù)減一。

ReadLogs()就是要執(zhí)行的任務(wù),不再解釋。

就是開(kāi)指定個(gè)線程。

管道阻塞傳值。

wg同步。

WgReadLogs循環(huán)接收。

go語(yǔ)言是單線程嗎

是。go語(yǔ)言屬于c語(yǔ)言軟件中的編程語(yǔ)言,該編程語(yǔ)言是單線程的。c語(yǔ)言是一種通用程序設(shè)計(jì)語(yǔ)言類(lèi)的程序軟件。

golang的線程模型——GMP模型

內(nèi)核線程(Kernel-Level Thread ,KLT)

輕量級(jí)進(jìn)程(Light Weight Process,LWP):輕量級(jí)進(jìn)程就是我們通常意義上所講的線程,由于每個(gè)輕量級(jí)進(jìn)程都由一個(gè)內(nèi)核線程支持,因此只有先支持內(nèi)核線程,才能有輕量級(jí)進(jìn)程

用戶(hù)線程與系統(tǒng)線程一一對(duì)應(yīng),用戶(hù)線程執(zhí)行如lo操作的系統(tǒng)調(diào)用時(shí),來(lái)回切換操作開(kāi)銷(xiāo)相對(duì)比較大

多個(gè)用戶(hù)線程對(duì)應(yīng)一個(gè)內(nèi)核線程,當(dāng)內(nèi)核線程對(duì)應(yīng)的一個(gè)用戶(hù)線程被阻塞掛起時(shí)候,其他用戶(hù)線程也阻塞不能執(zhí)行了。

多對(duì)多模型是可以充分利用多核CPU提升運(yùn)行效能的

go線程模型包含三個(gè)概念:內(nèi)核線程(M),goroutine(G),G的上下文環(huán)境(P);

GMP模型是goalng特有的。

P與M一般是一一對(duì)應(yīng)的。P(上下文)管理著一組G(goroutine)掛載在M(內(nèi)核線程)上運(yùn)行,圖中左邊藍(lán)色為正在執(zhí)行狀態(tài)的goroutine,右邊為待執(zhí)行狀態(tài)的goroutiine隊(duì)列。P的數(shù)量由環(huán)境變量GOMAXPROCS的值或程序運(yùn)行runtime.GOMAXPROCS()進(jìn)行設(shè)置。

當(dāng)一個(gè)os線程在執(zhí)行M1一個(gè)G1發(fā)生阻塞時(shí),調(diào)度器讓M1拋棄P,等待G1返回,然后另起一個(gè)M2接收P來(lái)執(zhí)行剩下的goroutine隊(duì)列(G2、G3...),這是golang調(diào)度器厲害的地方,可以保證有足夠的線程來(lái)運(yùn)行剩下所有的goroutine。

當(dāng)G1結(jié)束后,M1會(huì)重新拿回P來(lái)完成,如果拿不到就丟到全局runqueue中,然后自己放到線程池或轉(zhuǎn)入休眠狀態(tài)??臻e的上下文P會(huì)周期性的檢查全局runqueue上的goroutine,并且執(zhí)行它。

另一種情況就是當(dāng)有些P1太閑而其他P2很忙碌的時(shí)候,會(huì)從其他上下文P2拿一些G來(lái)執(zhí)行。

詳細(xì)可以翻看下方第一個(gè)參考鏈接,寫(xiě)得真好。

最后用大佬的總結(jié)來(lái)做最后的收尾————

Go語(yǔ)言運(yùn)行時(shí),通過(guò)核心元素G,M,P 和 自己的調(diào)度器,實(shí)現(xiàn)了自己的并發(fā)線程模型。調(diào)度器通過(guò)對(duì)G,M,P的調(diào)度實(shí)現(xiàn)了兩級(jí)線程模型中操作系統(tǒng)內(nèi)核之外的調(diào)度任務(wù)。整個(gè)調(diào)度過(guò)程中會(huì)在多種時(shí)機(jī)去觸發(fā)最核心的步驟 “一整輪調(diào)度”,而一整輪調(diào)度中最關(guān)鍵的部分在“全力查找可運(yùn)行G”,它保證了M的高效運(yùn)行(換句話說(shuō)就是充分使用了計(jì)算機(jī)的物理資源),一整輪調(diào)度中還會(huì)涉及到M的啟用停止。最后別忘了,還有一個(gè)與Go程序生命周期相同的系統(tǒng)監(jiān)測(cè)任務(wù)來(lái)進(jìn)行一些輔助性的工作。

淺析Golang的線程模型與調(diào)度器

Golang CSP并發(fā)模型

Golang線程模型

網(wǎng)頁(yè)名稱(chēng):go語(yǔ)言的線程 go 線程 協(xié)程
文章轉(zhuǎn)載:http://chinadenli.net/article8/dodcdop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)網(wǎng)站排名、關(guān)鍵詞優(yōu)化、網(wǎng)站維護(hù)、虛擬主機(jī)網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)