工作队列就是有某些关系排在一块一个链表上的 任务列表,便于统一关系这些有关系任务(work)。这个work 不是线程,但是可以挂靠在其他线程中运行。
等待队列就是一个链表 为了维护一个等待某个资源而休眠的进程的列表;一般最好自己维护一个线程
唤醒队列线程就是修改其状态 task为可运行,用于调度过程。
schedule_work 和 wake_up 区别
schedule_work 依赖于系统默认工作队列 最终会调用 wake_up_process(worker->task);
如果任务不繁重,用cpu默认共享队列线程。 如果事情比较多比较耗时,那就自己创建一个线程额外维护,因为系统不知道什么时候唤醒你的任务 比较合适。
wake_up 是针对自己创建等待队列的唤醒动作,而且 把任务移除等待队列的过程,list_del_init(&wait->task_list);
wait_event 是wake_up 反操作 , 就是把当前等待进程进入 等待队列的过程。
wait_event里面是循环 判断是否继续执行还是等待。如果满足跳出循环的条件,执行跳出循环,继续下面工作;否则就要继续等待(睡眠让出cpu)
schedule_work是通过把work 加载在系统线程池里面等着被调度, wake_up唤醒的是自己创建的线程。
所以工作队列是一些任务合集,等待队列是一些线程合集。schedule_work 做的是把这work 挂靠的task 唤醒,wake_up