Java并发编程—并发和并行、线程上下文


——————————————————————————

并发和并行

  • 并发是多线程竞争同一个资源。
  • 并行是指多线程运行,没有资源的竞争。
    注:什么叫做资源?
    ——>变量、方法等都叫资源,占了内存的都叫资源,总之,资源就是变量
并发和并行的区别
  • 并发有资源竞争,并行没有资源竞争
  • 并发是指多线程对同一个变量进行读写操作【多线程对相同资源进行竞争】
  • 并行是进行不同变量的操作,没有相同变量的竞争

上下文切换

  • 是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现
  • 以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的
  • 大部分线程,cpu执行完就销毁,cpu就让出来了,有的线程执行完就销毁,有的线程一直执行
  • 不同的操作系统分配的时间片是不同的(linux操作系统分配时间片是等长的20ms,windows操作系统分配时间片是不等长的几ms~几十ms)
  • 有的线程寿命很短,有的线程执行时间特别长,对于寿命特别长的线程,cpu也得切换到下一个线程执行,只是给这个线程不断分配时间片。
  • cpu在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。
  • 线程上下文: 线程上下文需要记录上次执行的位置和切换,切换是有消耗的
  • 多线程在切换的时候有性能损耗和时间损耗

相关问题

为什么循环次数少的情况下,单线程快?

因为循环次数少的话,启动其他核去执行任务,本身线程是进入就绪态让cpu去选,选的时候也需要消耗时间;单线程时,数量少的话瞬间就能执行完毕;多线程时,有切换的时间消耗。
循环次数多的时候,一般是多线程快,不过并不意味着线程多就一定快

什么时候需要用多线程?

cpu产生浪费的时候使用多线程,才会让性能得到提升;
像操作系统同时运行qq,微信等多个线程是为了体验好,开多个线程后性能是会变慢的

线程上下文切换消耗的时长?

线程上下文切换消耗的时长——将近1ms一次——达到毫秒级别,消耗很大

用什么测试的线程上下文?面试回答下面的工具会加分:
  • 使用Lmbench3可以测量上下文切换的时长。
  • 使用vmstat可以测量上下文切换的次数。
如何减少上下文切换?

减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。
协程: 在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

减少上下文切换实战

命令:
sudo -u admin切换管理员权限
注:dump线程信息:显示这一瞬间的线程信息;dump不知存在于线程中,在其他地方也有,比如数据库等,时记录一瞬间状态的

如何打印(查看)线程信息?

jstack命令
在这里插入图片描述注:命令的意思:
sudo -u admin:切换到管理员权限
在 /opt/ifev/java/bin/ :在这个文件夹下面
执行jstack指令
传递3117这个参数查询3117这个进程
保存到/home/tengfei.fangtf/dump17这个文件里面
grep指令
grep:筛选,经常用来查询内容
在这里插入图片描述
——>统计,排序,按照一定格式输出
JBOSS:类似于tomcat,放网站进行运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值