设为首页 加入收藏

TOP

goroutine,channel(三)
2019-09-04 00:55:45 】 浏览:132
Tags:goroutine channel
讨论如下2版本的方案:

  1. 只使用单个无缓冲信道阻塞主线
  2. 使用容量为goroutines数量的缓冲信道

对于方案1, 示例的代码大概会是这个样子:

package main

import "fmt"

var quit chan int //只开一个信道

func foo(id int) {
    fmt.Println(id)
    quit <- 0 //ok,finished
}

func main() {

    count := 1000
    quit = make(chan int) //无缓冲

    for i := 0; i < count; i++ {
        go foo(i)
    }

    for i := 0; i < count; i++ {
        <- quit
    }
}

对于方案2,把信道换成1000的:

quit = make(chan int, count) // 容量1000

其实区别仅仅在于一个是缓冲的,一个是非缓冲的。
对于这个场景而言,两者都能完成任务, 都是可以的。

  • 无缓冲的信道是一批数据一个一个的「流进流出」
  • 缓冲信道则是一个一个存储,然后一起流出去
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go 面试每天一篇(第 2 天) 下一篇(转)go新建文件权限与设置不符

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目