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

并发编程的挑战

上下文切换

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

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

死锁

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

资源限制

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值