第六天

作者: 可问春风渡江陵 | 来源:发表于2019-03-27 09:38 被阅读0次

    一、并发编程

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

    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)
    

    相关文章

      网友评论

          本文标题:第六天

          本文链接:https://www.haomeiwen.com/subject/jjeavqtx.html