2013-07-30 45 views
0

我正在开发一款需要以高性能运行的软件,我想知道它是否应该作为Windows服务或常规Windows应用程序运行。问题是:在性能方面两者是否有区别?意思是:操作系统调度程序是否会给Windows服务提供比Windows应用程序更多的CPU ticks?Windows服务性能与Windows应用程序性能

回答

2

要回答这个问题,看Description of Performance Options in Windows

您可以使用性能选项将Windows设置可以针对任何前台程序或后台服务优化。假设背景服务的数量相对较少,并且在CPU时间更多的情况下效率更高,并且台式计算机上的程序服务器或交互式程序在更短的时间片内效率更高,从而可以更快地响应键盘输入和以服务更多的线程(成千上万的终端服务应用程序服务器模式。

...

成为当您启用前台应用程序选项更为复杂的局面。这将引入“变量量子”的概念。在这个情况下,后台任务的接收量与前台任务接收到的量程不同,而且这两个量程比线程在后台服务设置的计算机上收到的时间要短。 y,后台进程接收3的量程,前台进程接收9的量程。因此,可以计算线程在定时器到期之前将运行的时间长度。

阅读整个链接了解更多详情。 TL/DR:后台服务接收更长的量子。

但是,我非常怀疑你需要担心这个设置。首先,最重要的是,99.9999%的应用程序始终不做任何事情,但等待一些IO完成(磁盘,网络)。除非您在紧密循环中执行算术运算,否则由于所有实际原因,您的代码始终在等待永不运行。助推器不会帮助你。而且我非常怀疑你真的需要部署一个服务,它可以在紧密的环路中执行高CPU。

对于你来说更相关的主题是通过High Performance Windows Programs学习如何在Windows上编写适当的性能程序(即使用IO队列完成状态和朋友)。

而且,如果您需要CPU提升,则只需禁用CPU power savings in BIOS即可。

+0

优秀的答案。为了增加这一点(尽管我现在找不到参考文献......),无论用户设置如何,服务器和非服务器版本的Windows之间都存在类似的可变量子事物。此外,当然,由于优先级提高对正在发送的事件的影响。 – Damon

+0

@Damon:或许[Windows Vista内核:第1部分](http://technet.microsoft.com/en-us/magazine/2007.02.vistakernel.aspx):'默认情况下,在客户端版本的Windows线程上允许运行多达2个时钟滴答(如果在前台为6个)'(而不是服务器的3和9)。 –

+0

确实,就是这样! :) – Damon