高并发学习笔记
池化技术
空间换时间,预先创建好多个对象,重复使用,避免频繁创建销毁对象造成的开销
数据库连接池
请求处理
- 连接池连接 < 最小连接数:创建新链接处理数据库请求
- 连接池连接 < 最小连接数 < 最大连接数:优先复用空闲连接,否则创建新连接处理请求
- 连接池连接数 > 最大连接数: 等待一段时间,超时还没有连接可以直接抛错
保证连接池中的连接可用
- 心跳机制,定期检查连接是否可用
- 每次使用连接前,先检验下连接是否可用,再进行SQL请求
线程池
线程数量达到最大线程数时,放入一个有大小限制的等待队列,等待空闲线程去执行
注意事项
控制最大线程数量
- CPU密集型任务,保持与CPU核数相当的线程就可以了,避免过多的上下文切换,降低执行效率
- IO密集型型任务,可以适当放开数量,因为在执行IO时线程阻塞,CPU空闲下来可以去执行其他线程的任务
等待队列必须有界
若不限制大小可能会导致队列任务数量过多,触发Full GC,直接导致服务不可用
必须监控等待队列中的任务数
避免最大线程数设置不合理导致大量任务留在等待队列中得不到执行