第六天

一、并发编程

并发与并行(并发时间片轮询)
资源竞争

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)

你可能感兴趣的:(第六天)