本质上来说无论是用户态还是内核态的上下文切换都是很轻量的,甚至有一些硬件指令来支持,比如pusha可以帮助我们保存通用寄存器。同一个进程的线程共享页表,因此上下文切换的开销一般只有:

  • 保存各种寄存器

  • 切换sp(call指令会自动将pc压栈)

可以在数十条指令内完成。

既然近内核以及上下文切换都不慢,那么多线程的开销究竟在哪?

我们不妨看一个阻塞的系统调用futex的热点分布:

参考:https://www.cnblogs.com/ck1020/p/6666298.html

https://blog.csdn.net/changexhao/article/details/78287730

可以看到上面的热点中有大量涉及调度的开销。我们来看过程:

  1. 调用系统调用(可能需要阻塞);

  2. 系统调用确实需要阻塞,kernel需要决定下一个被执行的线程(调度);

  3. 执行上下切换。

因此,上面2个误区与多线程的开销都有一定因果关系,但是真正的开销来源于线程阻塞唤醒调度。

综上,希望通过线程模型来提升web server性能的原则是:

  1. 活跃线程数约等于CPU个数

  2. 每个线程不太需要阻塞

上下文切换是在做什么事情?相关推荐

  1. 初级开发人员的缺点_这是我想放弃初级开发人员时所做的事情

    初级开发人员的缺点 Coding is hard. Really hard. There are times when you'll think "this is amazing! I lo ...

  2. 一个合格程序员该做的事情

    无意间浏览到这篇<程序员每天该做的事>,仔细研读.发现这些不止是程序员每天应该做的事,而是每个IT人都应注意的事情. 程序员每天应该做的事 1.总结自己一天任务的完成情况 最好的方式是写工 ...

  3. 网站seo优化每天需要做哪些事情呢?

    网站seo优化主要是通过对网站站内优化和站外优化的方式让网站符合搜索引擎的标准,有效的提高网站关键词在搜索引擎中的排名,让网站获得更多的用户和流量,这是当下互联网营销推广必备的一种方式.那么在网站优化 ...

  4. python爬虫能干什么-爬虫可以做的事情非常多,Python的爬虫你又了解多少?

    原标题:爬虫可以做的事情非常多,Python的爬虫你又了解多少? 现在爬虫可以做的事情非常多,数据.信息.电影.资料等,你技术过关了,爱咋爬咋爬,仔细观察,加上你如果认真观察,就会发现学习爬虫的人越来 ...

  5. 心得体悟帖---16、哪些看起来很难做的事情真的不过如此

    心得体悟帖---16.哪些看起来很难做的事情真的不过如此 一.总结 一句话总结: 你可能会因为激情缺乏非常抵触做什么事情,但是当你做了之后,你会发现其实感觉都还挺好的. 做着做着,你会发现感觉其实挺舒 ...

  6. 程序员每周该做的事情!

    作为一个程序员,在一周的时间里应该做哪些事情呢?下文给你一个参考! 1)向你的老板汇报一次工作  让你的老板知道你在做什么,这很重要.可以口头.书面.邮件,看你老板的工作方式而定 2)进行一次自我总结 ...

  7. 关于自动驾驶的思考以及我准备做的事情

    01 背景和思考 有差不多十来天没发表文章,不过最近被关注的也越来越少,倒也无所谓.最近一点都没闲着,一直在思考一个问题,就是自动驾驶技术对社会的影响的问题.思考的内容非常多,用PEST分析法展开去看 ...

  8. 第七:不要表现得消极,仅仅因为你所做的事情不是你的兴趣所在

    很显然,在学生时代,当做到自己喜欢的时候,我们会pay200%的精力去创造,但如果是枯燥的事务,我们便懒得理睬,最好能有办法应付过去.但在工作上 80%你所做的事情都是繁琐而看似机械的,如果仅仅为此而 ...

  9. 06_pandas入门教程,引包,使用DataFrame和Series做一些事情

    引包 import pandas as pd pandas数据表表示方法 我想表示泰坦尼克号上的乘客的乘客.有很多乘客,我知道的有名字,年龄,和性别数据: import pandas as pddf ...

最新文章

  1. 制药企业SAP项目中CSV认证需要准备的文档
  2. Centos 7.2搭建MariaDB数据库服务器应用与管理
  3. 大学计算机基础python-大学计算机基础最新章节_曾一著_掌阅小说网
  4. 【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )
  5. Python 处理server返回gzip内容
  6. SSM整合之纯注解方式,注解实现事务,异常,与拦截器
  7. 单片机小精灵t2_51单片机定时器T2初始化设置
  8. 收集程序员动图,不幽默我捶自己!
  9. DbContext 和ObjectContext两者的区别
  10. 钉钉终于崩了!小学生欢呼庆祝解放,没想到没高兴多久就...
  11. C++ enum类型的一个更好的用法
  12. Ubuntu 10.04中配置ip地址
  13. 超简单实用操作!用Python让Excel飞起来【附详细教程】
  14. 荣耀9igoogle模式_创建自己的简单iGoogle小工具
  15. 安卓前端和python后端_android – 在移动应用程序中结合html前端和python“后端”...
  16. 基于SpringBoot+Vue开发的一个知识社区分享平台
  17. PHP面试要点——MQ消息队列
  18. MTK方案 联通PON入围测试分享
  19. 如何将excel.xls文件批量转换成.xlsx格式
  20. Excel中制作目录的3种方法,你了解几种?

热门文章

  1. 良心推荐:看完这20部BBC神级纪录片,英语水平提升几个Level!
  2. 【三维目标检测】VoxelNet(二):数据处理
  3. 自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)
  4. 逐梦旅程学习笔记 DirectX开发入门02:旋转的彩色立方体
  5. 微信群发工具-含源代码分享
  6. 微信小程序获取上一个页面的路由地址
  7. 弄底层基础的东西往往慢,枯燥,要慢慢磨
  8. Mysql断流_Hystrix 断流器
  9. 【华为云CCE】 k8s部署nacos集群
  10. [学位论文写作] 将一级标题数字1改为“第一章”