我想知道何时使用lambda表达式定义线程,这将有助于提高一些性能。就我而言,我必须运行多个线程。这是基于实时的应用程序。因此,如果有人向我建议创建多个线程的最佳方法是什么。创建线程发生在实际代码库的每次迭代中。这是高级迭代中正在发生的事情的一个示例。因此,这是将要优化的一种昂贵的操作。
#include <iostream>
#include <thread>
#include <vector>
#include <algorithm>
class Task
{
public:
void execute(std::string command)
{
//TODO actual logic
for(int i = 0; i < 5; i++)
{
std::cout<<command<<std::endl;
}
}
};
int main()
{
Task* taskPtr = new Task();
std::vector<std::thread> workers_older;
for (int i = 0; i < 2; i++) {
workers_older.push_back(std::thread(&Task::execute, taskPtr, "Task: without lambda expression"+ std::to_string(i)));
}
std::for_each(workers_older.begin(), workers_older.end(), [](std::thread &t)
{
t.join();
});
std::vector<std::thread> workers;
for (int i = 0; i < 2; i++) {
workers.push_back(std::thread([&]()
{
taskPtr->execute("Task: "+ std::to_string(i));
}));
}
std::for_each(workers.begin(), workers.end(), [](std::thread &t)
{
t.join();
});
return 0;
}
编辑:
在对要执行的操作提出宝贵意见之后,我按照他们的建议提供了答案。
最佳答案
将成员函数的地址和一组参数传递给std::thread
构造函数与传递具有适当捕获的lambda函数之间的开销几乎没有差别。std::thread
构造函数中的大开销实际上是在启动线程本身。
如果您知道要在程序的多个位置使用相同数量的工作线程,则可能值得将它们作为长时间运行的线程并排成一排的任务。
关于c++ - 构造多个线程以获得最佳性能的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59282836/