#java如何减少线程上下文切换?本文告诉你答案!

如何减少线程上下文切换
使用多线程时,不是多线程能提升程序的执行速度,使用多线程是为了更好地利用CPU资源!
如果有正在学java的程序员,可来我们的java技术学习扣qun哦:82368,6266里面免费送java的视频教程噢! 小编也是一名从事了6年java开发的全栈工程师,花了近一个月整理了一份较适合18年学习的java干货,送给每一位java 小伙伴,欢迎初学和进阶中的小伙伴。
在这里插入图片描述

程序在执行时,多线程是CPU通过给每个线程分配CPU时间片来实现的,时间片是CPU分配给每个线程执行的时间,因时间片非常短,所以CPU通过不停地切换线程执行。

线程不是越多就越好的,因为线程上下文切换是有性能损耗的,在使用多线程的同时需要考虑如何减少上下文切换。

一般来说有以下几条经验:

无锁并发编程。多线程竞争时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash取模分段,不同的线程处理不同段的数据
CAS算法。Java的Atomic包使用CAS算法来更新数据,而不需要加锁。
在这里插入图片描述
控制线程数量。避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样会造成大量线程都处于等待状态

协程。在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换
协程可以看成是用户态自管理的“线程”。不会参与CPU时间调度,没有均衡分配到时间。非抢占式的

还可以考虑我们的应用是IO密集型的还是CPU密集型的。

在这里插入图片描述
如果是IO密集型的话,线程可以多一些。
如果是CPU密集型的话,线程不宜太多。

猜你喜欢

转载自blog.csdn.net/javam16/article/details/82812735
今日推荐