有人可以帮助澄清我对内核线程的理解。我听说,在 Linux/Unix 上,内核线程(例如系统调用的线程)比用户线程执行得更快。但是,那些用户线程不是由内核调度并使用内核线程执行的吗?有人可以告诉我内核线程和用户线程之间有什么区别,除了他们可以访问不同的地址空间这一事实。它们之间还有什么区别?在单个处理器上,当用户线程运行时,内核会被挂起,这是真的吗?
提前致谢,
亚历克斯
有人可以帮助澄清我对内核线程的理解。我听说,在 Linux/Unix 上,内核线程(例如系统调用的线程)比用户线程执行得更快。但是,那些用户线程不是由内核调度并使用内核线程执行的吗?有人可以告诉我内核线程和用户线程之间有什么区别,除了他们可以访问不同的地址空间这一事实。它们之间还有什么区别?在单个处理器上,当用户线程运行时,内核会被挂起,这是真的吗?
提前致谢,
亚历克斯
我听说,在 Linux/Unix 上,内核线程(例如系统调用的线程)比用户线程执行得更快。
这是一个很大程度上不准确的说法。
内核线程用于内核内部的“后台”任务,例如处理中断和将数据刷新到磁盘。大部分系统调用由内核在调用它们的进程的上下文中处理。
内核线程的调度方式或多或少与用户进程相同。一些内核线程的优先级高于默认优先级(在某些情况下高达实时优先级),但说它们“执行得更快”是一种误导。
在单个处理器上,当用户线程运行时,内核会被挂起,这是真的吗?
当然。在单个 CPU 内核上一次只能运行一个进程。
话虽如此,在许多情况下内核可以中断正在运行的任务并切换到另一个任务(可能是内核线程):
select()
或read()
)。