YAY*_*est 5 multithreading multicore
有多种线程模型可用于在应用程序中调度线程:
用户级线程被认为比内核级线程更快,因为内核级的上下文切换比用户级的上下文切换更昂贵。用户级线程的一大缺点是它们不利用多处理器系统,因为它们只使用一个内核级线程。
有一些文章说M:N线程模型最好使用N作为CPU核心的数量(这里有一个例子)。这样我们就可以同时实现1:1和N:1线程模型的优点。
我的问题是:
用户级线程被认为比内核级线程更快
两者都可以更快,具体取决于工作负载、操作系统、硬件和绿色线程实现。
这不是弥补了缓慢的上下文切换吗?
有时。通常不会。内核线程有一个堆栈,当您有数千个堆栈时,它们会消耗千兆字节的 RAM,并且当它们进行上下文切换时,您肯定会有大量缓存未命中。假设您的工作负载 IO 很重并且上下文切换频繁。
为什么 CPU 核心的数量在这里也很重要?
无关紧要。您应该使用硬件线程数,许多现代 CPU 每个核心有 2 个硬件线程。
其他核心可以执行其他进程的其他线程
如果它们花费相当长的时间,则意味着您有 2 个进程正在加载系统。在这种情况下,更好的方法可能是使用 50% 的硬件线程。当人们设计需要资源的软件时,他们通常认为这将是计算机的主要工作负载。
由于上下文切换,创建新的内核级线程(在具有单个硬件线程的系统上)通常不会给我额外的 CPU 时间
如果还有其他进程也需要 100% CPU,那么使用 2 个线程您确实会获得额外的 CPU 时间。但这是罕见的边缘情况,由于系统无响应,用户会点击重置按钮。一般来说,除非涉及阻塞 IO 或安全性,否则创建比硬件线程更多的内核线程没有什么意义。