golang实现控制CPU使用率曲线的问题

 

问题描述:

最近需要实现一个控制cpu使用率的功能,就是《编程之美》里面画CPU曲线那个例子。
但是,找了半天好像没有golang实现的例子。

然后呢,就自己随手丢了个死循环,想看看100%的效果,结果扑了个空,只能压到16%~17%左右。
好像是有点效果,但是差太远了。
(环境:8核 3.0GHZ win7 云主机)

  runtime.GOMAXPROCS(1)
  for {
        // time.Sleep(800 * time.Millisecond)
  }
 

对比,C语言代码

#include "stdafx.h"
#include "stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
 int i;
 while(true)
 {
  for(i=0;i<840000;++i)//840000是根据cpu 频率算出来的,每个周期假设能出来2条汇编指令
   ;
  Sleep(10);
 }
 return 0;
}

是云主机在CPU使用方面有特殊处理呢?还是go语言的什么特性导致的?

求大神解答一下


 

第 1 个答案:

因为go自己实现的用户态线程调度,死循环之类的并不会一直运行,会根据调度算法让出时间片,所以即使是死循环也不会像c那样cpu 100%


1.项目中需要使用prometheus监控每个请求的耗时情况和响应结果(http.StatusCode)2.看了prometheus的文档,依旧不是很明白3.下面是一段示例demo,我应该使用 ...