学习内容
并发的优势和缺点
优点
资源利用率更好
程序设计在某些情况下更简单
程序响应更快
缺点
1、频繁的上下文切换
时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得多个线程是同时执行的,时间片一般是几十毫秒。而每次切换时,需要保存当前的状态起来,以便能够进行恢复先前状态,而这个切换时非常损耗性能,过于频繁反而无法发挥出多线程编程的优势。通常减少上下文切换可以采用无锁并发编程,CAS算法,使用最少的线程和使用协程。
解决方案
无锁并发编程CAS算法,利用Atomic下使用CAS算法来更新数据,使用了乐观锁,可以有效的减少一部分不必要的锁竞争带来的上下文切换
使用最少线程:避免创建不需要的线程,比如任务很少,但是创建了很多的线程,这样会造成大量的线程都处于等待状态,而且并发在某些情况未必会比串行快。
协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换
可以使用Lmbench3测量上下文切换的时长 vmstat测量上下文切换次数
2、线程安全
个线程共享数据时可能会产生于期望不相符的结果。
解决方案:同步机制
3、活跃性
某个操作无法继续进行下去时,就会发生活跃性问题。比如:死锁、饥饿等问题。