zoukankan      html  css  js  c++  java
  • https://qcrao91.gitbook.io/go/channel/channel-fa-song-he-jie-shou-yuan-su-de-ben-zhi-shi-shi-mo

    Channel 发送和接收元素的本质是什么?

    All transfer of value on the go channels happens with the copy of value.

    就是说 channel 的发送和接收操作本质上都是 “值的拷贝”,无论是从 sender goroutine 的栈到 chan buf,还是从 chan buf 到 receiver goroutine,或者是直接从 sender goroutine 到 receiver goroutine。

    举一个例子:

     
    type user struct {
    name string
    age int8
    }
     
    var u = user{name: "Ankur", age: 25}
    var g = &u
     
    func modifyUser(pu *user) {
    fmt.Println("modifyUser Received Vaule", pu)
    pu.name = "Anand"
    }
     
    func printUser(u <-chan *user) {
    time.Sleep(2 * time.Second)
    fmt.Println("printUser goRoutine called", <-u)
    }
     
    func main() {
    c := make(chan *user, 5)
    c <- g
    fmt.Println(g)
    // modify g
    g = &user{name: "Ankur Anand", age: 100}
    go printUser(c)
    go modifyUser(g)
    time.Sleep(5 * time.Second)
    fmt.Println(g)
    }

    运行结果:

     
    &{Ankur 25}
    modifyUser Received Vaule &{Ankur Anand 100}
    printUser goRoutine called &{Ankur 25}
    &{Anand 100}

    这里就是一个很好的 share memory by communicating 的例子。

    output

    一开始构造一个结构体 u,地址是 0x56420,图中地址上方就是它的内容。接着把 &u 赋值给指针 g,g 的地址是 0x565bb0,它的内容就是一个地址,指向 u。

    main 程序里,先把 g 发送到 c,根据 copy value 的本质,进入到 chan buf 里的就是 0x56420,它是指针 g 的值(不是它指向的内容),所以打印从 channel 接收到的元素时,它就是 &{Ankur 25}。因此,这里并不是将指针 g “发送” 到了 channel 里,只是拷贝它的值而已。

    再强调一次:

    Remember all transfer of value on the go channels happens with the copy of value.

     

     

    参考:

    https://qcrao91.gitbook.io/go/channel/channel-fa-song-he-jie-shou-yuan-su-de-ben-zhi-shi-shi-mo

    https://www.cnblogs.com/bonelee/p/6056373.html

    浪漫家园,没事就来逛逛
  • 相关阅读:
    html页面表格导出到excel总结
    详解Pattern类和Matcher类
    Java数组初始化
    Mahout推荐算法基础
    基于用户的相似性度量
    JVM调优(这里主要是针对优化基于分布式Mahout的推荐引擎)
    C语言内存分配机制
    一个简单的基于用户的推荐系统+缓存机制
    推荐系统评估 查找率与查全率
    哈希表冲突的两个解决方法线性探测和分离链接法
  • 原文地址:https://www.cnblogs.com/lovezbs/p/13906432.html
Copyright © 2011-2022 走看看