要解决的一个问题(和更好的多任务处理我的理解),我已经写了一个小的线程池实现。这个线程池会加速一些工作线程,这些工作线程会在线程池的客户端添加它们时将任务从队列中弹出。出于此问题的目的,当任务队列为空时,工作线程全部终止。最大化工作线程利用
做一些基本的标杆,我已经发现了应用程序后花费〜其60%的时间等待获取队列锁。据推测,这主要发生在工作者线程内。
这仅表示我不会放弃工作线程足够的做,或更多的东西?有没有直截了当的我可能会失去增加工作线程吞吐量?
编辑:这是一些粗略的伪代码,应该说明一些事情。这些是锁被收购的只有两个地方/工作线程的执行过程中释放(这是绝大多数的应用程序的运行时间。)
std::list<task_t> task_list;
// Called by the client to add tasks to the thread pool
void insert_task(const task_t& task)
{
lock_type listlock(task_mutex);
task_list.push_back(task);
}
// The base routine of each thread in the pool. Some details
// such as lifetime management have been omitted for clarity.
void worker_thread_base()
{
while (true)
{
task_t task;
{
lock_type listlock(task_mutex);
if (task_list.empty())
continue;
task = task_list.front();
task_list.pop_front();
}
do_task(task);
}
}
我们需要查看一些代码,以了解为什么您的应用程序卡在队列锁中。我认为你的线程大部分时间应该停留在“等待”状态(使用条件变量或类似的东西)。 – Starkey 2010-08-05 17:17:54