并发编程的艺术笔记-(第一章)并发编程的挑战

来源:互联网 发布:软件测试的项目 编辑:程序博客网 时间:2024/05/22 12:36

并发编程的挑战

上下文切换

多线程不一定比串行快:当累加操作数量较小时,反而并发执行的创建线程和上下文切换的劣势显示出来。

减少上下文切换的方法:无锁并发编程(比如讲数据分段如concurrentHashMap),CAS算法(Compare and Swap,如java的Atomic包中的类),使用最少线程和使用协程(在单线程里实现duo任务的调度,并在单线程里维持多个任务间的切换)。

死锁

避免死锁的几个常见方法:避免一个线程同时获取多个锁避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败。

资源限制

硬件:带宽,硬盘读写速度,CPU速度软件:数据库连接数,Socket连接数(其实数据库连接也是基于Socket连接)解决硬件限制:服务器集群解决软件限制:池化技术
0 0