Java多线程系列—多线程带来的问题(05)

本文探讨了为何需要多线程,以及多线程带来的性能问题,包括上下文切换、缓存失效和协作开销。同时,文章强调了在何时需要考虑线程安全问题,如访问共享资源、依赖时序的操作以及使用未声明线程安全的类。最后,提醒开发者多线程可能导致的性能损失和线程安全挑战。
摘要由CSDN通过智能技术生成

多线程带来的问题

为什么需要多线程

其实说白了,时代变了,现在的机器都是多核的了,为了榨干机器最后的性能我们引入单线程。

为了充分利用CPU资源,为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰,为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等。

性能问题

上下文切换

Java 中的线程与 CPU 单核执行是一对一的,即单个处理器同一时间只能处理一个线程的执行;而 CPU 是通过时间片算法来执行任务的,不同的线程活跃状态不同,CPU 会在多个线程间切换执行,在切换时会保存上一个任务的状态,以便下次切换回这个任务时可以再加载到这个任务的状态,这种任务的保存到加载就是一次上下文切换。线程数越多,带来的上下文切换越严重,上下文切换会带来 CPU 系统态使用率占用,这就是为什么当我们开启大量线程,系统反而更慢的原因

其实你从这个表述中看到,其实整个切换的过程是有线程停止运行的,假设有这样一个工作有10个相同的步骤,每个线程处处理每一个步骤用的时间都是一样的,而且我们同时只能让一个线程工作,那这个时候多个线程之间的协调

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不二人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值