gpt4 book ai didi

go - 你能检测出给定数量的 goroutines 将创建多少个线程吗?

转载 作者:IT王子 更新时间:2023-10-29 01:07:17 24 4
gpt4 key购买 nike

我知道 goroutines 被多路复用到多个操作系统线程上,所以如果一个应该阻塞,比如在等待 I/O 时,其他线程会继续运行。但是有什么方法可以提前知道如果我要创建 n 个 goroutine,我会产生多少线程?

例如,如果我们调用下面的函数,我们会知道将为 n 个 goroutine 创建多少(或最大数量)系统线程:

type Vector []float64

// Apply the operation to n elements of v starting at i.
func (v Vector) DoSome(i, n int, u Vector, c chan int) {
for ; i < n; i++ {
v[i] += u.Op(v[i])
}
c <- 1; // signal that this piece is done
}

最佳答案

每个 goroutine 一次最多可以使用一个线程。它是否使用线程取决于它在做什么。 GOMAXPROCS 的值决定了 Go 代码可以自由运行的线程数——换句话说,就是最大并行度。

然而,当 goroutines 直接阻塞系统调用或调用 C 时,即使 GOMAXPROCS=1,也可以使用更多线程。

以下操作不会导致 goroutine 在阻塞时使用线程:

  • channel 运营
  • 网络运营
  • sleep
  • sync 中的所有原语包

这意味着,例如,如果您有许多打开/dev/ttyxx 并在读取时阻塞的 goroutine,您将为每个 goroutine 使用一个线程。如果您正在执行大量进程并等待它们退出,情况也是如此。

关于go - 你能检测出给定数量的 goroutines 将创建多少个线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1714136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com