多处理器和多核之间的区别

时间:2011-03-14 10:33:53

标签: .net multithreading

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

我该怎么做才能让它更快?

我可以将处理器数量增加到2,或者我可以使用hexcore / octal核心处理器代替。 有人可以建议吗?

感谢。

2 个答案:

答案 0 :(得分:2)

多处理器意味着主板上有多个处理器芯片。多核意味着芯片上有多个处理单元。多个处理器将具有不同的前端总线,并且多个核通常将共享L2高速缓存。根据你正在做的事情,这两者都有优势。

对于问题的第二部分,答案不太具体。如果你正在做的工作并不复杂,那么多线程的开销可能会超过性能提升。此外,如果您的线程正在尝试访问相同的共享内存,则锁定会降低它们的速度。您的线程也可以瓶颈,将IO写入磁盘。如果没有关于您实际在做什么的信息,很难说您的问题是什么以及如何继续进行。购买更新,更快,更大的处理器可以加快速度,但它并没有解决为什么你认为你的程序运行速度不快的问题。在你开始为这个问题投入资金之前花些时间处理代码。

答案 1 :(得分:0)

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

添加更多处理器和/或核心将有助于您,因为您的四个线程可能在不同的核心上运行。

但是,添加更多核心而不是线程数会增加性能,因为一个线程只在一个核心上运行。在您的示例中,您的四个线程应该在4个核心上运行(无论它们属于同一个处理器)。为系统程序添加一个或两个核心(假设你没有运行任何其他东西)和驱动程序,你可能最大化。添加更多内核将无济于事,因为除非您增加线程数,否则这些内核可能处于空闲状态。

其他因素也影响您的并发性能:如果您的共享资源是您的线程中的争用点,并且您的线程一直在等待此资源上的锁定,那么添加更多内核可能对您没有帮助,因为你的瓶颈在于访问共享资源,线程正在空闲等待。在这种情况下,升级到更快的CPU(就时钟速度而言)将更快,因为它会提高您的满足资源的释放速度。

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