如何在不同的核心(并行)上运行4个线程>

mat*_*ata 7 c++ parallel-processing multithreading

我想并行运行(不是并发)4线程做完全独立的事情.我是平行主义的新手,我有几个问题.我想这样做的原因是因为性能对我来说非常重要.我正在使用4核Windows机器,我在Visual Studio Community 2015中使用C++.

1.我应该尝试自己调度线程,以便每个线程运行在不同的核心上,还是应该让OS Scheduler执行此操作?在我看来,我认为如果我强制它在不同的核心上运行每个线程会更快.我怎样才能做到这一点?

这是我到目前为止所尝试的:

#include <thread>
void t1(){//do something}
void t2(){//do something}
void t3(){//do something}
void t4(){//do something}

int main(){
   std::thread thread1(t1);
   std::thread thread2(t2);
   std::thread thread3(t3);
   std::thread thread4(t4);

   t1.join();
   t2.join();
   t3.join();
   t4.join();
}
Run Code Online (Sandbox Code Playgroud)

我知道join()会阻塞线程直到完成.但我不确定它是否并行运行线程?我的代码是同时还是并行执行线程的?你能给我一个例子或推荐一个教程.如果可能,不使用外部库.

谢谢

编辑:

并发性主要是在同时执行两个任务时.这可能意味着一个人在短时间内"暂停",而另一个人正在努力

并行性要求在特定时刻至少执行两个进程/任务.

rus*_*tyx 7

你完成了,不需要安排任何事情.只要有多个处理器可用,您的线程就会在可用内核上同时运行.

如果可用的处理器少于4个,例如2,则线程将以交错方式运行,在任何给定时间最多运行2个.


ps它也很容易为自己体验 - 只需制作4个无限循环并在4个不同的线程中运行它们.您将看到正在使用4个CPU.


免责声明:当然,"引擎盖下",调度由OS为你做.因此,您依赖于内置于操作系统中的调度程序的质量以实现并发性.内置于运行C++应用程序的操作系统中的调度程序的公平性超出了C++标准,因此无法保证.实际上,尤其是在学习编写并发应用程序时,大多数现代操作系统将在线程调度中提供足够的公平性.