并发、并行、串行
- 串行在时间上不可能发生重叠,前一个任务没搞定,下一个任务就只能等着
- 并行在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行。
- 并发允许两个任务彼此干扰。同一时间点、只有一个任务运行,交替执行
高并发
通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中
并发三大特性
- 原子性,一组操作要么全部执行,要么全部不执行,执行过程中不能被中断。
- 可见性,一个线程修改了某个共享变量,其他线程立即可以“感知到”。
- 有序性,如果在本线程内观察,所有操作都是有序的;如果在一个线程中观察另一个线程,所有的操作都是无序的。
处理方式
如何处理高并发问题一般有两个情况
- 单机情况下有以下几个层面可入手
核心就是提升性能
优化顺序视情况而定,我一般会先考虑缓存,因为使用成本较低,维护成本不高- 服务器层面
提升硬件,使用第三方存储服务器存储静态资源(阿里云oss) - 程序代码(次之)
数据库连接池(防止频繁创建连接),多线程(线程安全问题用分布式锁),接口缓存(优先),程序优化,消息队列或限流(代价影响用户体验) - 数据库(重点,一般是系统瓶颈)
分库分表,读写分离,程序中对常用的查询sql做缓存,添加索引
- 服务器层面
- 多机情况下
- 微服务拆分
- 负载均衡
- 集群化
注意:redis存储token
总结起来就是缓存,队列,拆分,价钱,池化等