并发编程挑战
1. 上下文切换
关键词:Lembench3(测量上下文切换时长)
vmstat(测量上下文切换次数,CS)
问题:如何减少上下文切换?
1.无锁并发编程
2.CAS算法。java的Atomic包使用CAS算法更新数据,不需要加锁
3.使用最少线程
4.协程。在单线程里实现多任务调度。eg:单线程维持多个任务间的切换
2. 死锁
关键词:dump线程
问题:避免死锁常见方法有哪些?
1.避免一个线程同时获取多个锁
2.避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
3.尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制
4.对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况
3. 资源限制
关键词:集群,资源池
问题:什么是资源限制?
1.程序的执行速度受限于计算机硬件资源或软件资源。
问题:资源限制会引发什么问题?
1.资源限制导致原本并发执行的程序反复调动资源,增加了上下文切换和资源调度的时 间,从而导致多线程任务执行速度甚至低于单线程
问题:如何解决资源限制问题?
1.硬件资源限制------>集群并发,服务器集群
2.软件资源限制------>资源池复用资源
问题:在资源限制的情况下进行并发编程
1.根据不同的资源限制调整程序并发度。