在进行并发编程开发时,会面临一些挑战,主要包括三个方面 :上下文切换、死锁、资源限制
挑战一:上下文切换的挑战
上下文切换: 单个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
##Java并发编程(二)之并发编程挑战篇
最新推荐文章于 2024-05-27 09:49:55 发布