成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語言并發(fā)行 go 開發(fā)語言

Go CSP并發(fā)模型

Go的CSP并發(fā)模型

公司主營業(yè)務:成都網站制作、成都做網站、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現互聯網宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯公司推出隴縣免費做網站回饋大家。

Go實現了兩種并發(fā)形式。第一種是大家普遍認知的:多線程共享內存。其實就是Java或者C++等語言中的多線程開發(fā)。另外一種是Go語言特有的,也是Go語言推薦的:CSP(communicating sequential processes)并發(fā)模型。

CSP 是 Communicating Sequential Process 的簡稱,中文可以叫做通信順序進程,是一種并發(fā)編程模型,由 Tony Hoare 于 1977 年提出。簡單來說,CSP 模型由并發(fā)執(zhí)行的實體(線程或者進程)所組成,實體之間通過發(fā)送消息進行通信,這里發(fā)送消息時使用的就是通道,或者叫 channel。CSP 模型的關鍵是關注 channel,而不關注發(fā)送消息的實體。 Go 語言實現了 CSP 部分理論 。

“ 不要以共享內存的方式來通信,相反, 要通過通信來共享內存?!?/p>

Go的CSP并發(fā)模型,是通過 goroutine和channel 來實現的。

goroutine 是Go語言中并發(fā)的執(zhí)行單位。其實就是協(xié)程。

channel是Go語言中各個并發(fā)結構體(goroutine)之前的通信機制。 通俗的講,就是各個goroutine之間通信的”管道“,有點類似于Linux中的管道。

Channel

Goroutine

go語言--Goroutines

1、goroutine:在go語言中,每一個并發(fā)的執(zhí)行單元叫做goroutine,如果一個程序中包含多個goroutine,對兩個函數的調用則可能發(fā)生在同一時刻

2、main goroutine:當一個程序啟動時,其主函數即在一個單獨的goroutine中運行,我們叫他為main gorountine

3、go goroutine:新的goroutine會用go語句來創(chuàng)建,go+函數名,go語句會使其語句中的函數在一新創(chuàng)建的goroutine中運行,而go語句本身會迅速地完成

4、goroutine的退出:主函數返回時,所有的goroutine都會被直接打斷,程序退出,除了從主函數退出或者終止程序之外,沒有其他方法能夠讓一個goroutine來打斷另一個的執(zhí)行,但是可以通過另一種方式來實現這個目的,通過goroutine之間的通信來讓一個goroutine請求其他的goroutine,并讓請求的goroutine自行結束執(zhí)行

為什么要使用 Go 語言?Go 語言的優(yōu)勢在哪里?

1、簡單易學。

Go語言的作者本身就很懂C語言,所以同樣Go語言也會有C語言的基因,所以對于程序員來說,Go語言天生就會讓人很熟悉,容易上手。

2、并發(fā)性好。

Go語言天生支持并發(fā),可以充分利用多核,輕松地使用并發(fā)。 這是Go語言最大的特點。

描述

Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進程(CSP)為基礎,采取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運算的特征,比如通道傳輸。

在1.8版本中開放插件(Plugin)的支持,這意味著現在能從Go中動態(tài)加載部分函數。

與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數等功能,但增加了 切片(Slice) 型、并發(fā)、管道、垃圾回收、接口(Interface)等特性的語言級支持。

《Go語言并發(fā)之道》pdf下載在線閱讀全文,求百度網盤云資源

《Go語言并發(fā)之道》百度網盤pdf最新全集下載:

鏈接:

?pwd=v91m 提取碼:v91m

簡介:本書作者帶你一步一步深入這些方法。你將理解 Go語言為何選定這些并發(fā)模型,這些模型又會帶來什么問題,

以及你如何組合利用這些模型中的原語去解決問題。學習那些讓你在獨立且自信的編寫與實現任何規(guī)模并發(fā)系統(tǒng)時所需要用到的技巧和工具。 ?

Go語言——goroutine并發(fā)模型

參考:

Goroutine并發(fā)調度模型深度解析手擼一個協(xié)程池

Golang 的 goroutine 是如何實現的?

Golang - 調度剖析【第二部分】

OS線程初始棧為2MB。Go語言中,每個goroutine采用動態(tài)擴容方式,初始2KB,按需增長,最大1G。此外GC會收縮??臻g。

BTW,增長擴容都是有代價的,需要copy數據到新的stack,所以初始2KB可能有些性能問題。

更多關于stack的內容,可以參見大佬的文章。 聊一聊goroutine stack

用戶線程的調度以及生命周期管理都是用戶層面,Go語言自己實現的,不借助OS系統(tǒng)調用,減少系統(tǒng)資源消耗。

Go語言采用兩級線程模型,即用戶線程與內核線程KSE(kernel scheduling entity)是M:N的。最終goroutine還是會交給OS線程執(zhí)行,但是需要一個中介,提供上下文。這就是G-M-P模型

Go調度器有兩個不同的運行隊列:

go1.10\src\runtime\runtime2.go

Go調度器根據事件進行上下文切換。

調度的目的就是防止M堵塞,空閑,系統(tǒng)進程切換。

詳見 Golang - 調度剖析【第二部分】

Linux可以通過epoll實現網絡調用,統(tǒng)稱網絡輪詢器N(Net Poller)。

文件IO操作

上面都是防止M堵塞,任務竊取是防止M空閑

每個M都有一個特殊的G,g0。用于執(zhí)行調度,gc,棧管理等任務,所以g0的棧稱為調度棧。g0的棧不會自動增長,不會被gc,來自os線程的棧。

go1.10\src\runtime\proc.go

G沒辦法自己運行,必須通過M運行

M通過通過調度,執(zhí)行G

從M掛載P的runq中找到G,執(zhí)行G

Go語言的優(yōu)勢有哪些

1. 部署簡單

Go

編譯生成的是一個靜態(tài)可執(zhí)行文件,除了glibc外沒有其他外部依賴。這讓部署變得異常方便:目標機器上只需要一個基礎的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應用所需的各種包、庫的依賴關系,大大減輕了維護的負擔。

2. 并發(fā)性好

Goroutine和channel使得編寫高并發(fā)的服務端軟件變得相當容易,很多情況下完全不需要考慮鎖機制以及由此帶來的各種問題。單個Go應用也能有效的利用多個CPU核,并行執(zhí)行的性能好。

3. 良好的語言設計

從學術的角度講Go語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go的設計是非常優(yōu)秀的:規(guī)范足夠簡單靈活,有其他語言基礎的程序員都能迅速上手。更重要的是

Go 自帶完善的工具鏈,大大提高了團隊協(xié)作的一致性。

4. 執(zhí)行性能好

雖然不如 C 和 Java,但相比于其他編程語言,其執(zhí)行性能還是很好的,適合編寫一些瓶頸業(yè)務,內存占用也非常省。

名稱欄目:go語言并發(fā)行 go 開發(fā)語言
當前網址:http://jinyejixie.com/article18/dodohgp.html

成都網站建設公司_創(chuàng)新互聯,為您提供App開發(fā)、ChatGPT、商城網站、品牌網站制作、移動網站建設品牌網站設計

廣告

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

成都網頁設計公司
武隆县| 安乡县| 高雄县| 南川市| 奉节县| 天门市| 蒲城县| 伊宁县| 苗栗县| 都安| 五常市| 咸宁市| 乐业县| 永寿县| 克山县| 丰镇市| 肃南| 应用必备| 萍乡市| 上虞市| 绥化市| 新绛县| 本溪市| 彩票| 三亚市| 武义县| 昌黎县| 泸溪县| 鄄城县| 仁布县| 启东市| 那坡县| 琼中| 满洲里市| 迁西县| 宁武县| 揭西县| 武威市| 佛冈县| 台江县| 太保市|