什么叫上下文切换?
cpu通过时间片分配算法来循环执行任务,当前的任务在执行一个时间片后会切换到另一个时间片,但是在切换之前会保存上一个任务的状态,所谓的上下文切换就是一次任务从保存到在加载这一过程.
多线程一定快吗?
答案是不一定的.因为线程在有创建和上下文切换的开销.(ps:https://github.com/gxwanmei里面有测试代码,欢迎使用)
如何去减少上下文切换呢?
(1)无锁并发编程:当多线程竞争锁的时候,会引起上下文的切换,所以多线程处理数据的时候可以用一些方法来避免使用锁.例如,将数据的ID根据hash算法取模分段,不同的线程去处理不同段的数据.
(2)CAS算法.
(3)使用最少的线程.
(4)协程.
死锁:
避免死锁的常见方法: