翻译进度
2
分块数量
2
参与人数

14.12. 链式操作

这是一篇社区协同翻译的文章,你可以点击右边区块信息里的『改进』按钮向译者提交改进建议。

下面的演示程序 chaining.go 再次演示了启动大量的协程是多么的容易。它发生在 mian 函数的 for 循环中。在循环之后,向 rightmost 通道中插入 0 ,在不到 1.5 s 的时间执行了100000 个协程,并将结果 100000 打印。

BroQiang 翻译于 6个月前

这个程序还演示了如何通过命令行的参数定义一个协程的数量,并通过 flag.Int 解析,例如: chaining -n=7000 (编译后通过命令行执行),可以生成 7000 个协程。

示例 14.17 - chaining.go:

package main

import (

    "flag"

    "fmt"

)

var ngoroutine = flag.Int("n", 100000, "how many goroutines")

func f(left, right chan int) { left <- 1+<-right }

func main() {

    flag.Parse()

    leftmost := make(chan int)

    var left, right chan int = nil, leftmost

    for i := 0; i < *ngoroutine; i++ {

        left, right = right, make(chan int)

        go f(left, right)

    }

    right <- 0

    // start the chaining 开始链接

    x := <-leftmost // wait for completion 等待完成

    fmt.Println(x)

    // 结果: 100000 , 大约 1,5s (我实际测试只用了不到200ms)

}
BroQiang 翻译于 6个月前

本文章首发在 GolangCaff
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

参与译者:2
讨论数量: 0
发起讨论


暂无话题~