进程/线程切换究竟需要多少开销?
码农沉思录
共 4878字,需浏览 10分钟
· 2020-10-29
进程是我们开发同学非常熟悉的概念,我们可能也听说过进程上下文切换开销。那么今天让我们来思考一个问题,究竟一次进程上下文切换会吃掉多少CPU时间呢?线程据说比进程轻量,它的上下文切换会比进程切换节约很多CPU时间吗?带着这些疑问,让我们进入正题。
# gcc main.c -o main
# ./main./main
Before Context Switch Time1565352257 s, 774767 us
After Context SWitch Time1565352257 s, 842852 us
ip(instruction pointer):指向当前执行指令的下一条指令
bp(base pointer): 用于存放执行中的函数对应的栈帧的栈底地址
sp(stack poinger): 用于存放执行中的函数对应的栈帧的栈顶地址
cr3:页目录基址寄存器,保存页目录表的物理地址
......
-------------------------------------------------------------------------
Host OS 2p/0K 2p/16K 2p/64K 8p/16K 8p/64K 16p/16K 16p/64K
ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw
--------- ------------- ------ ------ ------ ------ ------ ------- -------
bjzw_46_7 Linux 2.6.32- 2.7800 2.7800 2.7000 4.3800 4.0400 4.75000 5.48000
同一进程下的线程之所有getpid()看到的pid是一样的,其实task_struct里还有一个tgid字段。对于多线程程序来说,getpid()系统调用获取的实际上是这个tgid,因此隶属同一进程的多线程看起来PID相同。
# gcc -lpthread main.c -o main
0.508250
4.363495
# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 595504 5724 190884 0 0 295 297 0 0 14 6 75 0 4
5 0 0 593016 5732 193288 0 0 0 92 19889 29104 20 6 67 0 7
3 0 0 591292 5732 195476 0 0 0 0 20151 28487 20 6 66 0 8
4 0 0 589296 5732 196800 0 0 116 384 19326 27693 20 7 67 0 7
4 0 0 586956 5740 199496 0 0 216 24 18321 24018 22 8 62 0 8
# sar -w 1
proc/s
Total number of tasks created per second.
cswch/s
Total number of context switches per second.
11:19:20 AM proc/s cswch/s
11:19:21 AM 110.28 23468.22
11:19:22 AM 128.85 33910.58
11:19:23 AM 47.52 40733.66
11:19:24 AM 35.85 30972.64
11:19:25 AM 47.62 24951.43
11:19:26 AM 47.52 42950.50
......
# pidstat -w 1
11:07:56 AM PID cswch/s nvcswch/s Command
11:07:56 AM 32316 4.00 0.00 php-fpm
11:07:56 AM 32508 160.00 34.00 php-fpm
11:07:56 AM 32726 131.00 8.00 php-fpm
......
grep ctxt /proc/32583/status
voluntary_ctxt_switches: 573066
nonvoluntary_ctxt_switches: 89260
评论
盱眙城区一辆解放牌五小车辆对外转让,有需要的老板跟车主联系。
解放牌五小车辆原厂自卸车,年审及保险最新。无任何事故及违章,正常干活车辆,无毛病,手续齐全,车况良好,价格不高,需要的欢迎看车购买。买好车加满油让你开回家。车辆地址:盱眙天鹅湖附近。车主电话:13770461668潘先生
盱眙老妹
0
从AIGC到AGI,为什么我们需要更多的“技术信仰派”?丨IDCF
点这里👇星标关注,获取最新资讯!整理 | 伊风 采访 | 张晓楠 嘉宾 | 巴川、朱雷、肖然作为AIGC应用落地元年,2024开年就抛给我们一些不太好回答的问题:在以探索AGI为长期目标时,我们该坚守技术信仰吗?除了复制
DevOps
10
公厕里的二进制究竟写的什么。。。
(关注数据结构和算法,了解更多新知识)某公厕分别用中文,英文,日语和韩语写了下面一段提示:向前一小步,文明一大步。这种提示在男厕所基本上是见怪不怪了,但关键是下面还有一段用0和1组成的数字,这又什么意思,难道是给外星人看的?作为一个程序员能敏锐的感觉到这应该就是上面中文的二进制表示方式,于是我就尝试
良许Linux
0
为什么进程地址空间中包括操作系统
说到进程的地址空间,大家可能都知道这样一张图:这张图就是Linux程序运行起来后所谓的进程地址空间,这里包括我们熟悉的代码区、数据区、以及堆区和栈区,今天我们不讲解这些区域,而是重点关注这个地址空间中最上面的一块区域——内核,这里的问题是:为什么进程地址空间中要包括操作系统(内核)呢?要想知道这个问
良许Linux
0
进程监控神器Supervisor:让你的Python应用稳如老狗!
△△请给“Python猫”加星标 ,以免错过文章推送作者:Ais137原文地址:https://juejin.cn/post/7354406980784373798版权声明:本文经原作者授权 Python猫 转载,为便于阅读,标题&排版略作编辑。版权归原作者所有,如需转载,请先联系
Python猫
30
【机器学习】机器学习中需要了解的 5 种采样方法
仅作学术分享,不代表本公众号立场,侵权联系删除转载于:雷锋网我每天都在努力学习许多算法,所以我想列出一些最常见和最常用的算法。本文介绍了在处理数据时可以使用的一些最常见的采样技术。 简单随机抽样假设您要选择一个群体的子集,其中该子集的每个成员被选择的概率都相等。下面
机器学习初学者
10
究竟谁带崩了锂矿?
公众号改版,及时收到文章推送需要给公众号加星。大家可以点击页面上方蓝色字【京北夜光】,进入公众号首页,点右上角“...”,点下方“设为星标”。坚持复盘总结分享不容易,点右上角点个在看并分享到朋友圈,看完顺手点个点赞和在看,算是个认可,感谢。表面看,就是稳王藏格矿业。4月15日晚,藏格矿业(00040
IT局
10