并发编程的挑战
1上下文切换。
cpu通过时间片分配算法来执行任务,从一个任务切换到另一个任务时会保留上个任务的状态。
多线程切换上下文开销大,不一定比单线程快。


减少上下文切换的方法

1无锁并发,不同线程处理不同数据段
2CAS算法,java的原子编程使用此算法,不需要加锁。
3最少线程编程
4协程:单线程多任务,并且支持切换。

2死锁


3 资源限制的挑战:
1网络带宽限制,硬件限制
2资源限制会导致并发效率低下
3硬件资源限制可以用分布式集群解决资源限制问题,让程序在多机执行。
软件资源,可以采取资源池复用的方式,如数据库连接池,socket连接复用,webservice连接复用等。
4资源受限时的并发,根据资源调整并发度,比如根据带宽调整,根据数据库连接数调整。