我正在玩Go以了解它的功能和语法.我已经完成了一个带有并发go函数的简单生产者 - 消费者程序,以及中间的优先缓冲区.单个生产者生成具有特定优先级的任务,并使用通道将它们发送到缓冲区.一组消费者在闲置,接收并消费它时会要求任务.中间缓冲区将一组任务存储在优先级队列缓冲区中,因此首先提供最高优先级的任务.该程序还会打印垃圾收集器活动(调用它的次数以及收集垃圾所花费的时间).
我正在使用Go 1.1在Raspberry Pi上运行它.
该软件似乎工作正常,但我发现在SO级别,htop显示有4个进程在运行,内存使用相同,CPU使用总和超过100%(Raspberry Pi只有一个核心,所以我假设它与线程/进程有关).系统负载大约是CPU的7%,我想因为OS级别的上下文切换是恒定的.GOMAXPROCS环境变量设置为1或取消设置.
你知道为什么Go使用多个操作系统进程吗?
代码可以在这里找到:http://pastebin.com/HJUq6sab
谢谢!
编辑:
它似乎htop显示了系统的轻量级过程.Go程序运行其中几个轻量级进程(它们与goroutines线程不同),因此使用htop显示多个进程,同时ps或top将只显示一个进程.
请尝试杀死所有可疑进程,然后再尝试运行一次.此外,不要使用go run,至少现在 - 它至少模糊了正在运行的进程数.
我怀疑其他实例只是你以前的开发尝试中的残羹剩饭(可能是通过go runSIGINT [仅仅假设] 通过并且没有正确[间接]被杀死),特别是因为'main'结束时有1小时的"超时"(相反)适当的同步或select{}).Go二进制文件可以生成新线程,但除非明确要求,否则它永远不应创建新进程.这不是你的代码的情况 - 它甚至不首先导入"os/exec"或"系统调用".
如果我对go run长时间超时的组合和使用长的超时的猜测真的是罪魁祸首,那么RP内核可能会有一些与开发人员用于测试的内容不同.