为什么有时需要创建新的工作线程来执行可延迟的工作函数,而不是仅仅在默认的“events / n”内核工作线程上调度它?
答案 0 :(得分:7)
事件工作线程需要复用许多任务,因此不允许阻塞它(在单个任务中调用schedule())。但是,有许多任务需要阻塞(等待磁盘,网络,某些设备等),内核中有很多内部阻塞的功能(如信号量甚至内存分配)。这些函数只能在系统调用或专用内核线程中代表userland运行。
虽然理论上可以将这样的代码重写为一长串事件,但它会使它变得复杂且不可维护,并且内核线程的开销非常小。