为什么两个进程比两个线程有优势?



我有一个基于MSMQ的位置应用程序,我从现场的单位接收位置更新,并将其处理并放入数据库。

更新进程在数据库之外没有依赖关系,所以我的应用程序可以配置一个可变数量的线程。由于我希望流程在失败时保持健壮,所以我希望处理尽可能多的消息,但不能处理更多(因此,如果系统失败,我可以从离开的地方捡起)。

应用程序正常工作,但我已经看到了,如果我提高我用来处理消息的线程数量,我的avg的消息数量在一个级别(我使用性能计数器来测量),得到系统利用,说,50%的CPU时间(我有一个酷睿i7 820 qm 4个物理核心和8个逻辑核心),但是如果我提高线程,而是发射相同数量的过程,我开始使用100%的CPU时间,并获得更高数量的平均事件处理。

可能是锁争用问题吗?与Windows 7处理超线程处理器的方式有关?我希望了解问题的本质,如有任何建议,我将不胜感激。

注意:我在这个项目中使用MSMQ, Rx和实体框架。

没有看到你的代码很难给出一个确切的答案,但我还是会添加一些可能性

首先争用会有很大的影响,你使用什么锁类型?

其次。net框架可以产生影响,对于。net 2.0 &早期的内核对象被用作锁定机制。

相关内容

  • 没有找到相关文章

最新更新