上下文切换
线程执行时需要分配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并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...
这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...
Java并发编程系列心得笔记,可以参考,欢迎共同交流学习
### Java并发编程实践笔记知识点详解 #### 一、保证线程安全的方法 1. **不要跨线程访问共享变量:** 当多个线程共享某个变量时,若其中一个线程修改了该变量,其他线程若没有正确同步,则可能读取到错误的数据。...
Java并发编程是Java开发中必不可少的一部分,涉及到多线程、同步机制、线程池以及并发工具类等多个核心知识点。以下是对这些主题的详细说明: 1. **线程安全与锁 Synchronized 底层实现原理**: 线程安全是指在多...
java并发编程的艺术读书笔记根据章节整理的核心内容,便于自己理解
读书笔记:Java并发编程之美笔记
### Java并发编程知识点详解 #### 一、线程状态与管理 在Java中,线程具有多种状态,这些状态的变化反映了线程在其生命周期中的不同阶段。理解这些状态及其转换对于编写高效、健壮的并发程序至关重要。 - **NEW**...
《Java并发编程的艺术》笔记 第一章 并发编程的挑战 第二章 Java并发机制的底层实现原理 volatile的两条实现原则: 1. Lock前缀指令会引起处理器缓存回写到内存 2. 一个处理器的缓存回写到内存会导致其他...
在Java并发编程中,数据的封装与访问控制、线程安全性的考量、同步机制的使用是重要的基础概念和技巧。以下是从给出的文件内容中提取出的详细知识点: 1. 数据封装与访问控制:确保内部私有数据不被轻易访问,并且...
### Java并发编程笔记 #### 实现Runnable接口与继承Thread类 在Java中,实现多线程功能主要有两种途径:一种是通过实现`Runnable`接口,另一种则是通过继承`Thread`类。这两种方式各有优劣,具体选择哪一种取决于...
Java并发编程实践笔记是一份关于Java并发编程的实践笔记,涵盖了多种关于线程安全、并发编程的实践经验和原则。下面是从笔记中总结的知识点: 1. 保证线程安全的三种方法:不要跨线程访问共享变量,使用final类型的...
《Java并发编程实战》个人读书笔记,非常详细: 1 简介 2 线程安全性 3 对象的共享 4 对象的组合 5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可...
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括可见性、发布与逸出、线程封闭、不可变性、安全发布等内容
### Java并发编程学习笔记知识点详解 #### 一、Java并发编程概述 Java并发编程是指在Java应用程序中同时执行多个操作的技术。它通过多线程、线程池等机制实现资源的有效利用,提高程序运行效率。Java并发编程的...
本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...
读书笔记:Java并发编程之美读书笔记
Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...
《java并发编程实战》读书笔记-第2章-线程安全性,脑图形式,使用xmind8制作 包括引言、线程安全性定义、原子性、加锁机制、使用锁保护状态、活跃性与性能等内容