內容: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中有現成的雙緩衝類實現,可...