问题标签 [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.

0 投票
2 回答
97 浏览

go - 为什么这个 goroutine 没有运行,即使有一个`time.Sleep`?

拿这段代码:

为什么最后x等于0?我知道 Go 的调度程序需要time.Sleep()调用来获取 goroutine,但为什么它不这样做呢?

提示:在 for 循环放置一个time.Sleep()或调用来runtime.Gosched()但为什么?

更新:检查相同代码的以下版本:

奇怪的是,goroutine 中的代码现在被执行并且x不再是 0。编译器在这里做了任何优化吗?

0 投票
2 回答
30 浏览

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),尽管它有容量。

知道为什么会这样吗?还是我错过了什么?

0 投票
1 回答
62 浏览

go - 观察 goroutines 的平均等待时间

我正在运行一个服务于大量 QPS 的服务器应用程序,并且对于每个查询,我都会执行一些 CPU 受限的计算。

我进行了跟踪并在下面放了一个屏幕截图。在此处输入图像描述 x 轴是时间,y 轴是 goroutines 的数量。在深绿色,我们可以看到处于 Running 状态的 goroutine 的数量,在浅蓝色,我们可以看到处于 Runnable 状态的 goroutine 的数量。

由此,很难知道是同一个 goroutines 在排队还是发生了一些上下文切换。
我想知道是否有可能获得 goroutines 的平均等待时间(他们在被安排之前等待的时间)。