去教程选择语句

去教程选择语句,第1张

去教程选择语句

请记住,通道阻塞,因此select语句为:

select {case c <- x: // if I can send to c    // update my variables    x, y = y, x+ycase <-quit: // If I can receive from quit then I'm supposed to exit    fmt.Println("quit")    return}

没有

default
案例意味着“如果我无法发送给c并且我不能从quit中读取,请阻塞直到可以。”

然后在您的主要过程中,您将剥离另一个函数以读取

c
结果以打印结果

for i:=0; i<10; i++ {    fmt.Println(<-c)  // read in from c}quit <- 0  // send to quit to kill the main process.

这里的关键是要记住通道阻塞,并且您正在使用两个未缓冲的通道。利用

go
分拆的第二功能让您从消费
c
那么
fibonacci
将继续。


Goroutines是所谓的“绿色线程”。使用关键字启动函数调用

go
会将其分解为一个新进程,该进程独立于执行主线运行。本质上,
main()
gofunc() ...
正在同时运行!这很重要,因为我们在此代码中使用了生产者/消费者模式。

fibonacci
产生值并将其发送到
c
,从main派生的匿名goroutine会消耗
c
并处理它们的值(在这种情况下,“处理它们”仅意味着打印到屏幕上)。我们不能简单地产生所有值然后消费它们,因为
c
会阻塞。此外,
fibonacci
它将永远产生更多的值(或无论如何直到整数溢出),因此即使您拥有一个具有无限长缓冲区的魔术通道,也永远不会到达使用者。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5639075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存