上下文切换
线程执行时需要分配CPU资源,CPU按照时间片分给线程执行,在线程时间片用完的情况下,需要保存现场,将执行权转让给其他线程。当该线程重新有机会执行时,需要加载之前的现场信息,然后执行。
从保存现场 到下次加载执行, 就是一次上下文切换,英文叫: context switch
在linux中,可以通过vmstat来查看系统的context switch次数:
System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.
我们看到此时OS的cs基本在1000以内。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 404644 66656 619388 0 0 0 20 157 309 1 0 99 1 0
0 0 0 404644 66656 619396 0 0 0 0 192 529 2 2 97 0 0
0 0 0 404644 66656 619396 0 0 0 0 516 1573 8 5 88 0 0
0 0 0 404644 66656 619396 0 0 0 0 610 656 3 4 93 0 0
0 0 0 404644 66656 619396 0 0 0 0 480 575 2 2 96 0 0
0 0 0 404644 66656 619396 0 0 0 0 841 1238 3 4 93 0 0
0 0 0 404644 66656 619396 0 0 0 0 465 570 2 5 93 0 0
我们执行一个java程序,2个线程相互等待执行唤醒,继续观察context。
此时发现cs基本都在2W多.
另外,发现in也很多,in是中断次数,因为我们用了LockSupport.
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 397152 66808 619640 0 0 0 0 20800 83443 15 32 53 0 0
1 0 0 397152 66808 619640 0 0 0 0 29901 62160 2 26 72 0 0
1 0 0 397152 66808 619640 0 0 0 0 24617 51618 2 21 77 0 0
1 0 0 397152 66816 619632 0 0 0 48 26312 54760 1 26 74 0 0
1 0 0 397152 66816 619640 0 0 0 0 27106 58009 1 22 77 0 0
1 0 0 397152 66816 619640 0 0 0 0 27557 57114 2 23 75 0 0
1 0 0 397152 66816 619640 0 0 0 0 23964 49911 1 20 78 0 0
1 0 0 397152 66816 619640 0 0 0 0 21619 45313 1 23 76 0 0
2 0 0 397028 66816 619640 0 0 0 0 23673 53251 4 20 75 0 0
1 0 0 397028 66824 619632 0 0 0 12 21042 52601 8 26 66 1 0
1 0 0 396508 66824 619640 0 0 0 0 29707 60314 3 22 75 0 0
同时我们看到,CPU的使用率上,20+% 都用于sys,说明context switch在浪费CPU
分享到:
相关推荐
java并发编程实践笔记java并发编程实践笔记java并发编程实践笔记java并发编程实践笔记
Java并发编程学习笔记
Java并发编程系列心得笔记,可以参考,欢迎共同交流学习
java并发编程实战pdf学习笔记 总结了重要的知识点
java并发编程的艺术读书笔记根据章节整理的核心内容,便于自己理解
读书笔记-Java并发编程实战-基础篇
目前,在Java并发编程方面论述系统、内容详实的中文资料很少。本文是作者在实际工作中经验总结,部分内容来自《Java Concurrency In Practice》。涵盖了Java并发编程所需掌握的大部分知识,且实例丰富通俗易懂。读完...
java并发编程学习笔记,很详细的资料
《Java并发编程的艺术》笔记 第一章 并发编程的挑战 第二章 Java并发机制的底层实现原理 volatile的两条实现原则: 1. Lock前缀指令会引起处理器缓存回写到内存 2. 一个处理器的缓存回写到内存会导致其他...
java并发编程实践笔记资料.pdf
java并发编程笔记
《Java并发编程实战》个人读书笔记,非常详细: 1 简介 2 线程安全性 3 对象的共享 4 对象的组合 5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可...
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括可见性、发布与逸出、线程封闭、不可变性、安全发布等内容
Java并发编程与高并发解决方案-学习笔记-www.itmuch.com
绝对的好东西,亲测,认真读读绝对大有裨益,欢迎下载!
Java并发编程学习笔记.
《java并发编程实战》读书笔记-第2章-线程安全性,脑图形式,使用xmind8制作 包括引言、线程安全性定义、原子性、加锁机制、使用锁保护状态、活跃性与性能等内容
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括线程安全类设计、实例封闭、线程安全性委托、现有线程安全类中添加功能和文档化同步策略等内容
Java并发编程学习笔记,研究JAVA并发多线程编程的一本教程,使用并发技术可以开发出并行算法,充分利用多处理器的计算能力,避免硬件资源浪费。目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java...