为什么两个进程优于2个线程?

时间:2011-04-27 21:12:53

标签: c# multithreading entity-framework msmq system.reactive

我有一个基于MSMQ的位置应用程序,我从该字段中的单位接收位置更新,并将它们处理并放入数据库中。

更新过程没有DB之外的依赖关系,所以我的app可以配置可变数量的线程。因为我希望这个过程在失败的情况下是健壮的,我想尽可能多地处理消息,但不要更多(所以如果系统出现故障,我可以选择离开的地方)。

我让应用程序正常工作,但我已经看到,如果我提高了用于处理消息的线程数,我的平均消息数量是一个级别(我使用性能计数器来测量它),我让系统利用50%的可用CPU时间(我有一个Core i7 820QM,带有4个物理内核和8个逻辑内核),但是如果我不是提高线程,启动相同数量的进程,我会得到使用100%的CPU时间,并获得更多的平均事件处理。

这可能是锁争用问题吗?与Windows 7处理超线程处理器的方式有什么关系?我希望了解问题的本质,任何指针都会非常感激。

注意:我在这个项目中使用MSMQ,Rx和Entity Framework。

1 个答案:

答案 0 :(得分:0)

如果没有看到你的代码很难给出确切的答案,但无论如何我都会添加一些可能性

首先,争用会产生巨大影响,您使用的锁定类型是什么?

其次.Net框架可能对.Net 2.0&早期的内核对象被用作锁定机制。这些必需的内核转换可以改变影响性能的状态。