我发现用户级线程比内核级线程快很多但我找不到任何令人信服的例子 为什么 用户级线程是否比内核级线程更快?有人可以向我解释一下。
内核级线程缓慢且低效。例如, 线程操作比数字慢几百倍 用户级线程。
取自 这里
我发现用户级线程比内核级线程快很多但我找不到任何令人信服的例子 为什么 用户级线程是否比内核级线程更快?有人可以向我解释一下。
内核级线程缓慢且低效。例如, 线程操作比数字慢几百倍 用户级线程。
取自 这里
Answers:
内核级线程需要一个 上下文切换 ,涉及更改定义当前内存映射和权限的大量处理器寄存器。它还会驱逐部分或全部处理器缓存。
用户级线程只需要在一个内核线程或进程中进行少量记账。
但是,如果您的线程主要进行I / O操作,那么差异并不大,因为在任何情况下都必须通过内核。如果您尝试使用大量独立进程实现某种模拟,这一点非常重要。在这种情况下,您需要特别注意您使用的线程同步机制,因为其中一些机制也会进入内核并触发上下文切换。
http://www.cs.rochester.edu/u/cli/research/switch.pdf “一般来说,上下文切换的间接成本从我们的工作量的几微秒到超过一千微秒不等。”
编辑:用户级线程维护每个线程的堆栈,并且可能会也可能不会保存通用寄存器,具体取决于其调用约定的体系结构和clobber规则。它可以简单到将寄存器转储到堆栈,跳转到新地址,以及弹出一些寄存器,如果该线程最近运行,这些寄存器可能位于缓存中。
内核级上下文切换也通过写入来更改内存映射 TLB , 和 更改处理器的安全级别(权限级别或“响铃”)。看到 “性能考虑”
bookkeeping
,据我所知,即使用户级别的线程拥有寄存器,甚至他们需要通过上下文切换