java高并发

⭐️并发实现机制:CPU通过给每个线程分配CPU时间片,一般是几十毫秒

多线程不一定快,是因为线程有创建和上下文切换的开销

那么既然如此,如何减少上下文切换呢?

  • 无锁并发编程
    锁的使用,会引发上下文切换,可以避免用锁,如将数据的ID按照hash算法取模分段,不同的线程处理不同段的数据。

  • CAS算法
    Java的Atomic包使用CAS算法来更新数据,而不需要锁。
    对cas算法的讲解详见下面这篇博客
    https://www.cnblogs.com/Mainz/p/3546347.html

  • 使用最少线程
    避免创建不必要的线程,大量创建线程会导致大部分线程处于等待状态

  • 使用协程
    即在一个线程中实现多任务的调度。

?减少上下文切换的实战
1)查看某一个进程里的全部线程是什么状态(发现很多是waiting状态的)
2)查看waiting状态的线程的详细信息,发现大部分属于jboss线程
?什么是jboss线程
3)配置jboss线程池信息,将其最多线程数设置为100
4)重启并重复第一步,查看效果

?死锁
死锁产生的一种可能情况是:一个线程在释放锁的过程中抛出了异常,导致没有释放掉。

⭐️避免死锁的几个方法
1)避免一个线程同时获得多个锁
2)每个锁尽量只锁定一个资源
3)使用定时锁
4)对于数据库锁,还要注意加锁和解锁必须在同一个数据库连接里

?资源限制的挑战
⭐️什么是资源限制
资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源。
硬件资源限制有带宽的上传/下载速度、硬盘读写速度和CPU的处理速度。
软件资源限制有数据库的连接数和socket连接数等。

⭐️引发的问题
在并发编程中,代码执行速度加快的原则是将代码中串行执行的部分编程并发执行,但是如果受限于资源,仍在串行执行,但是由于增加了上下文切换和资源调度的时间,反而会更慢。

⭐️如何解决
对于硬件资源,考虑集群
对于软件资源,考虑复用(如使用连接池将数据库和socket连接复用)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值