Skip to content

并发编程介绍

一、串行与并行的区别

A->B->C->D四个流程

串行,根据路线,一个个走完流程。并行,如果没有前提的情况下,ABCD可以同时执行。

二、并发编程的目的

让程序充分利用计算机资源,加快程序的响应速度(耗时时间,web服务器压力等等),简化异步事件的处理。

三、使用场景

1、任务会阻塞线程,导致后续的代码不能执行的情况

2、任务执行的时间过长,但是任务可以拆分成多个子任务的情况。

3、任务本身需要协调的执行,比如生产者消费者等问题

四、上下文切换

上下文切换:cpu为线程分配了时间片,时间片非常的短(毫秒),cpu不停的切换线程执行,在切换线程之前会保存上一个任务的线程状态,方便切换回这个线程时,加载这个线程的状态。

频繁的进行上下文切换,会带来一定的性能问题,增大性能的开销。

五、减少上下文切换的开销

1、无锁并发编程:当多线程竞争锁时,会引起上下文的切换,所以多线程处理数据时,可以用一些方法避免使用锁,如将数据的id按照hashmap取模分段,不同线程处理不同段的数据(CurrentHashmap)

2、CAS:java的atomic包使用的是cas算法来更新数据,不需要加锁。

3、使用最少线程:避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,会导致大量的线程进入等待状态。