导图社区 并发编程的挑战
并发编程的挑战,整理了上下文切换、死锁、资源限制的挑战的内容,希望这份脑图会对你有所帮助。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
并发编程的挑战
上下文切换
上下文切换的时机
1.线程的时间片耗尽
线程在时间片耗尽之前阻塞或结束
串行执行一定比并发执行快吗?
不一定,在并发量较少的时候,上下文切换和线程的创建会带来性能的消耗
如何减少上下文切换
无锁并发编程
CAS机制
CAS是一种无锁的并发技术,不会引起线程阻塞,因此也不会引起上下文切换
使用最少线程
能不创建线程就不创建线程
使用协程
在一个线程内实现多任务的调度
死锁
产生死锁的4个必要条件,缺一不可
互斥条件
保持和请求
循环等待
不可剥夺
dump线程的使用:查看死锁发生的原因
在IDEA里直接在控制台旁边有个快照的标志,输出在某一时刻所有线程的状态信息
如何避免死锁?
1.避免一个线程同时获取多个锁
2.避免一个锁同时占用多个资源,尽量一个锁一个资源
3.尝试使用定时锁来代替内部锁:lock.tryLock(timeout)
4.对于数据库锁,加锁和解锁要在一个数据库连接里,否则会出现解锁失败的情况
资源限制的挑战
硬件资源限制
带宽的上传/下载速度
硬盘的读写速度
CPU的处理速度
软件资源限制
数据库的连接数
socket的连接数
资源限制带来的问题
就算提高并发数,因为受资源的限制,也仍然可能在串行执行,甚至还可能比串行执行更慢,因为上下文切换和创建线程也会带来巨大的性能消耗
如何解决资源限制
对于硬件资源限制,可以使用集群,在多个机器上并行执行程序
对于软件资源限制,可以使用资源连接池以实现资源的复用
如何在资源限制的情况下并发编程
根据不同的限制资源来调整程序的并发度