![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang并发编程
文章平均质量分 68
磨镜台
牢骚太盛防肠断,风物长宜放眼量。
展开
-
并发编程
并发意味着程序在运行时有多个执行上下文,对应着多个调用栈。并发包含以下几个主流的实现模型: 1.多进程 2.多线程 3.基于回调的非阻塞/异步IO 4.协程在工程上,有两种最常见的并发通信模型:共享数据和消息...原创 2018-07-28 17:29:06 · 115 阅读 · 0 评论 -
channel
1.向channel写入数据通常会导致程序阻塞,直到有其他的goroutine从这个channel读取数据。 2.如果channel没有数据,从channel读取数据也会导致程序阻塞。声明channelvar chanName chan ElementType定义channelch := make(chan int)定义带缓冲的channelchs := make...原创 2018-07-30 18:45:31 · 1371 阅读 · 0 评论 -
select
Go语言直接在语言级别支持select关键字,用于处理异步IO问题。 select每个条件必须是一个channel操作,都不符合条件则执行default.(也可以不带default,一直等待符合的条件)select { case <-ch: case <-ch1: default:}利用select处理超时机制func main() { ...原创 2018-07-30 18:54:28 · 116 阅读 · 0 评论 -
协程
goroutine是Go语言中的轻量级线程实现,由Go运行时(runtime)管理。关键字goGo程序从初始化main.package并执行main()函数开始,到main()函数返回时,程序退出,且程序并不等待其他goroutine(非主goroutine)结束。...原创 2018-07-28 17:42:12 · 100 阅读 · 0 评论 -
runtime包中与goroutine相关的函数
主动让出当前的cpu使用权,变成就绪态: Gosched()设置当前参与计算的逻辑cpu个数。返回上次成功设置的个数:GOMAXPROCS()返回计算机默认逻辑cpu:Numcpu()手动垃圾回收:GC()结束当前goroutine,确保已注册的defer都执行。不能在主goroutine中结束主goroutine:Goexit()...原创 2019-04-11 20:49:09 · 123 阅读 · 0 评论 -
定时器Timer和周期性定时器Ticker
单次定时器Timer创建timer : = time.NewTimer(d duration)该函数返回一个*Timer类型Timer类型如下:type Timer struct { C <-chan Time r runtimeTimer}延迟定时的三种方法sleep(duration)timer := newTimer(duration) 然后<- ti...原创 2019-04-11 21:29:49 · 1018 阅读 · 0 评论