问题:

1) 为什么 从用户进程创建内核线程

2) 为什么采用task work的机制

void io_wq_worker_sleeping(struct task_struct *tsk)  增加

​https://lkml.org/lkml/2020/8/19/561​

2.  增加 cond_resched

​[PATCH] io_uring: allow conditional reschedule for intensive iterators​


内核不可抢占系统中(如centos系统),在内核态运行的程序可调用cond_resched主动让出cpu,防止其在内核态执行时间过长导致可能发生的soft lockup或者造成较大的调度延迟。

cat /boot/config-4.19.0-arm64-desktop |grep -i CONFIG_PREEMPT
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPTIRQ_DELAY_TEST is not set