[3-02-03].第03章:编程模式 - 阻塞式编程与响应式编程对比
SpringBoot学习大纲
一、SpringBoot中的两种开发模式:
- 基于Spring5重大升级,在SpringBoot中的出现了软件开发的两套解决方案:
- 方案1是:响应式编程
- 方案2是:基于Servlet的开发(阻塞式编程)
二、两种模式说明:
SpringBoot2中基于Servlet的编程模式
基于Servlet的SpringBoot2编程模式,是同步阻塞的,意思就是一个请求过来就会分配一个线程,当大量请求时,tomcat就分配大量的线程,然后交给CPU去执行,这样就可能出现很多问题,如
- 某个CPU分配了很多的线程 ,导致负载拉满,这样就会导致系统卡顿
- 某个线程在执行过程中,可能需要等待一些数据,这时候,此线程就会阻塞,那么就会导致某CPU空闲状态,且其他线程又没有使用,那这样就会导致CPU资源浪费
- 所以说基于Servlet的SpringBoot2开发高并发系统时,需要做较多的架构设计
SpringBoot2中响应式编程模式:
a.说明:
对于响应式编程,其底层是基于Reactive Streams规范,搭配上netty、Servlet3.1以上版本这些支持异步的容器,再搭配上一系列的响应式技术栈,如WebFlux、SpringSecurity Reactive等,这样就可以更充分的挖掘多核CPU的能力,实现去处理大量的并发的目的
- 如下图所示,当大量请求过来的时候,响应式编程的底层会基于缓冲机制,再加上调度器进行工作。当大量请求过来的时候,先把请求放在缓冲区,然后由调度器负责给CPU核心进行调度, 每个核心跑的线程都比较少,但是一旦某线程处于等待时间,cpu会把此线程先暂停掉,去执行其他线程,一旦等待的数据过来的时候,此线程会被唤醒。这样就可以把cpu充分利用
b.适用场景:
- 适用于高并发、高吞吐量场景