减少上下文切换实战
前言
众所周知,有时候并发并不一定比串行更快,很简单,因为并发多线程不可避免会面临线程上下文切换问题。对于正在使用的线程,我们先不管,我们着重去看处于等待状态的线程,今天我们来看一下如何解决等待状态多线程上下切换问题。
实战
第一步:用jstack命令dump线程信息,看看pid为31227的进程里的线程都在做什么。
sudo -u admin /opt/ifeve/java/bin/jstack 31227 > /home/tengfei.fangtf/dump17
第二步:统计所有线程分别处于什么状态,发现400多个线程处于WAITING状态。
[tengfei.fangtf@ifeve ~]$ grep java.lang.Thread.State dump17 | awk '{print $2$3$4$5}'
| sort | uniq -c
39 RUNNABLE
21 TIMED_WAITING(onobjectmonitor)
6 TIMED_WAITING(parking)
51 TIMED_WAITING(sleeping