在Linux中的工作者线程

为什么有时需要创build新的工作线程,执行可延迟的工作函数,而不是仅仅在默认的“事件/ n”内核工作线程上安排呢?

事件工作线程需要复用多个任务,所以不允许将其阻塞(在单个任务中调用schedule())。 但是有很多任务需要阻塞(等待磁盘,网络,某些设备等),并且内核中有很多功能在内部阻塞(如信号量甚至内存分配)。 这些函数只能在syscall内部或专用的内核线程中代表userland运行。

虽然理论上可能将这些代码重写为一长串事件,但这会使其变得复杂且不可维护,并且内核线程的开销也相当小。