如何运行在其他核心的每个线程?(how to run each thread on other co

2019-08-01 11:15发布

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

我有两个线程为每个角色。

在我的CPU是8多核和我在杂色山雀的速度发送数据。

但maximun我用ONY%14%我的CPU两个核心的50%。 如果我发送更多的数据valume我的缓冲区溢满并且不使用更多的CPU。

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

我觉得划分这两角色多核。

我想,以确保每一个其他核心。

怎么我可以明确地选择其它核心的每个线程运行?

我的程序又写道于C ++ VISAUL工作室9和Windows7的运行,我使用boost ::线程。

Answer 1:

调度将处理您的线程等将运行。 这是OS特定的,因此,如果您想尝试改变代码如何运行,你需要一个操作系统特定的API,可以让你设置一个线程亲和力等

此外,取决于你的应用是什么样的,它通过它的外观客户端服务器,所以它不是完全CPU绑定。 多少个线程你有总,你提到2%的作用? 一个线程只能在一个CPU上运行。 尽量使工作的单位,可以在平行真正办成,这样,他们可以独立运行的真实,最好在不同的内核。

操作系统通常会做的运行代码的一个很好的工作,因为这将有更好的整体画面。



Answer 2:

你不能让一个线程使用一个以上的核心。 为了达到你需要重新设计你的程序创建多个线程,让操作系统安排他们为你更好的CPU利用率。 有没有需要手动限制线程特定的核。 操作系统是在搞清楚如何分配内核线程真的很不错。

在你的情况,如果数据计算任务繁重的CPU,你可以酿出每个请求一个新的线程或具有将被挑选进来的任务,并处理他们的工作线程池。 这只是一个想法。 这很难不知道更多关于你的应用程序架构和它试图解决的问题的话。



Answer 3:

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



文章来源: how to run each thread on other core?