91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言的并發模型

發布時間:2020-06-09 15:10:42 來源:億速云 閱讀:210 作者:元一 欄目:編程語言

Go語言

Go(又稱Golang)是Google開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言。

羅伯特·格瑞史莫(Robert Griesemer),羅勃·派克(Rob Pike)及肯·湯普遜(Ken Thompson)于2007年9月開始設計Go,稍后Ian Lance Taylor、Russ Cox加入項目。Go是基于Inferno操作系統所開發的。Go于2009年11月正式宣布推出,成為開放源代碼項目,并在Linux及Mac OS X平臺上進行了實現,后來追加了Windows系統下的實現。在2016年,Go被軟件評價公司TIOBE 選為“TIOBE 2016 年最佳語言”。 目前,Go每半年發布一個二級版本(即從a.x升級到a.y)。

Go的CSP并發模型

Go實現了兩種并發形式。第一種是大家普遍認知的:多線程共享內存。其實就是Java或者C++等語言中的多線程開發。

另外一種是Go語言特有的,也是Go語言推薦的:CSP(communicating sequential processes)并發模型。

CSP并發模型是在1970年左右提出的概念,屬于比較新的概念,不同于傳統的多線程通過共享內存來通信,CSP講究的是“以通信的方式來共享內存”。

請記住下面這句話:

Do not communicate by sharing memory; instead, share memory by communicating.
“不要以共享內存的方式來通信,相反,要通過通信來共享內存。”

普通的線程并發模型,就是像Java、C++、或者Python,他們線程間通信都是通過共享內存的方式來進行的。

非常典型的方式就是,在訪問共享數據(例如數組、Map、或者某個結構體或對象)的時候,通過鎖來訪問,因此,在很多時候,衍生出一種方便操作的數據結構,叫做“線程安全的數據結構”。

例如Java提供的包”java.util.concurrent”中的數據結構。Go中也實現了傳統的線程并發模型。

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

goroutine 是Go語言中并發的執行單位。有點抽象,其實就是和傳統概念上的”線程“類似,可以理解為”線程“。

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

生成一個goroutine的方式非常的簡單:Go一下,就生成了。

go f();

通信機制channel也很方便,傳數據用channel <- data,取數據用<-channel。

在通信過程中,傳數據channel <- data和取數據<-channel必然會成對出現,因為這邊傳,那邊取,兩個goroutine之間才會實現通信。

而且不管傳還是取,必阻塞,直到另外的goroutine傳或者取為止。

有兩個goroutine,其中一個發起了向channel中發起了傳值操作。(goroutine為矩形,channel為箭頭)

以上就是golang 如何并發的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰宁县| 太原市| 金溪县| 平定县| 建阳市| 汨罗市| 宁都县| 宜黄县| 兴文县| 昔阳县| 陆河县| 新平| 九江县| 筠连县| 繁峙县| 广饶县| 汉阴县| 佛坪县| 正定县| 闻喜县| 澜沧| 海林市| 高淳县| 拜泉县| 山阴县| 铜川市| 武穴市| 明溪县| 临泉县| 泽库县| 衡阳县| 苏尼特右旗| 托里县| 蒙山县| 鱼台县| 海伦市| 万宁市| 富川| 瑞安市| 安岳县| 河东区|