3D 視角看 Go 並發編程
阿新 • • 發佈:2018-04-03
Go 並發 運維 運維開發 主題:3D 視角看 Go 並發編程
Overview
- 並發編程綜述
- Goroutine
- Channel & Select & waitGroup
- 消息傳遞模式
- 可視化工具 GoTrace
主講師:PP
先後在百度、第四範式、螞蟻金服工作,百度 Go Good Coder, 對分布式計算、離線/實時大數據處理有豐富的實戰經驗。樂於分享自己的技術和學習心得。
一、並發編程綜述
串行執行
並發與並行
多核時代的並發編程
左圖:p1, p2, p3 這 3 個線程運行在單核上,分時復用 CPU,是並發執行。
右圖:p1, p2, p3, p4 這 4 個線程運行在雙核 CPU 上, 每個核上的線程是分時復用並發執行的, 而兩個 CPU 內核在同一時間內都有線程在執行,這就是並行執行。
二、Goroutine
Goroutine helloworld 3D 可視化(1)
Goroutine helloworld 3D 可視化(2)
三、Channel & Select & waitGroup
Channel
-
Channel 是 Goroutine 之間進行通信/消息傳遞的一種方式, 可以通過 <- 操作符向 Channel 裏發送和接受數據:
- 並發模型: 消息傳遞 VS 共享內存
Channel 的 3D 可視化(1)
Channel 的 3D 可視化(2) – Timer
Channel 的 3D 可視化 (3) – 乒乓球程序
Select
- select 語句讓 goroutine 等待多個通信操作
- select 會等待 case 中有能夠執行的 case 時去執行
- 如果多個 case 同時就緒時,select 會隨機地選擇一個執行
Select 的 3D 可視化
waitGroup
類似 Java 的 countDownLatch, 計數等待一組 goroutine 運行結束
四、消息傳遞模式
- Fade In
- Fade Out(workers)
- Servers
- Server + Worker
五、3D 可視化工具 GoTrace
https://github.com/divan/gotrace
分享時間:18年4月4日(周四)21:00——22:00
具體的參與方式:加小助手微信WeChat : 1251743084 備註“公開課” 進入直播分享群
3D 視角看 Go 並發編程