相关疑难解决方法(0)

Go中的Python风格生成器

我目前正在研究Tour of Go,我认为goroutines的使用方式与Python生成器类似,特别是问题66.我认为66看起来很复杂,所以我把它重写为:

package main

import "fmt"

func fibonacci(c chan int) {
    x, y := 1, 1

    for {
        c <- x
        x, y = y, x + y
    }
}

func main() {
    c := make(chan int)
    go fibonacci(c)

    for i := 0; i < 10; i++ {
        fmt.Println(<-c)
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎有效.几个问题:

  1. 如果我将通道上的缓冲区大小调高,比如10,fibonacci将尽快填满10个其他位置,并尽可能快地main消耗掉这些位置.这是正确的吗?这会比以1的缓冲区大小更高的性能而牺牲内存,对吗?
  2. 由于频道没有被fibonacci发送者关闭,当我们离开这里的范围时会发生什么?我的期望是,一旦cgo fibonacci超出范围,渠道和它的一切得到垃圾收集.我的直觉告诉我这可能不会发生什么.

python generator go goroutine

28
推荐指数
4
解决办法
6238
查看次数

golang频道用于什么?

在查看一些golang代码时,我发现了以下内容:

  ch := make(chan int)
Run Code Online (Sandbox Code Playgroud)

我在golang Chanels的在线教程中查了解:

https://tour.golang.org/concurrency/2

但我觉得这个例子不清楚.

有人可以给我一个简单的解释和使用频道的例子吗?

channel go

21
推荐指数
2
解决办法
9427
查看次数

如果我正确使用频道,我是否需要使用互斥锁?

如果我正确使用频道,我是否需要使用互斥锁来防止并发访问?

concurrency mutex channel go

6
推荐指数
1
解决办法
881
查看次数

Go 通道与 JavaScript 生成器有何不同?

Go 通道可用于在 goroutine 之间进行通信。类似地,yield 和 next 语法可用于在两个生成器之间进行通信。我的假设正确吗?如果不是,我哪里错了?

javascript generator go goroutine node.js

5
推荐指数
1
解决办法
753
查看次数

标签 统计

go ×4

channel ×2

generator ×2

goroutine ×2

concurrency ×1

javascript ×1

mutex ×1

node.js ×1

python ×1