
上下文切换
减少上下文切换的方法
- 无锁并发编程
- CAS算法
- 使用最少线程
- 协程(在一个线程中实现多任务调度)
监控程序
查看进程中的线程
- jstack 30587 > /app/sssc-soa-starindex/dump1
分析线程信息文件
- grep java.lang.Thread.State dump1 | awk ‘{print $2$3$4$5}’ | sort | uniq -c

查看线程状态,是否堵塞或进行多次的上下文切换
重新配置线程池信息,重启服务,查看线程运行效果,是否进行了多次线程切换
死锁
导致死锁的原因
- 第一个线程等待第二个线程释放资源,而第二线程在等待第一个线程释放资源。
产生死锁的条件
- 互斥等待(同步的原理)
- Hold and Wait
- 循环等待
- 无法剥夺的等待
避免死锁的方法
- 一次性获取from和 to锁,无法实现
- 按顺序获取锁
- 加入超时,如果超时,就释放锁(不推荐)
资源限制的挑战
什么是资源限制
- 在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源。比如硬件资源限制有宽带的上传/下载速度、硬件读写速度和CPU的处理速度。软件资源限制有数据库的连接数和socket连接数等。
资源限制引发的问题
- 并发程序在资源限制的情况下,运行起来比串行还慢。
解决资源限制引发的问题
- 使用集群,多机部署
- 软件资源:线程池、连接池复用