部落格306 Go使用緩衝chan作為訊息佇列

2021-10-07 08:52:14 字數 1374 閱讀 6819

內容:go中的chan可以作為訊息佇列

chan:

1、chan分為帶緩衝和不帶緩衝

2、帶緩衝的chan可以作為訊息佇列,用於削峰減流,增大吞吐

3、不帶緩衝的chan可以作為一種同步goruntine的方法

例項:

package main

import "runtime"

func main()

) ci :

=make

(chan int

,100

) go func

(i chan struct

,j chan int

)close

(ci)

c <

-struct

}(c,ci)

println

("num of goruntine:"

,runtime.

numgoroutine()

)<

-c //寫資料的goruntine退出後,仍然可以讀取資料

println

("num of goruntine:"

,runtime.

numgoroutine()

)for v :

= range ci

}

結果:

goroot=

/usr/local/go #gosetup

gopath=

/home/luzejia/workspace/go #gosetup

/usr/local/go/bin/go build -o /tmp/___go_build_study_39_go

/home/luzejia/workspace/go/go_study/src/study_39.go #gosetup

/tmp/___go_build_study_39_go #gosetup

num of goruntine:

2num of goruntine:10

1234

5678

9process finished with exit code 0

分析:

1、帶緩衝的chan可以在goruntine退出後,其它goruntine仍然可以讀取其中的資料;

2、其功能就類似於linux的訊息佇列一樣,在程序/執行緒退出後,仍然可以讀取其中的資料;

3、藉此可以實現類似訊息佇列的削峰,增大吞吐量的作用

cuda程式設計 c 使用Go和C輕鬆進行CUDA程式設計

cuda程式設計 c 與其他語言相比,使用go程式設計cuda有點複雜。儘管有一些出色的軟體包,例如mumax,但是文件很差,缺少示例並且很難使用。cuda用於c語言,所以最好的選擇是使用command cgo並使用您的cuda核心呼叫外部函式。這就是我在此示例中所做的事情,在該示例中,我使用cud...

C 零食 WTL中使用雙緩衝避免閃爍

雙緩衝的原理可以這樣形象的理解 把電腦螢幕看作一塊黑板。首先我們在記憶體環境中建立乙個 虛擬 的黑板,然後在這塊黑板上繪製複雜的圖形,等圖形全部繪製完畢的時候,再一次性的把記憶體中繪製好的圖形 拷貝 到另一塊黑板 螢幕 上。採取這種方法可以提高繪圖速度,極大的改善繪圖效果。例如在ondraw 函式中...

C 零食 WTL中使用雙緩衝避免閃爍

在自己畫的視窗中,有時候會有閃爍現象。為什麼會有閃爍現象呢?其實是因為程式在畫視窗時需要用背景色清空顯示區域,然後再畫。由於這兩者的反差比較大,就會被人眼睛捕捉到,感覺閃爍。雙緩衝就是先在記憶體中把圖畫好,然後直接複製到螢幕上去,這樣的反差就比較小,也就不覺得閃爍了。wtl中有現成的雙緩衝類實現,可...