Go語言精髓 第6章 Channel通道

2021-10-05 12:19:57 字數 1943 閱讀 5189

在講 channel 之前,有必要先提一下 csp 模型,傳統的併發模型主要分為 actor 模型和 csp 模型,csp 模型全稱為 communicating sequential processes,csp 模型由併發執行實體(程序,執行緒或協程),和訊息通道組成,實體之間通過訊息通道傳送訊息進行通訊。和 actor 模型不同,csp 模型關注的是訊息傳送的載體,即通道,而不是傳送訊息的執行實體。關於 csp 模型的更進一步的介紹,有興趣的同學可以閱讀** communicating sequential processes,go 語言的併發模型參考了 csp 理論,其中執行實體對應的是 goroutine, 訊息通道對應的就是 channel。  摘自:

1.channel支援go的兩種命名方式

var  c chan int

c := make(chan int) //無快取channel 直接阻塞

c := make(chan int,3) //有快取channel,快取滿時,阻塞

2.channel可定義陣列

var channels [10]chan  int

var channels [10]chan<-  int       send only

var channels [10] <-chan  int      receive only

3.channel可作為方法的入參

4.channel的關閉永遠由傳送方close

defer close(c)

5.channel的接收

n,ok := <- c ; if !ok break //自動檢測close,不如此做會在即使close後繼續獲取o值

for n : range c{} //會自動檢測close

package main

import (

"fmt"

"time"

)func main()

func work(id int, c chan int)

//或者用range接收,

/*for n: range c

*/fmt.printf("worker %d received %c\n", id, <-c) }}

//channel 也可以作為返回值

func createworker(id int) chan<- int

//channel可以作為引數,也可以建channel陣列

/*func worker(id int,c chan int)

}*/func chandemo()

//發資料

for i := 0; i < 10; i++

for i := 0; i < 10; i++

time.sleep(time.millisecond)

//直接收資料

//n := <- c

傳送的同時必須要有人收,併發收

}//有緩衝的channel,超過緩衝會報死鎖

func bufferedchannel()

主線程準備乙個接收變數同步,gorountine結束

package main

import(

"fmt"

)func main()

type worker struct

func chandemo()

//發資料

for i := 0; i < 10; i++

/*for i := 0; i < 10; i++

*/}//channel 也可以作為返回值

func createworker(id int) worker

go dowork(id, c.c,c.done)

return c

}func dowork(id int, c chan int,done chan bool )

}

《Go程式語言》 第6章

6.1 方法宣告 方法的宣告和普通函式的宣告類似,只是在函式名前多了乙個引數。這個引數把方法繫結到這個引數對應的型別上。import math type point struct 普通函式 func distance p,q point point型別的方法 p是方法的接收者,主調函式或方法,通過d...

C語言程式設計 第6章

參考例6.4程式,程式設計計算並輸出1到n之間的所有數的平方和立方。其中,n值由使用者從鍵盤輸入。include include intmain return0 某人在國外留學,不熟悉當地天氣預報中的華氏溫度值,請程式設計按每隔10 輸出0 到300 之間的華氏溫度到攝氏溫度的對照表,以方便他對照查...

《python語言程式設計基礎》 第6章

根據資料之間的關係,組合資料型別可以分為3類 序列型別 元素之間存在先後關係,通過序號訪問,元素之間可以是相通的 集合型別 元素無序,且相同元素在集合中唯一存在 對映型別 即鍵值對 這個庫的名字挺有趣!jieba是python中乙個重要的第三方中文分詞函式庫。jieba庫的分詞原理是利用乙個中文詞庫...