gpt4 book ai didi

multithreading - 与用户空间上下文切换相比,内核上下文切换的代价有多大?

转载 作者:行者123 更新时间:2023-12-04 04:22:57 25 4
gpt4 key购买 nike

根据 C10kthis paper ,每个连接 1 个线程的服务器的吞吐量随着越来越多的客户端连接和创建越来越多的线程而降低。根据这两个消息来源,这是因为与这些线程完成的实际工作相比,存在的线程越多,上下文切换所花费的时间就越多。在高连接数下,事件服务器似乎不会受到性能下降的影响。

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

  • 为什么这些用户空间上下文切换比内核线程上下文切换更快?
  • 内核上下文切换到底做了什么,成本高得多?
  • 内核上下文切换到底有多昂贵?需要多少时间?
  • 内核上下文切换时间是否取决于线程数?

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

    最佳答案

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

  • 因为CPU不需要切换到内核态再切换回用户态。
  • 内核上下文切换到底做了什么,成本高得多?

  • 主要是切换到内核模式。 IIRC,Linux内核态和用户态页表是一样的,所以至少没有TLB失效惩罚。
  • 内核上下文切换到底有多昂贵?需要多少时间?

  • 需要测量并且可能因机器而异。我猜现在典型的台式机/服务器机器每秒可以进行几十万次上下文切换,可能是几百万次。
  • 内核上下文切换时间是否取决于线程数?

  • 取决于内核调度程序如何处理这个。 AFAIK,在 Linux 中它非常有效,即使线程数很大,但更多的线程意味着更多的内存使用意味着更多的缓存压力,因此可能会降低性能。我还预计在处理数千个套接字时会产生一些开销。

    关于multithreading - 与用户空间上下文切换相比,内核上下文切换的代价有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972852/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com