2011-03-14 85 views
3

我的应用程序在4个并发线程上运行。我可以将这些线程作为多线程以及单线程(MTA/STA)。当我声明他们STA时,结果比我声明他们的MTA更快。它是用vb.net编写的,我使用2003服务器(windows)标准版作为操作系统,处理器是单核和四核。多处理器与多核心之间的区别

我应该怎么做,使之更快?

我可以增加处理器数量为2,或我可以使用hexcore /八核处理器来代替。 任何人都可以建议吗?

谢谢。

+0

供参考:MTA/STA是COM线程的公寓。请参阅http://msdn.microsoft.com/en-us/library/ms693344(v=vs.85).aspx – 2011-03-14 10:47:09

回答

2

多个处理器意味着在主板上有多个处理器芯片。多核意味着芯片上有多个处理单元。多个处理器将具有不同的前端总线,并且多个内核通常会共享L2缓存。这些都有优势,取决于你在做什么。

对于你的问题的第二部分,答案是具体的少。如果您所做的工作不那么复杂,多线程的开销可能会超过性能收益。另外,如果你的线程试图访问相同的共享内存,锁定会减慢它们。你的线程也可能是瓶颈在IO做磁盘。没有关于你实际在做什么的信息,很难说你的问题是什么以及如何进一步进行。购买更新,更快,更大的处理器会加快速度,但这并不能解决您为什么认为程序运行速度不快的问题。花点时间处理代码,然后再开始在这个问题上投入资金。

+0

“在开始投入资金解决问题之前,先花一些时间处理代码”。虽然我同意,但我认为应该注意的是,与代码**一起工作的时间同样也是**问题的根源。有时 - 非常迟钝 - 更大/更好的机器是更快和更便宜的解决方案。 – 2011-03-14 11:20:07

+0

@BinaryWorrier:的确如此。这是一个快速而现在的解决方案与可能需要时间的解决方案之间的平衡,可能会导致错误,但也可以解决放缓的根本原因。 – unholysampler 2011-03-14 11:33:21

0

MTA应该比STA慢,因为,正如其名称所示,多个线程数可能在该公寓中运行,所以很多事情都必须涉及锁定。即使你只有一个单线程在那里运行,锁定仍然必须完成,从而导致开销。因此,在4x STA上运行的4个线程将比在4x MTA上运行的4个线程更快,即使线程和公寓是一对一匹配的。如果您不打算在对象上运行多个线程,则无法通过使您的公寓模式MTA获得任何内容。

添加更多处理器和/或内核将帮助你为你的四个线程都可能是在不同的内核上运行。

但是,增加更多的内核数量将会比线程数量增加而不是会增加性能,因为一个线程只能在一个内核上运行。在你的例子中,你的四个线程应该运行在4个内核上(不管它们属于同一个处理器)。为系统程序添加一个或两个内核(假设您不运行任何其他内容)和驱动程序,并且您可能最大限度地减少。除非增加线程数量,否则添加更多内核将无济于事,因为这些内核可能处于空闲状态。

其他事情也会影响您的并发性能:如果您的线程中存在争用点的共享资源,并且线程始终等待此资源上的锁,则添加更多内核可能无助于您因为你的瓶颈在访问共享资源,线程正在空闲等待。在这种情况下,升级到更快的CPU(就时钟速度而言)会更快,因为它会增加您满足的资源的释放速度。

添加处理器通常会比在同一处理器上增加内核更快,因为不同的核的单个处理器中共享内部资源,并且如果一个核心正在使用资源,其他核块。不过,我曾经听说过,当多个处理器必须访问相同的内存位置时,添加内核的速度会更快,并且同一信息可以存储在一个处理器内的缓存中,并在所有内核之间共享。

相关问题