【发布时间】:2013-07-30 10:11:30
【问题描述】:
我正在开发一款需要以高性能运行的软件,我想知道它是否应该作为 Windows 服务或常规 Windows 应用程序运行。问题是:两者在性能方面有什么区别吗?意思是:操作系统调度器会给 Windows-Service 比 Windows-Application 更多的 CPU ticks 吗?
【问题讨论】:
标签: windows performance service
我正在开发一款需要以高性能运行的软件,我想知道它是否应该作为 Windows 服务或常规 Windows 应用程序运行。问题是:两者在性能方面有什么区别吗?意思是:操作系统调度器会给 Windows-Service 比 Windows-Application 更多的 CPU ticks 吗?
【问题讨论】:
标签: windows performance service
要回答问题,请参阅Description of Performance Options in Windows:
您可以使用性能选项将 Windows 设置为针对前台程序或后台服务进行优化。假设后台服务的数量相对较少,CPU 时间越长效率越高,桌面计算机上的程序服务器或交互式程序效率越高,时间片越短,对键盘输入和为更多线程提供服务(应用服务器模式下的终端服务有数千个。
...
启用“前台应用程序”选项后,情况会变得更加复杂。这就引入了“可变量子”的概念。在这种情况下,后台任务接收的量程与前台任务接收的量程不同。此外,这两组量子都比线程在用于后台服务的计算机集上接收到的要短。目前,后台进程接收到的时间片为 3,而前台进程接收到的时间片为 9。因此,您可以计算线程在计时器到期之前将运行的时间长度。
阅读整个链接了解更多详情。 TL/DR:后台服务接收更长的 quantas。
但是,我非常怀疑您是否需要担心此设置。首先,99.9999% 的应用程序一直什么都不做,只是等待一些 IO 完成(磁盘、网络)。除非您在紧密循环中执行算术运算,否则出于所有实际原因,您的代码从不运行并始终等待。提升对您没有任何帮助。而且我非常怀疑您是否真的需要部署一个在紧密循环中执行高 CPU 的服务。
与您更相关的主题是查看High Performance Windows Programs 以了解如何在 Windows 上编写适当的性能程序(即使用 IO 队列完成状态和朋友)。
而且,如果您需要 CPU 提升,只需禁用 CPU power savings in BIOS。
【讨论】:
By default, on client versions of Windows threads are permitted to run up to 2 clock ticks (6 if in the foreground)(而不是服务器的 3 和 9)。