gpt4 book ai didi

java - Go 和 Java 使用用户空间线程这一事实是否意味着您不能真正利用多核?

转载 作者:IT老高 更新时间:2023-10-28 13:05:41 25 4
gpt4 key购买 nike

最近我们一直在谈论我的操作系统类(class)中的线程,我想到了一个问题。

由于 Go(和 Java)使用用户空间线程而不是内核线程,这是否意味着您不能有效地利用多核,因为操作系统只将 CPU 时间分配给进程而不是线程自己?

This seems to confirm the fact that you can't

Wikipedia also seems to think so

最佳答案

是什么让您认为 Go 使用用户空间线程?

它没有。它使用操作系统线程并且可以利用多个内核。

您可能对默认情况下 Go 仅使用 1 个线程来运行您的程序这一事实感到困惑。如果你开始两个goroutines他们在一个线程中运行。但是如果一个 goroutine 阻塞了 I/O,Go 创建第二个线程并继续在新线程上运行另一个 goroutine。

如果您真的想解锁完整的多核功能,只需使用 GOMAXPROCS()功能。

runtime.GOMAXPROCS(4);//main中的某个地方

现在您的程序将使用 4 个操作系统线程(而不是 1 个),并且能够充分使用例如4核系统。

关于java - Go 和 Java 使用用户空间线程这一事实是否意味着您不能真正利用多核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1739799/

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