ThreadPool.hpp中RunInThread函数的一点疑问。
Opened this issue · 2 comments
hizoubin commented
你好! RunInThread中一次把同步队列中的任务都右值引用了,这样也是单个线程里依次在跑所有的任务啊。而不是分别在各个线程中跑一个任务?
请问我的理解有错误么?谢谢
void RunInThread()
{
while (m_running)
{
//取任务分别执行
std::list<Task> list;
m_queue.Take(list);
for (auto& task : list)
{
if (!m_running)
return;
task();
}
}
}
qicosmos commented
这个看使用场景,如果生产者和消费者达到一个平衡的情况下,比如每次入队几个任务,每次出队几个任务的时候,一个线程一次取走全部的几个任务是可以的,还能有一点性能优化,不必每次取任务都去加锁一次,这里是取一批任务加锁一次。一般情况下不这样用,还是一次一个任务的好。