一、并发编程
并发与并行(并发时间片轮询)
资源竞争
1、goruntine协程
go newTask()
for {
}
- 主协程退出了其他协程也跟着退出
- 主协程退出子协程来不及执行
2、runtime包
2.1 Gosched 用于出让CPU时间片
runtime.Gosched()
2.2 Goexit 结束当前协程
return // 此函数终止
runtime.Goexit//defer会执行
2.3 GOMAXPROCS 设置最大CPU核数
n := rutime.GOMAXPROCS(2)
3、资源竞争(同步互斥)
channel
4、channel(通信实现同步,数据共享)
4.1 创建
var ch = make(chan int)
ch 没有值会一直阻塞
<-ch
ch<-666
4.2 有无缓存channel
var ch = make(chan int,4)
4.3 关闭channel
var ch = make(chan int,4)
close(ch)
4.4 遍历channel
for num := range ch{
}
4.5 单向channel(引用传递)
var ch = make(chan int)
var writeCh chan<- int = ch//双向隐式转化为单向
writeCh<- 666
var readCh <-chan int = ch
<-readCh
单向无法向双向转化
5、定时器
5.1 Timer (只响应一次)
timer := time.NewTimer(2*time.Second)
//2s后会向timer.C写数据,阻塞解除
t := <-timer.C
//实现延时功能
time.sleep(time.Second)
<-time.After(2*time.Second)
//停止定时器
timer.Stop()
//定时器重置
timer.Reset(1*time.Second)
5.2 Ticker
ticker := time.NewTicker(1*time.Second)
6、select
select{
case
case
}
//超时
case <-time.After(5*time.Second)
网友评论