计算线程 运行 时间的正确方法是什么?
What's the right way to count the thread run time?
像这样:
thread t1(getPrimes,begin,end, ref(vect));
start = chrono::high_resolution_clock::now();
t1.join();
finish = chrono::high_resolution_clock::now();
或者像这样:
start = chrono::high_resolution_clock::now();
thread t1(getPrimes,begin,end, ref(vect));
t1.join();
finish = chrono::high_resolution_clock::now();
我应该在线程 t1 之前还是之后启动它?
新执行线程的开始顺序为仅与std::thread
的构造函数的完成。
在第一个版本中,整个执行线程理论上可以运行和finish 在原始执行线程调用 now
() 之前 first 时间。 C++ 不保证执行线程不会真正启动并且 运行 仅在第一次调用 now
.
之后
第二个版本保证覆盖整个执行线程,加上一点std::thread
的构造开销。
更好的方法是将 运行 时间捕获移动到实际执行线程本身。
像这样:
thread t1(getPrimes,begin,end, ref(vect));
start = chrono::high_resolution_clock::now();
t1.join();
finish = chrono::high_resolution_clock::now();
或者像这样:
start = chrono::high_resolution_clock::now();
thread t1(getPrimes,begin,end, ref(vect));
t1.join();
finish = chrono::high_resolution_clock::now();
我应该在线程 t1 之前还是之后启动它?
新执行线程的开始顺序为仅与std::thread
的构造函数的完成。
在第一个版本中,整个执行线程理论上可以运行和finish 在原始执行线程调用 now
() 之前 first 时间。 C++ 不保证执行线程不会真正启动并且 运行 仅在第一次调用 now
.
第二个版本保证覆盖整个执行线程,加上一点std::thread
的构造开销。
更好的方法是将 运行 时间捕获移动到实际执行线程本身。