如何减少CPU上下文切换
1、减少上下文切换的方法有
1、无锁并发编程
多线程竞争时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,将数据Id按hash算法取模来分段,不同的线程处理不同时端的数据
2、CAS算法
Java的atomic包使用CAS算法来更新数据,面不需要加锁。Atomic变量的更新可以实现数据操作的原子性及可见性。这个是由volatile 原语及CPU的CAS指令来实现的。
3、使用最少的线程
若任务少,但创建了很多线程来处理,这样会造成大量的线程处于等等状态。
4、使用协程
在单线程里实现多任务的调度,并在单线程里维持多个任务间切换。java语言级别原生并不支持协程,可以看下kilim,利用java增强字节码实现角色模型(actor)
2、查看jvm中线程的状态及执行情况
查看java的pid
ps –ef|grep java
用jstack dump 线程的信息
/usr/java/jdk1.8/bin/jstack 9102>9102.dump
统计各状态的线程数量
grepjava.lang.Thread.Stat 9102.dump |awk '{print$2$3$4$5}'|sort|uniq –c
查看上下文切换的次数
利用jstack –l pid查看线程的状态信息(在windos在任务管理器中查看java 的PID,linux用ps –ef查看)
举例
public classDeadLockDemo {private static StringA="A";private static String B="B";public static void main(String[] args){new DeadLockDemo().deadLock();}private void deadLock() {Thread thread = new Thread(newRunnable() {public void run() {synchronized (A) {try {Thread.currentThread().sleep(2000);} catch(InterruptedExceptione) {e.printStackTrace();}synchronized (B) {System.out.println(1);}}}});Thread thread1 = newThread(newRunnable() {public void run() {synchronized (B) {synchronized (A) {System.out.println("2");}}}});thread.start();thread1.start();}
}
线程 信息如下:
Java stack information for the threads listed above:
===================================================
"Thread-1":at com.thread.test.DeadLockDemo$2.run(DeadLockDemo.java:31)- waiting to lock <0x00000007c0987e08> (a java.lang.String)- locked <0x00000007c0987e38> (a java.lang.String)at java.lang.Thread.run(Thread.java:724)
"Thread-0":at com.thread.test.DeadLockDemo$1.run(DeadLockDemo.java:22)- waiting to lock <0x00000007c0987e38> (a java.lang.String)- locked <0x00000007c0987e08> (a java.lang.String)at java.lang.Thread.run(Thread.java:724)
参考:
多线程编程-减少上下文切换(1)_yxpjx的专栏-CSDN博客_如何减少上下文切换
如何减少CPU上下文切换相关推荐
- 性能瓶颈--CPU(上下文切换)
CPU的性能瓶颈不仅仅是cpu负载.因为Linux的性能问题可能是牵一发而动全身的. 比如一个占用内存较高的java程序,导致问题的根本原因是内存不足,但是反映最直观的可能是cpu使用率很高.因为ja ...
- CPU上下文切换、进程上下文、中断上下文
由于Linux是一个多任务操作系统,能够支持远大于CPU数量的任务同时运行.当然,这些任务实际上并不是真的在同时运行,而是由CPU进行调度,将时间分片,每个任务占用1个时间片,通过轮流的方式运行,但由 ...
- linux查看上下文切换命令,Linux性能优化,Linux查看CPU上下文切换
CPU上下文切换,可能会导致CPU使用率的飙升,那当CPU到100%的时候,我们该如果定位是否是因为CPU上下文切换导致的呢? 可以通过vmstat.pidstat命令来查看. 可以看到,这个例子中的 ...
- cpu上下文切换(下)
cpu上下文切换如何查看 上一篇介绍了cpu上下文切换几种场景以及数据保存恢复过程,这篇文章介绍如何查看cpu上下文切换 一.vmstat 安装:yum install -y sysstat vmst ...
- linux cpu上下文切换 简介
目录 什么是CPU上下文 什么是CPU上下文切换 进程上下文切换 线程上下文切换 中断上下文切换 linux的上下文切换查看 上下文切换次数多少合理? 什么是CPU上下文 Linux是一个多任务操作系 ...
- Windows 技术篇-减少对视频相关服务的cpu分配,减少cpu占用率
如果有视频相关服务的话,电脑会多分配一些cpu给过去. 我们可以通过控制这个来达到减少cpu占用率的效果. 通过Win+R打开运行,输入regedit回车打开注册表. 路径在图片的底下,我们修改的是D ...
- 进程用户态 上下文切换需要保存哪些_漫话性能:CPU上下文切换
序言 表弟:CPU平均负载zhuanlan.zhihu.com 我们理解了平均负载( Load Average),并用三个案例展示了不同场景下平均负载升高的分析方法.这其中,多个进程(或线程)竞争 ...
- 04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
上一节,我给你讲了 CPU 上下文切换的工作原理.简单回顾一下,CPU 上下文切换是保证 Linux 系统正常工作的一个核心功能,按照不同场景,可以分为进程上下文切换.线程上下文切换和中断上下文切换. ...
- 03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
上一节,我给你讲了要怎么理解平均负载( Load Average),并用三个案例展示了不同场景下平均负载升高的分析方法.这其中,多个进程竞争 CPU 就是一个经常被我们忽视的问题. 我想你一定很好奇, ...
最新文章
- eta 深度学习 参数_深度学习中的参数梯度推导(一)
- python定义函数计算斐波那契公式前20的项_Python3算法之二:斐波那契函数
- 蓝牙耳机音量大解决办法_长时间使用蓝牙耳机的危害这么大?我们到底该选什么蓝牙耳机呢?...
- 【转载】别了,摩托罗拉(十):“战争部落”和“独立王国”
- html柳树动画,3D教程-柳树生长动画
- 构建复杂的应用程序 —— 重用与重构
- tkinter 实现简单登录窗
- JDK打印的疑问:CUPSPrinter有何用处?
- 验证码生成工具google authenticator
- 如何退出控屏软件(以极域为例)
- 华为机顶盒视频播放代码
- HTML-简单表单制作
- 双十一大促过后怎么维护淘宝店铺数据
- 知识管理系统,帮你挖掘出企业90%的隐性知识
- CHM文件的搜索功能帮助(摘自MSDN).
- 嵌入式网络的基础知识 -- 数据包的组装、拆解、各头部格式
- centos查看显卡型号时出现 NVIDIA Corporation
- Linux ftrace 1.1、ring buffer
- DirectX11 Direct3D初始化
- (五)苏世民:我的经验和教训:成功人生的十大信条