【发布时间】:2016-08-15 20:29:10
【问题描述】:
我想并行运行(不并发)1四个线程做完全独立的事情。我是并行的新手,我有几个问题。我之所以要这样做是因为性能对我来说真的很重要。我正在使用 4 核 Windows 机器,并且在 Visual Studio Community 2015 中使用 C++。
我应该尝试自己调度线程,以便每个线程在不同的内核上运行,还是应该让操作系统调度程序来执行此操作?在我看来,我认为如果我强制它在不同的核心上运行每个线程会更快。我该怎么做?
这是我迄今为止尝试过的:
#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();
}
我知道join() 会阻塞线程直到它完成,但我不确定它是否并行运行线程?我的代码是并发还是并行执行线程?
1注意:
并发本质上是同时执行两个任务。这可能意味着一个在短时间内“暂停”,而另一个正在处理中。
并行性要求在特定时刻至少有两个进程/任务正在积极执行。
【问题讨论】:
-
“同时或并行”
-
你不能选择在哪个核心线程上运行,这是由操作系统完成的。
-
@Blorgbeard 查看编辑并搜索并发与并行,您会明白我的意思。
-
@doug 并发是操作系统的属性,并行是CPU的属性,这些是不同的东西。 raywenderlich.com/wp-content/uploads/2014/01/…
-
@doug 是的,它们同时运行,但一个可以暂停,而另一个正在运行,然后反过来等等。请看照片raywenderlich.com/wp-content/uploads/2014/03/…
标签: c++ multithreading parallel-processing