中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

go語言線程 go語言進程

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

線程:

創(chuàng)新互聯公司主要從事網站設計、成都網站建設、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務望花,十載網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

多線程是為了解決CPU利用率的問題,線程則是為了減少上下文切換時的開銷,進程和線程在Linux中沒有本質區(qū)別,最大的不同就是進程有自己獨立的內存空間,而線程是共享內存空間。

在進程切換時需要轉換內存地址空間,而線程切換沒有這個動作,所以線程切換比進程切換代價要小得多。

協(xié)程:

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

Goroutine是GO語言實現的協(xié)程,其特點是在語言層面就支持,使用起來十分方便,它的核心是MPG調度模型:M即內核線程;P即處理器,用來執(zhí)行Goroutine,它維護了本地可運行隊列;G即Goroutine,代碼和數據結構;S及調度器,維護M和P的信息。

golang多線程簡單邏輯

實現指定個核心最大化使用,比如核心總數減一。

必要的庫。

要使用的cpu數量,建議不全使用。

建立管道。

聲明使用的cpu數。

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

創(chuàng)建cpu數減1個線程

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

沒有緩沖的、阻塞式的往管道傳遞字符串。

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

關閉管道。

假設已有的函數是ReadLogs,在它的基礎上加個Wg加函數名的新函數,我覺得這種方式不改變原有的,比較舒服。

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

每個ReadLogs()之后加一個wg.Done(),相當于計數減一。

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

就是開指定個線程。

管道阻塞傳值。

wg同步。

WgReadLogs循環(huán)接收。

go語言是單線程嗎

是。go語言屬于c語言軟件中的編程語言,該編程語言是單線程的。c語言是一種通用程序設計語言類的程序軟件。

golang的線程模型——GMP模型

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

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

用戶線程與系統(tǒng)線程一一對應,用戶線程執(zhí)行如lo操作的系統(tǒng)調用時,來回切換操作開銷相對比較大

多個用戶線程對應一個內核線程,當內核線程對應的一個用戶線程被阻塞掛起時候,其他用戶線程也阻塞不能執(zhí)行了。

多對多模型是可以充分利用多核CPU提升運行效能的

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

GMP模型是goalng特有的。

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

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

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

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

詳細可以翻看下方第一個參考鏈接,寫得真好。

最后用大佬的總結來做最后的收尾————

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

淺析Golang的線程模型與調度器

Golang CSP并發(fā)模型

Golang線程模型

網頁題目:go語言線程 go語言進程
網站URL:http://m.rwnh.cn/article28/hhgpcp.html

成都網站建設公司_創(chuàng)新互聯,為您提供做網站網站改版、服務器托管、網站制作、網站排名、面包屑導航

廣告

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

商城網站建設
曲水县| 宣威市| 晴隆县| 张北县| 宁乡县| 恩平市| 托克托县| 敦煌市| 嘉峪关市| 泸溪县| 禹州市| 南开区| 桐梓县| 洛宁县| 郸城县| 五峰| 商城县| 新田县| 香格里拉县| 宁国市| 东源县| 德庆县| 新营市| 原阳县| 永登县| 新闻| 清苑县| 孙吴县| 赤城县| 靖边县| 四会市| 新津县| 河西区| 泰来县| 丹巴县| 辽中县| 巴楚县| 高台县| 本溪市| 邯郸市| 长海县|