2013-04-23 124 views
0

我使用(HANDLE)_beginthreadex()创建了一个C++窗口控制台应用程序,其中使用x处理程序线程控制了1000个工作线程。C++中的线程控制台应用程序

最初我以为1000处理程序线程会导致最快的时间,但经过测试后,我发现使用100个处理程序线程会得到最快的时间。 该测试是在一个四核英特尔i7处理器(支持超线程)上进行的

我不知道该写些什么来解释为什么这个线程数目会导致最佳性能。由于我的处理器只能同时处理8个线程,我以为8会是最好的性能。

我正在写一个关于应用程序的小报告,并且必须确定导致最佳性能的线程数量并解释为什么会出现这种情况。

+0

这是值得注意的这个答案http://stackoverflow.com/questions/12124586/make-two-thread-in-two-different-core-in-c,你还没有测试过它是如何当这些线程的百分比*实际上*分布在不同的内核上...... – 2013-04-23 20:19:20

回答

3

您希望一次有8 活动线程理想。有8个原因可能不是理想数字的原因有很多,但是您的线程工作不受CPU限制。如果在这种情况下你的线程太少,那么你会浪费时间,而太多的话当然会造成不必要的争用 - 并且可能导致太多的上下文切换。

+1

IOW,剖析应用程序以查看线程正在等待非CPU工作完成的位置。 (+1) – usr 2013-04-23 20:27:33

+0

在我的应用程序中,我首先启动我的1000个工作线程,然后我的处理程序线程第二个,它们的启动顺序是否重要?如果处理程序线程先启动并准备好在完成任务时处理工作线程,程序是否会运行得更好? – Split 2013-04-23 20:47:17

+0

一旦你经历了一些口吃,操作系统调度程序将占主导地位,所以几秒钟后可能无所谓。当然,唯一可以确定的方法是进行配置。 – Joel 2013-04-24 02:27:50