为什么用户级线程比内核级线程快?

vik*_*cks 6 kernel threads

我发现用户级线程比内核级线程快很多,但我找不到任何令人信服的例子来说明为什么用户级线程比内核级线程快?有人可以向我解释一下。

内核级线程速度慢且效率低下。例如,线程操作比用户级线程慢数百倍。

取自这里

pjc*_*c50 7

内核级线程需要上下文切换,这涉及更改定义当前内存映射和权限的大量处理器寄存器。它还会驱逐部分或全部处理器缓存。

用户级线程只需要在一个内核线程或进程中进行少量记录。

但是,如果您的线程主要执行 I/O 操作,则差异并不大,因为无论如何这些操作都必须通过内核。如果您尝试使用大量独立进程来实现某种模拟,这一点最为重要。在这种情况下,您需要仔细注意您使用的线程同步机制,因为其中一些还会进入内核并触发上下文切换。

http://www.cs.rochester.edu/u/cli/research/switch.pdf “一般来说,对于我们的工作负载,上下文切换的间接成本从几微秒到一千多微秒不等。”

编辑:用户级线程为每个线程维护一个堆栈,并且可能会或可能不会保存通用寄存器,具体取决于架构和调用约定的 clobber 规则。它可以像将寄存器转储到堆栈、跳转到一个新地址并弹出一些寄存器一样简单,如果该线程最近运行,这些寄存器可能在您的缓存中。

内核级上下文切换也通过写改变存储器映射TLB改变所述处理器的安全级别(级别或“环”)。请参阅“性能注意事项”