1. 解决高并发问题的方案
多线程:一台服务器上运行多个线程,解决的重点是怎样提高单个服务器内存、cpu等资源的使用率问题
分布式:一个讹误拆分成多个子业务,部署在不同的服务器上,解决的重点是业务在多台服务器高效协同运行的问题
集群:同一个业务,部署在多个服务器上,指的是系统对多硬件的组合使用方式
DMQ:分布式消息队列,具体内容详见https://www.cnblogs.com/Water2Wine/p/13415203.html和https://www.cnblogs.com/Water2Wine/p/13434213.html
2. 线程间的资源共享
为了实现不同线程间资源共享的问题,有如下几种解决方案:
并发集合:
为了实现集合在不同线程间的资源共享,主要有两种不同的方式
第一种是使用方法将非线程安全的集合类包装成安全的,可以使用mutex状态锁,满足线程安全要求,但性能不优
第二种方法是使用线程安全的集合类,如vector,hashtable,ConcurrentHashMap等,性能优异,但实现复杂
锁的分类:锁可以简单的分为synchronized锁和lock锁,具体内容祥见https://www.cnblogs.com/Water2Wine/p/12458826.html
锁的优化:
锁的优化主要从两个角度去考虑
第一个角度是让锁更小,这样可以降低系统对锁的竞争,可以通过减小持锁时间,减小锁粒度,读写分离锁等方式实现
第二个角度是让锁更大,这样可以减少不必要的加锁释放锁的时间,可以通过锁粗化的方式实现
无锁策略:即乐观锁思想,底层都基于CAS实现
线程池:可以减少不必要的加锁释放锁的时间,具体内容祥见https://www.cnblogs.com/Water2Wine/p/12463150.html
3. 线程的协同运行
常见的并行模式:
单例模式
不变模式:对象一旦创建,就不允许修改
生产者-消费者模式:通过共享内存缓冲区,避免了两者的直接通信,实现生产者消费者解耦
Future模式:异步调用
网络NIO和AIO:通过同步不阻塞和异步不阻塞方式进行网络间信息传输,提高效率,具体内容详见https://www.cnblogs.com/Water2Wine/p/12497263.html