##Java并发编程(二)之并发编程挑战篇

 在进行并发编程开发时,会面临一些挑战,主要包括三个方面 :上下文切换、死锁、资源限制
 
  挑战一:上下文切换的挑战
         上下文切换: 单个CPU同一个时刻只能执行一条线程,操作系统会给每条线程分配时间片来对线程进行调度操作,线程在得到的时间片内占用CPU资源处理自身数据,当操作系统从一个线程切换到另一条线程时来执行,需要保存当前线程的执行状态,以便后续接着执行该线程,这就称为上下文切换;
         性能局限:上下文切换会带来不必要的执行时间浪费,降低了CPU的执行效率。
         解决措施:1、尽量避免创建不必要的线程
                  2、采用Compare And Swap(比较交换)算法
                  3、采用无锁并发编程
                  4、协程:在单线程内实现多线程编程,并在单线程内实现多任务切换

  挑战二:死锁的挑战
         死锁:当线程中出现锁嵌套使用时,就有可能产生死锁。
         解决措施:
                 1、 避免一条线程中嵌套使用多个锁;
                 2、 避免线程中的一个锁占用多个资源,尽量保证每个锁只占用一个资源;
                 3、 尝试使用定时锁 ;
                 4、 对于数据库锁,加锁和解锁在同一个数据库连接里面
                 
   挑战三:资源限制的挑战
           当计算机硬件资源和软件资源有限时,线程多了会导致上下文切换增多,CPU花在上下文切换的时间增多后,花在处理任  务上的时间自然就减少了,计算机资源会限制程序的并发度,所以线程并不是越多越好,要根据当前计算机所能提供的资源考虑。
           解决措施:1、 根据资源限制并发度;
                    2、 购买计算机硬件资源和软件资源;
                                                               本文转载地址:https://blog.csdn.net/weixin_40698521/article/details/84592721
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值