如何在其他核心上运行每个线程?

时间:2012-10-14 08:42:09

标签: c++ multithreading udp multicore

我有一个接收数据并计算它的udp服务器。

我为每个角色都有两个帖子。

在我的cpu中是一个8多核,我以各种速度发送数据。

但是在最大化时,我使用ony%14%的cpu两个核心50%。如果我发送更多数据valume,我的缓冲区将充满,并且不使用更多cpu。

为什么每个核心只出现50%而不是更多?

我认为将这两个角色分为多核。

我想确保每个人都在其他核心上。

我如何明确地选择在其他核心上运行的每个线程?

我的程序在c ++ visaul studio 9上运行并在windows7上运行,我使用boost :: thread。

3 个答案:

答案 0 :(得分:4)

调度程序将处理您的线程等运行的位置。这是特定于操作系统的,因此如果您想尝试更改代码的运行方式,则需要一个特定于操作系统的API,以便您设置线程关联等。

另外,取决于你的应用程序是什么样的,它的客户端服务器的外观,所以它不完全是CPU绑定。你总共有几个线程,你提到每个角色2个?线程只能在一个CPU上运行。尝试制作可以真正并行运行的工作单元,这样它们可以真正独立运行,理想情况下可以在不同的核心上运行。

操作系统通常可以很好地运行您的代码,因为它将有更好的整体情况。

答案 1 :(得分:1)

您不能让一个线程使用多个核心。为了获得更好的CPU利用率,您需要重新设计程序以创建更多线程,并让操作系统为您安排它们。无需手动将线程限制为特定核心。操作系统非常擅长弄清楚如何为线程分配内核。

在您的情况下,如果数据计算任务的CPU很重,您可以为每个请求生成一个新线程,或者有一个工作线程池,它将选择传入的任务并处理它们。这只是一个想法。如果不了解您的应用程序架构及其试图解决的问题,很难说。

答案 2 :(得分:1)

在每个线程中,您可以使用SetThreadAffinityMask来选择线程应在其上运行的CPU。但我建议你为每个传入的请求创建一个新的工作线程(如果你使用线程池,你会看到相当大的性能提升)