![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
飞凡可期
Stop dreaming,start doing
展开
-
go牛刀小试之互斥锁 vs 状态协程
互斥锁 /* 目的:通过大并发读写同一个map变量,来展示go的大并发能力; 实现:设定go map变量,互斥锁Mutex, 改100个读协程,10个写协程; atomic纪录读写总次数; 方法:sync.Mutex{}, map [int] int ; */ package main import ( "fmt" "math/rand" "sync" "sync/atomic" "time" ) func main() { var state = make(map [int] in原创 2020-11-14 19:06:03 · 95 阅读 · 0 评论 -
go牛刀小试之原子计数: 大并发的奇怪问题,最终读取的数早一点读和晚一点可能不一样
说明 大量并发的操作有可能超出计算机的读写能力;所以最终完成后的,读取的操作未必是最终状态(最后一波数可能在CPU缓存里,没有刷到内存中) code /* 目标:大量并发发生,如何安全修改状态;以原子计数器(原子钟?)为例; 方法:var ato uint64; 大并发中,使用atomic.add修改,安全改变状态; 回顾:sync.WaitGroup使用; 1 定义var wg wg; 2 wg.add() 3 routine:wg.done() 4 main: wg.wait() */ packag原创 2020-11-10 18:01:49 · 221 阅读 · 0 评论 -
go牛刀小试之waitGroup等待协程完成(多组同步),速率控制
WaitGroup 完成所有协程 /* 目标:利用sync包中的waitGroup对象来 等待各个协程gorutine完成; 方法:1) 定义变量sync.WatiGroup 2)传递给go routine,并每传递一次,waitgroup++, 3)go rutine内部设置延迟万层 defer wg.Done()函数 4)主线程中wg.Wait() 总结:设立外套Group 》给go routine刷计数器 》 内部设置延迟完成,返回才减数 》等待线程等; 典型的set-wait模式在一个组应用(关键原创 2020-11-10 17:14:12 · 309 阅读 · 0 评论 -
go牛刀小试:go的打点器ticker,可停止
code package main // ticker 打点器, import ( "fmt" "time" ) func main() { ticker := time.NewTicker(400 * time.Millisecond)//microSecond //打点间隔500ms done := make(chan bool) //双通道 选择 打点,或者完成结束; go func() { for { select { case tick := <- tick原创 2020-10-20 08:18:33 · 339 阅读 · 0 评论 -
go小试牛刀-select通道选择和超时处理
通道选择 //go小试牛刀-s通道选择 package main import ( "fmt" "time" ) func main () { msgch1 := make(chan string) msgch2 := make(chan string) go func(){ time.Sleep(time.Second * 1) msgch1 <- "1 goroutine" fmt.Println("first msg tx ed") }() go func() {原创 2020-10-11 12:25:00 · 144 阅读 · 0 评论 -
go channel 协程同步小例子
目的 程序完成有步骤依赖,时序关系,存储关系的需要阻塞-同步等待 方法 1 正常同步 package main //练习协程goroutine之间的协同(同步),同步一定是降低效率的, //异步和并发才可以提升性能;但是流程上,许多依赖的接口和顺序执行, //储存的依赖关系,必须要同步和等待机制; import ( "fmt" "time" ) func routineWork(chFlag chan bool) { fmt.Println("Start working...") time.Sl原创 2020-10-07 10:56:00 · 279 阅读 · 0 评论 -
go牛刀小试:切片/递归/接口
slice package main import "fmt" type Book struct { title string publisher string price int subject string bookID int } func printSlice(x []int) { fmt.Printf("len=%d, cap=%d, slice=%v\n", len(x), cap(x),x) } func main() { fmt.Println("hello!") b原创 2020-09-20 12:33:58 · 208 阅读 · 0 评论