您的位置:首页 > 产品设计 > UI/UE

workqueue分析

2014-02-01 22:48 316 查看
__queue_work函数

1、确保调用时禁止中断;

2、选择pwq,如果指定了CPU,则选择wq->cpu_pwqs;否则选择wq->numa_pwq_tbl[node];如果该work_struct上次执行过,则选择上次执行的pwq;

3、当前工作着色区需处理的工作数量pwq->nr_in_flight++;

4、如果pwq待执行的工作数量没有达到pwq->max_active,则把新工作排列到pwq->pool->worklist;否则排列到pwq->delayed_works;

worker_thread函数

1、当被唤醒后,脱离idle状态和队列;

2、如果POOL中已经有足够的worker在处理工作,则再次进入idle睡眠状态;

3、如果没有多余的idle备用,则调用manage_workers创建更多的worker;

4、依次处理pwq->pool->worklist和worker->scheduled上等待的工作,直到工作处理完成或者POOL中允许的worker多余1个;

5、如果需要再次管理worker,则调用manage_workers(worker);

6、该worker再次进入IDLE状态,等待再次被唤醒;

pwq->delayed_works上面的工作被提交到pwq->pool->worklist出现在两个地方:pwq_adjust_max_active和pwq_dec_nr_in_flight

atomic_dec_and_test函数:先返回数据,再自减

flush_workqueue_prep_pwqs函数:指定wq下面的每个pwq的work_color和flush_color
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: