Mah*_*ell 7 c++ multithreading c++11
我只是(对我而言)非常奇怪的观察,并想知道这是怎么回事.我测试了以下两个版本的代码:
chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
process_data(l, 8);
chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
chrono::duration<double> time_span = chrono::duration_cast<chrono::duration<double>>(t2 - t1);
cout << "time used: " << time_span.count() << endl;
Run Code Online (Sandbox Code Playgroud)
VS
chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
thread t1 = thread(process_data, l, 8);
t1.join();
chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
chrono::duration<double> time_span = chrono::duration_cast<chrono::duration<double>>(t2 - t1);
cout << "time used: " << time_span.count() << endl;
Run Code Online (Sandbox Code Playgroud)
由于我不明白的原因,第二个版本快了20%......
怎么会这样?本chrono::steady_clock应正确测量的时候,我想......但我看不出如何创建另一个线程,并等待它实际上是更快然后与初始线程做.我错过了什么?
一些细节:除了上面发布的片段之前的l的定义之外没有代码,并且之后没有其他计算(它是主函数)并且process_data()只是一个大量的数字处理器,包括一些文件读取操作(没有使用线程)那里).
您获得的唯一开销是线程创建,因为您的主线程只会休眠直到连接为止。
考虑到您的程序需要 7,7 或 6,5 秒才能运行,与您的 process_data 相比,线程创建开销毫无意义。
所以你的问题现在可以变成:为什么工作线程比主线程更快?
发生这种情况的原因有很多,我想到的有几个:
操作系统/其他程序通常会在进程的主线程之后进行通信、观看等,因此主线程比用于大数据处理的工作线程慢并不罕见。
即使该线程是优先级较高的线程,也不能保证该线程上的事物会移动得更快。
这是另一个类似的问题:为什么主线程比 pthread-win32 中的工作线程慢?