当前位置: 首页 > 面试题库 >

Golang:如何验证运行Go程序的处理器数量

莘俊能
2023-03-14
问题内容

我是(Golang)的新手。我的问题与这篇文章有关。runtime.Gosched到底做什么?。代码的结构如下所示。我的问题是,当我更改GOMAXPROCS中的处理器数量时,如何验证它正在运行多少个处理器。当我执行“top”操作时,即使GOMAXPROCS大于1,它也会显示a.out进程占用100%或更少的资源。对于您的帮助,我将不胜感激。

package main

import (
    "fmt"
    "runtime"
    "sync"
)

var wg sync.WaitGroup

func doTasks() {
    fmt.Println(" Doing task ")
    for ji := 1; ji < 100000000; ji++ {
        for io := 1; io < 10; io++ {
            //Some computations
        }
    }
    runtime.Gosched()

    wg.Done()
}

func main() {
    wg.Add(1)
    runtime.GOMAXPROCS(1) // or 2 or 4
    go doTasks()
    doTasks()
    wg.Wait()
}

问题答案:

该过程可以在给定的时间内运行的逻辑CPU的数量最多不超过最小的runtime.GOMAXPROCS(0)runtime.NumCPU()

func MaxParallelism() int {
    maxProcs := runtime.GOMAXPROCS(0)
    numCPU := runtime.NumCPU()
    if maxProcs < numCPU {
        return maxProcs
    }
    return numCPU
}


 类似资料:
  • 我是Spring MVC的新手,我已经导入了一个与服务器端验证相关的教程项目,我对它到底如何工作有些怀疑。 因此,我有一个名为login.jsp的登录页面,其中包含以下登录表单: 因此,如您所见,在username和password字段上声明了@notblank和@size验证注释。 这里的第一个疑问是:与两个常用库javax.validation和org.hibernate.validator到

  • 我正在尝试将我的UIAlertViews更改为UIAlertController。我为它设置了这个操作: 但是,处理程序直到动作被点击大约一秒钟后才运行。有什么方法可以加快速度吗?

  • 问题内容: 我有一个内存堆管理器,它根据系统上的处理器数量将堆划分为不同的段。只能在与当前正在运行的线程的处理器一起使用的分区上分配内存。至少我相信,这将帮助不同的处理器继续运行,即使两个不同的处理器希望同时分配内存。 我已经找到了适用于Windows 的功能,但这仅适用于Windows Vista和更高版本。有没有在Windows XP上有效的方法? 另外,这可以在POSIX系统上使用pthre

  • 因此,应用程序流程如下: Spring应用程序接收请求- 这是我正在使用的网络客户端(副本): 现在我不想通过控制器将此Mono对象直接返回到客户端(如Angular应用程序),因为这是一个中间步骤。我想对从 WebClient 收到的响应运行一些验证。 我已经试过<代码>。block()方法来检索函数,但是按照反应式编程,这似乎是一种不好的做法。(阻塞操作)此外,我无法理解如何使用<代码>。su

  • 问题内容: 在我的Java应用程序中,我想运行一个名为 的批处理文件 看来我什至无法执行我的批处理文件。我没主意了。 这就是我在Java中所拥有的: 以前,我有一个要运行的Python Sconscript文件,但由于该文件不起作用,我决定通过批处理文件调用该脚本,但该方法到目前为止尚未成功。 问题答案: 批处理文件不是可执行文件。他们需要一个应用程序来运行它们(即cmd)。 在UNIX上,脚本文

  • 问题内容: 给出以下代码: 我可以假设’dowork’函数将并行执行吗? 这是实现并行性的正确方法,还是对每个goroutine使用通道并将单独的“ workwork”工人分开更好? 问题答案: 关于GOMAXPROCS,您可以在Go 1.5的发行文档中找到: 默认情况下,Go程序在将GOMAXPROCS设置为可用内核数的情况下运行;在以前的版本中,它默认为1。 关于防止main功能立即退出,您可