与用户空间上下文切换相比,内核上下文切换有多贵?

Hon*_*gli 9 multithreading kernel

根据C10k本文,随着越来越多的客户端连接并创建越来越多的线程,每个连接1个线程的服务器的吞吐量会降低.根据这两个来源,这是因为存在的线程越多,与这些线程完成的实际工作相比,上下文切换花费的时间就越多.在高连接数下,优雅服务器似乎没有受到性能降低的影响.

但是,事务服务器也在客户端之间进行上下文切换,它们只在用户空间中进行.

  • 为什么这些用户空间上下文切换比内核线程上下文切换更快?
  • 内核上下文切换到底有什么用呢?
  • 内核上下文切换到底有多贵?需要多长时间?
  • 内核上下文切换时间是否取决于线程数?

我最感兴趣的是Linux内核如何处理上下文切换,但也欢迎有关其他操作系统的信息.

Rin*_*ing 5

  • 为什么这些用户空间上下文切换比内核线程上下文切换更快?

因为CPU不需要切换到内核模式并返回用户模式.

  • 内核上下文切换到底有什么用呢?

主要是切换到内核模式.IIRC,Linux中的内核模式和用户模式的页表相同,所以至少没有TLB失效惩罚.

  • 内核上下文切换到底有多贵?需要多长时间?

需要测量,并且可能因机器而异.我想现在一台典型的桌面/服务器机器每秒可以进行几十万个上下文切换,可能只有几百万.

  • 内核上下文切换时间是否取决于线程数?

取决于内核调度程序如何处理这个问题.AFAIK,在Linux中它非常高效,即使有大量的线程数,但更多的线程意味着更多的内存使用意味着更多的缓存压力,因此可能会降低性能.我还期望在处理数千个套接字时涉及一些开销.

  • 来自Reddit以供将来参考:http://www.reddit.com/r/programming/comments/joy9z/why_events_are_a_bad_idea_for_highconcurrency/c2e9a5a (2认同)