我正在开发一个分析实时财务数据的应用程序。目前,我的主要计算周期具有以下设计:
long cycle_counter=0;
while (process_data)
{
(analyse data, issue instruction - 5000 lines of straightforwasrd code with computations)
cycle_counter++;
Thread.Sleep(5);
}
当我在笔记本电脑(一个Core i5)处理器上运行该应用程序时,该循环每秒运行200-205次-达到了预期的效果(如果您不关心为什么它每秒运行200次以上)。
但是,当我在具有2个6核Xeon处理器和24 GB快速RAM并在3秒钟内加载Win7的“真实”工作站上部署该应用程序时,该应用程序每秒运行大约67次。
我的问题是:
为什么会这样呢?
在这种情况下,我如何影响每秒的运行次数?
有没有更好的解决方案可以每秒运行200-1000次呢?我现在正在考虑仅删除Thread.Sleep()(在这里使用它的方式经常受到批评)。我拥有12个核心,因此在此周期内使用一个核心没有任何问题。但是这种解决方案有一些缺点吗?
谢谢您的想法。
Windows不是实时操作系统(RTOS),因此您无法精确确定线程何时恢复。Thread.Sleep(5)
真正的意思是“不迟于5毫秒唤醒我”。实际的睡眠时间由特定的硬件决定,并且主要由系统负载决定。您可以尝试system load
通过更高优先级运行应用程序来解决此问题。
顺便说一句,System.Threading.Timer是一种更好的方法(尽管上面的注释仍然适用)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句