多线程带来的问题
为什么需要多线程
其实说白了,时代变了,现在的机器都是多核的了,为了榨干机器最后的性能我们引入单线程。
为了充分利用CPU资源,为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰,为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等。
性能问题
上下文切换
Java 中的线程与 CPU 单核执行是一对一的,即单个处理器同一时间只能处理一个线程的执行;而 CPU 是通过时间片算法来执行任务的,不同的线程活跃状态不同,CPU 会在多个线程间切换执行,在切换时会保存上一个任务的状态,以便下次切换回这个任务时可以再加载到这个任务的状态,这种任务的保存到加载就是一次上下文切换。线程数越多,带来的上下文切换越严重,上下文切换会带来 CPU 系统态使用率占用,这就是为什么当我们开启大量线程,系统反而更慢的原因。
其实你从这个表述中看到,其实整个切换的过程是有线程停止运行的,假设有这样一个工作有10个相同的步骤,每个线程处处理每一个步骤用的时间都是一样的,而且我们同时只能让一个线程工作,那这个时候多个线程之间的协调