本期重点内容
并发编程基础概念篇主要梳理并发编程中的一些基础的概念,帮助读者在并发编程这块内容中查漏补缺,加深印象
进程与线程的区分
进程是指运行中的程序,操作系统会给这个程序分配一定的系统资源。
线程是CPU调度的基本单位,每个线程执行的都是某一个进程的代码片段。
多线程
在单个进程中同时运行多个线程,为了提高CPU的资源利用率。当单个线程阻塞在网络或者磁盘IO调用时,让CPU去调度其他的线程。
并行与并发
并行与并发的一些概念
并发是指单线程调度多线程形成并发的概念,两个或者多个事件在同一时间间隔发送。
并行是包含并发的,并行是指两个或者多个事情在同一时间发生。
在同一台机器上面,并行度是有几个CPU内核并行度就是几,同一时刻,CPU只能做一件事情。并发度一般用每秒做多少事情来衡量,就出现了QPS、TPS这些概念。
并发数的意义
并发数是容量评估的重要手段
容量评估主要包括数据量和并发量,数据量主要通过数据归档,合理规划磁盘容量来解决。并发量主要是靠CPU以及内存来解决。
并发数与响应时间
响应时间是指从发出请求到收到响应所花费的时间,并发数用于容量评估,响应时间关注点在于用户体验。理论上单笔请求时间越短,总体能承担的并发量也就越大。
应对并发
防御措施
使用以下的这些防御措施,为系统争取扩容的时间。
隔离
隔离的主要目的是避免单个服务的故障继而引发系统全局的故障,产生一系列的连锁反应。通过隔离能够使问题局部化处理。
常见的隔离策略主要包括三大方面,服务隔离、轻重隔离、物理隔离。服务隔离主要包含动静隔离,读写隔离。轻重隔离包含核心隔离、热点隔离、用户隔离。物理隔离包含线程、进程、机房、集群。
流控
流控的作用是可以帮助我们应对突发的流程,通过限制服务的请求率来保护服务不被过载导致不可用。
熔断
熔断本质上是一种快速失败的策略,及时的中断失败或者超时的操作,来防止资源的过度消耗和请求堆积,从而避免服务因小问题引发一系列全局的反应。
降级
将系统中不重要的功能模块停掉或者当一些模块进行熔断时返回一些兜底的数据。 本质上是牺牲一部分功能或者体验来来保证系统的可用性。
扩展措施
单机扩展
单机扩展主要是指CPU、内存、缓存、JVM调优、SQL优化
集群扩展
对服务来说就是集群扩容、对数据库来说读写分离、分库分表、日表月表定期删除归档、数据冷热分离。
衡量系统的四大指标
响应时间
响应时间是指用从客户端发起一个请求开始,到客户端接收到从服务器返回的结果,整个过程所耗费的时间。响应时间 = 网络时间+应用程序处理时间
吞吐量
系统在单位时间内能够处理的请求数量或事务数量。
错误率
系统在高负载情况下,失败业务的占比,系统在面对大量请求时的稳定性和可靠性。
资源饱和度
资源饱和度反映了系统资源的使用情况,主要包含CPU、内存、磁盘、网络。