參考:
站在用戶的角度思考問題,與客戶深入溝通,找到尚義網站設計與尚義網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:成都做網站、網站制作、成都外貿網站建設、企業官網、英文網站、手機端網站、網站推廣、域名與空間、雅安服務器托管、企業郵箱。業務覆蓋尚義地區。
Goroutine并發調度模型深度解析手擼一個協程池
Golang 的 goroutine 是如何實現的?
Golang - 調度剖析【第二部分】
OS線程初始棧為2MB。Go語言中,每個goroutine采用動態擴容方式,初始2KB,按需增長,最大1G。此外GC會收縮棧空間。
BTW,增長擴容都是有代價的,需要copy數據到新的stack,所以初始2KB可能有些性能問題。
更多關于stack的內容,可以參見大佬的文章。 聊一聊goroutine stack
用戶線程的調度以及生命周期管理都是用戶層面,Go語言自己實現的,不借助OS系統調用,減少系統資源消耗。
Go語言采用兩級線程模型,即用戶線程與內核線程KSE(kernel scheduling entity)是M:N的。最終goroutine還是會交給OS線程執行,但是需要一個中介,提供上下文。這就是G-M-P模型
Go調度器有兩個不同的運行隊列:
go1.10\src\runtime\runtime2.go
Go調度器根據事件進行上下文切換。
調度的目的就是防止M堵塞,空閑,系統進程切換。
詳見 Golang - 調度剖析【第二部分】
Linux可以通過epoll實現網絡調用,統稱網絡輪詢器N(Net Poller)。
文件IO操作
上面都是防止M堵塞,任務竊取是防止M空閑
每個M都有一個特殊的G,g0。用于執行調度,gc,棧管理等任務,所以g0的棧稱為調度棧。g0的棧不會自動增長,不會被gc,來自os線程的棧。
go1.10\src\runtime\proc.go
G沒辦法自己運行,必須通過M運行
M通過通過調度,執行G
從M掛載P的runq中找到G,執行G
Go的CSP并發模型
Go實現了兩種并發形式。第一種是大家普遍認知的:多線程共享內存。其實就是Java或者C++等語言中的多線程開發。另外一種是Go語言特有的,也是Go語言推薦的:CSP(communicating sequential processes)并發模型。
CSP 是 Communicating Sequential Process 的簡稱,中文可以叫做通信順序進程,是一種并發編程模型,由 Tony Hoare 于 1977 年提出。簡單來說,CSP 模型由并發執行的實體(線程或者進程)所組成,實體之間通過發送消息進行通信,這里發送消息時使用的就是通道,或者叫 channel。CSP 模型的關鍵是關注 channel,而不關注發送消息的實體。 Go 語言實現了 CSP 部分理論 。
“ 不要以共享內存的方式來通信,相反, 要通過通信來共享內存?!?/p>
Go的CSP并發模型,是通過 goroutine和channel 來實現的。
goroutine 是Go語言中并發的執行單位。其實就是協程。
channel是Go語言中各個并發結構體(goroutine)之前的通信機制。 通俗的講,就是各個goroutine之間通信的”管道“,有點類似于Linux中的管道。
Channel
Goroutine
Go語言由Google公司開發,并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發編程,性能堪比C語言,開發效率肩比Python,被譽為“21世紀的C語言”。
Go語言在云計算、大數據、微服務、高并發領域應用應用非常廣泛。BAT大廠正在把Go作為新項目開發的首選語言。
Go語言能干什么?
1、服務端開發:以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統、監控系統等;
2、DevOps:運維生態中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發;
3、網絡編程:大量優秀的Web框架如Echo、Gin、Iris、beego等,而且Go內置的 net/http包十分的優秀;
4、Paas云平臺領域:Kubernetes和Docker Swarm等;
5、分布式存儲領域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區塊鏈領域:區塊鏈里面有兩個明星項目以太坊和fabric都使用Go語言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實現的;
8、爬蟲及大數據:Go語言天生支持并發,所以十分適合編寫分布式爬蟲及大數據處理。
網頁標題:go語言并發框架,go高并發框架
當前URL:http://vcdvsql.cn/article32/hegppc.html
成都網站建設公司_創新互聯,為您提供標簽優化、小程序開發、網站排名、用戶體驗、品牌網站制作、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯