答案1
内核级线程需要上下文切换,这涉及更改定义当前内存映射和权限的大量处理器寄存器。它还会驱逐部分或全部处理器缓存。
用户级线程只需要在一个内核线程或进程内进行少量的簿记。
但是,如果您的线程主要执行 I/O 操作,则差异并不大,因为无论如何这些操作都必须通过内核。如果您尝试使用大量独立进程实现某种模拟,这一点就至关重要。在这种情况下,您需要仔细注意您使用的线程同步机制,因为其中一些机制也会进入内核并触发上下文切换。
http://www.cs.rochester.edu/u/cli/research/switch.pdf“一般来说,对于我们的工作量来说,上下文切换的间接成本范围从几微秒到超过一千微秒。”
编辑:用户级线程为每个线程维护一个堆栈,并且可能会或可能不会保存通用寄存器,具体取决于体系结构及其调用约定的破坏规则。它可以像将寄存器转储到堆栈、跳转到新地址并弹出几个寄存器一样简单,如果该线程最近运行,这些寄存器可能位于您的缓存中。