在Windows上使用GNU make,负载平均值究竟代表什么?
例如:
make -j --load-average=2.5
2.5是什么意思?
答案 0 :(得分:1)
这意味着在一段时间内平均的可运行进程数低于2.5之前,make不会启动任何新线程。
编辑,关注葡萄藤的评论
用Unix术语说,可运行进程是一个等待CPU时间或随时运行的进程。从技术上讲,它是一个处于TASK_RUNNING状态的进程。
然而......这促使我重新阅读原始问题,并注意其“ on Windows ”部分.... 我的原始答案是松散,对于类似Unix的主机上的GNU Make是正确的,它在Windows上显然是不够的。行为的差异是由于两个操作系统提供了非常不同的度量来描述其“当前”CPU负载。因此,Make的逻辑必须以不同方式解释这些CPU负载读数,以提供其--load-average功能。
--load-average
参数的目的是为Make提供何时可以启动新线程的指导;导致Make更优雅地与其他应用程序(以及其自身)共享CPU资源
在Linux中,此参数的语义非常接近其名称:new在内核报告的 load-average 时允许使用线程(我假设这是“一分钟”)平均负载,虽然可能是五分钟,但是小于参数值
在Windows中,Make根据CPU负载的加权平均值(由GetSystemTimes函数报告)和内存负载(例如来自GlobalMemoryStatusEx函数)计算负载平均值。
答案 1 :(得分:0)
在Windows上 - 显然没有。这是一个UNIX术语:http://en.wikipedia.org/wiki/Load_%28computing%29
我运行uptime
命令时,我的Cygwin副本报告零负载平均值。我不认为在Windows上有一种快速计算方法;它曾在过去的Cygwin邮件列表中被询问过。
换句话说:它没有实现,所以它总是为零。
这里是getloadavg
的实现,直接来自GNU Make 3.81来源:
# if !defined (LDAV_DONE) && (defined (__MSDOS__) || defined (WINDOWS32))
# define LDAV_DONE
/* A faithful emulation is going to have to be saved for a rainy day. */
for ( ; elem < nelem; elem++)
{
loadavg[elem] = 0.0;
}
# endif /* __MSDOS__ || WINDOWS32 */
我还没有检查过更新版本的GNU make,但我怀疑它已经改变了。