问题标签 [go-scheduler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - 为什么这个 goroutine 没有运行,即使有一个`time.Sleep`?
拿这段代码:
为什么最后x
等于0
?我知道 Go 的调度程序需要time.Sleep()
调用来获取 goroutine,但为什么它不这样做呢?
提示:在 for 循环放置一个time.Sleep()
或调用来runtime.Gosched()
但为什么?
更新:检查相同代码的以下版本:
奇怪的是,goroutine 中的代码现在被执行并且x
不再是 0。编译器在这里做了任何优化吗?
go - 去缓冲通道(容量4)接受5而不阻塞
我有 go 代码,它基本上同时运行两个 go 例程。其中一个从 (1-10) 发送 10 个 int 数字到缓冲通道“ch”(容量为 4),另一个 go 例程在for range loop
该问题可以在下面的输出中找到。
doSm() 通过 channel 发送 4 个 int 并且 go 调度程序阻塞 go 例程,直到 doSm2() 从 channel 读取这 4 个值。之后,缓冲区为空,doSm() 发送 1 个 int,doSm2() 立即读取它。现在,缓冲区再次为空,准备发送 4 个值。然而,doSm() 以某种方式发送了 5 个值(6、7、8、9、10),尽管它有容量。
知道为什么会这样吗?还是我错过了什么?