进程与线程的区别和联系
从资源占用、切换效率、通信方式的方面回答
简单介绍下线程的切换过程
线程切换上下文的代价,切换会保存寄存器、栈等线程相关现场,需要由用户态切换到内核态,查看切换状态的命令
上下文切换的查看方法
sar -w ,这个只是能看出主机上总的上下文件切换的情况
# sar -w 1
proc/s
Total number of tasks created per second.
cswch/s
Total number of context switches per second.
同样,vmstat也可以查看总的上下文切换情况,不过vmstart输出的结果更多,便比通过对比发现问题:
# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 7292 249472 82340 2291972 0 0 0 0 0 0 7 13 79 0
0 0 7292 251808 82344 2291968 0 0 0 184 24 20090 1 1 99 0
0 0 7292 251876 82344 2291968 0 0 0 83 17 20157 1 0 99 0
0 0 7292 251876 82344 2291968 0 0 0 73 12 20116 1 0 99 0
查看每个进程或线程的上下文件使用情况,可以使用pidstat命令或者通过查看proc 。
# pidstat -w 每个进程的context switching情况
# pidstat -wt 细分到每个threads
查看proc下的文件方法如下:
# pid=307
# grep ctxt /proc/$pid/status
voluntary_ctxt_switches: 41 #自愿的上下文切换
nonvoluntary_ctxt_switches: 16 #非自愿的上下文切换
cswch/s: 每秒任务主动(自愿的)切换上下文的次数,当某一任务处于阻塞等待时,将主动让出自己的CPU资源。
nvcswch/s: 每秒任务被动(不自愿的)切换上下文的次数,CPU分配给某一任务的时间片已经用完,因此将强迫该进程让出CPU的执行权。
参考文章——进程上下文频繁切换导致load average过高
常用Linux命令,主要用来解决什么问题
为什么TCP建连需要3次握手,而断连需要4次
为什么TCP关闭连接需要TIME_WAIT状态,为什么要等待2MSL
一次完整的Http请求的过程
大致包括DNS解析、TCP建连、Http请求、Http响应等
Http2和Http的区别有哪些
项目中使用过的设计模式,主要用来解决什么问题
Object中的hashCode()和equals()的作用分别是什么
final、finally、finalize的却别和使用场景
简单描述下Java的异常机制
线上使用的JDK版本,为什么使用这个版本(有什么特点)
持续更新:更新时间:2019年4月21日03:17:34