为什么这个简单的 C 程序在 Ubuntu 和 Windows 中使用了不同的 cpu 用法?
Why this simple C program uses has different cpu usage in Ubuntu and Windows?
我是编程新手,最近学习了 if 语句,所以我尝试用 C 编写这个程序。
#include <stdio.h>
#include <stdbool.h>
int main()
{
int Value = 0;
int Input = 100000000;
ritorna:;
Value++;
if(Value < Input)
{
printf("%i\n", Value);
goto ritorna;
}else
{
printf("%i\n", Input);
}
return 0;
}
我想看看它在不同机器上的速度表现如何,所以我在我的 Ubuntu 双核 cpu 电脑上编译了它,然后我在一台机器上做了同样的事情Windows 机器具有更强大的方式 cpu。我所拥有的是代码 运行 以他的最大速度在 Ubuntu 上使用了 100%cpu,而在 Windows 上它只有 50% 使用率(因此速度较慢)。
我想知道为什么会这样......
谢谢
有几种情况会导致这种情况。
首先,监控 CPU 使用情况的程序以不同的方式报告。 Windows 任务管理器报告一个完整 CPU 核心的最大使用量为 50%。 Apple 报告每个 CPU 核心 100%,因此 8c/16t 系统报告所有核心最大使用率为 1600%。
其次,您的程序将所有时间都花在执行 printf 输出上。这取决于 printf 的速度和输出控制台的速度。在 Windows 上,这非常慢。在将输出定向到文件时尝试速度比较。
依我拙见,您比较的不是每个程序的 cpu 消耗,因为可能两者会做同样的事情,而是 [=20= 中的 I/O 系统之间的差异] 并在 linux 中打印 Value
.
的每个值的值
虽然 printf()
被优化为在两个系统中的块中执行 input/output,但缓冲区大小被优化以获得最佳操作系统性能,从这个意义上说,Windows 和Linux 是非常不同的程序,因为它们以非常不同的方式实现 I/O。并认为循环 100000000 次迭代是很多 input/output.
我在 linux 上有一个 4 核 CPU。所以发布的代码只使用了 CPU.
的 25%
您的 windows 机器有 2 个内核,因此它最多可以达到 CPU 的 50%。
在这两种情况下,都消耗了整个 CPU 个核心
我是编程新手,最近学习了 if 语句,所以我尝试用 C 编写这个程序。
#include <stdio.h>
#include <stdbool.h>
int main()
{
int Value = 0;
int Input = 100000000;
ritorna:;
Value++;
if(Value < Input)
{
printf("%i\n", Value);
goto ritorna;
}else
{
printf("%i\n", Input);
}
return 0;
}
我想看看它在不同机器上的速度表现如何,所以我在我的 Ubuntu 双核 cpu 电脑上编译了它,然后我在一台机器上做了同样的事情Windows 机器具有更强大的方式 cpu。我所拥有的是代码 运行 以他的最大速度在 Ubuntu 上使用了 100%cpu,而在 Windows 上它只有 50% 使用率(因此速度较慢)。 我想知道为什么会这样...... 谢谢
有几种情况会导致这种情况。
首先,监控 CPU 使用情况的程序以不同的方式报告。 Windows 任务管理器报告一个完整 CPU 核心的最大使用量为 50%。 Apple 报告每个 CPU 核心 100%,因此 8c/16t 系统报告所有核心最大使用率为 1600%。
其次,您的程序将所有时间都花在执行 printf 输出上。这取决于 printf 的速度和输出控制台的速度。在 Windows 上,这非常慢。在将输出定向到文件时尝试速度比较。
依我拙见,您比较的不是每个程序的 cpu 消耗,因为可能两者会做同样的事情,而是 [=20= 中的 I/O 系统之间的差异] 并在 linux 中打印 Value
.
虽然 printf()
被优化为在两个系统中的块中执行 input/output,但缓冲区大小被优化以获得最佳操作系统性能,从这个意义上说,Windows 和Linux 是非常不同的程序,因为它们以非常不同的方式实现 I/O。并认为循环 100000000 次迭代是很多 input/output.
我在 linux 上有一个 4 核 CPU。所以发布的代码只使用了 CPU.
的 25%您的 windows 机器有 2 个内核,因此它最多可以达到 CPU 的 50%。
在这两种情况下,都消耗了整个 CPU 个核心