zoukankan      html  css  js  c++  java
  • go channel初步

    go 关键字跟随的函数,异步执行,并且可以阻塞,类似于js 的 async 函数中 await 异步结果

    协程间通过 channel  传递信息,并且 channel 带有阻塞性,加上 go函数 的阻塞性,所以函数编写类似串行执行

    但还是要注意是异步执行,结果出现的时间和串行不同。

    package main
    
    import(
        "fmt"
        "time"
    )
    
    var ch chan int = make(chan int,2);
    
    func chPush(){
        fmt.Println("before push.")
        for i:=0;i<5;i++{
            // time.Sleep(100*time.Millisecond)
         
    // 必须要读取以后,才能再压入一个。容量是2,所以一次可以压入2个数据
            ch <- i 
            fmt.Println("push:",i) 
        }
        fmt.Println("after push.")
    }
    func chPop(){
        fmt.Println("before pop.")
        for i:=0;i<5;i++{
            time.Sleep(100*time.Millisecond)
    // 堵塞,必须要有数据,才能读取。另外,此处读取一个数据,chPush 会立即压入一个数据
      n := <- ch fmt.Println("pop:",n) } 
      fmt.Println(
    "after pop.")
    }

    func main(){
      fmt.Println(
    "begin:")
      go chPush() // 异步,不会等待
      
      fmt.Println(
    "follow go push. no choke")
      time.Sleep(
    1000 * time.Millisecond)
      go chPop()
      fmt.Println(
    "follow go pop. no choke but delayed by sleep")

      // 主线程可能会先于子协程结束,所以要某种方式等待一下
      time.Sleep(1000 * time.Millisecond) 

      fmt.Println(
    "end.")
    }
  • 相关阅读:
    volatile详解
    Java并发之AQS详解
    Thread详解
    Hibernate检索策略
    Hibernate查询方式
    Hibernate--对象关系
    hibernate--hibernate.cfg.xml常用配置详解
    hibernate--CRUD初体验
    hibernate--HelloWorld
    Struts支持的contentType
  • 原文地址:https://www.cnblogs.com/mitang/p/15736872.html
Copyright © 2011-2022 走看看