首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么上下文切换很慢?

为什么上下文切换很慢?
EN

Stack Overflow用户
提问于 2013-01-18 08:32:58
回答 1查看 1.3K关注 0票数 1

我想知道为什么上下文切换比同一线程上的异步操作慢。

为什么运行N个线程(其中N等于内核的数量),每个线程同步处理M个客户端,而不是运行M个线程?我已经说过原因是上下文切换开销,但我找不到上下文切换有多慢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-19 23:45:24

为了澄清,我假设当你说“而不是运行M个线程”时,你指的是N*M个线程(如果你运行M个线程,每个线程将需要处理N个客户端,以便匹配相同数量的客户端,这将是类似的情况)。

因此,在N个内核中运行N个线程,每个线程处理M个客户端,与在相同数量的内核中运行N*M个线程之间的区别在于,在第一种情况下,您不必创建新的线程,而且,正如您所说的,您不会进行上下文切换。这是一个优势,因为创建OS线程所需的工作很繁重;它需要创建不同的进程空间、新的堆栈等。此外,如果您有更多的线程,OS调度程序将停止并激活正在运行的进程,这也很耗时。每次调度器更改分配给内核的进程时,它可能还需要缓存该进程的上下文,从而添加了大量缓存未命中,从而增加了更多的时间。

另一方面,如果你有一个固定的线程数量,等于内核的数量(有时甚至建议是N-1 ),你可以在用户级调度程序中管理“任务”或客户端,这可能会在你的程序中引起更多的计算,但避免了大量的操作系统进程和内存管理,使整个执行速度更快。当前的一些并行API,如.Net任务并行库、OpenMP、Intel线程构建块或Cilk,都体现了这种称为动态多线程的并行模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14390655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档