CPU通过时间片算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务(也有可能是同一个任务)。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换(这个我理解只要切换到其他线程了就算一次上下文切换,比如一个线程执行完了切换到别的线程)。
首先需要明确触发上下文切换的原因:
多线程竞争锁时,未获取到锁的线程会进行阻塞,发生上下文切换。所以避免使用锁可以减少上下文的切换。
通过CAS进行循环来更新数据时,如果在时间片用完之前完成了更新,就会减少线程切换。
避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,会造成大量线程处于等待状态,CPU切换到等待状态的线程白白浪费时间。
在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换,尽可能在单线程里干更多活。
当两个线程因为竞争资源而互相等待时就会发生死锁。
主要指计算机硬件和软件资源的限制而影响程序并发的效果,比如服务器带宽、CPU核心数、硬盘读写速度等。
相应地提高硬件的性能,比如选用带宽更高、核心数更多的服务器,搭建服务器集群,采用高速读写硬盘、数据库或socket连接池复用技术等
能力一般,水平有限,欢迎大家进行指正,如果对您有所帮助希望能得到您的赞哦