为什么测量循环的执行时间会在执行后给出不同的结果执行? [重复]

问题描述 投票:-1回答:1

我知道这很愚蠢,但是我仍然不得不问这个问题,因为它困扰了我好几天了。

我使用多种方法进行测试,但结果差异很大。

The execution time of a million double-int conversions is the same as empty loop

c# .net loops benchmarking
1个回答
0
投票

好而聪明的问题。

秒表的经过结果有所不同,因为现代计算机和现代操作系统,即使是现在的智能手机,也不同于旧的Dos,是多任务的。

因此,当您进行循环测量时,具有软件线程的其他一些软件进程以及OS内核本身会同时运行。

现代CPU能够同时执行多条指令:每个实际内核一条指令。错误的内核或硬件线程将名为Hyper-Threading的上下文保存系统用于Intel的CPU。例如,英特尔销售的Core i7-4770具有4个内核和8个线程,每个内核两个。

多线程在进程内部。多重处理用于流程。它们都是多任务的。进程是应用程序启动的过程,它可以具有一些线程。多任务处理是CPU同时执行多条指令的能力。例如,现代Intel上的Windows 10支持多处理和多线程。

Computer multitasking

True multitasking

CPU multitasking

如果您在Dos单任务中测量循环,则运行后将得到相同的结果。

但是在多任务操作系统中,您应该进行一些运行,比如说十几个半,然后进行平均计算。

因此,当您测量一个循环时,已注册到系统事件的所有正在运行的进程都会收到通知,内核也会执行某些操作,Windows资源管理器也会运行所有其他应用程序,因为任务管理器和CPU会管理所有这些正在运行的进程进程以及I / O中断(例如键盘和鼠标事件和驱动器操作)以及驱动程序(例如图形输出)。


您还可以阅读这些答案,这些答案说明了早期迭代较慢的情况下的大多数提升。

[全速运行循环也会产生各种结果,如果您是在非常短的时间间隔内进行测量,而不是在较长的运行时间上进行平均,则可能来自中断处理程序是否在运行。

© www.soinside.com 2019 - 2024. All rights reserved.