学透 Spring:从入门到项目实战
丁雪丰
美团研究员
1073 人已学习
立即订阅
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
时长 07:11
时长 15:51
时长 00:10
时长 02:03
时长 00:39
学透 Spring:从入门到项目实战
15
15
1.0x
00:00/00:00
登录|注册

第 11 章 Web 开发进阶(3)

11.4 响应式 Web

到目前为止,本书一直使用的是命令式编程方式,整个处理过程也都是阻塞式的。以提供 Web 服务为例,我们如果希望同时并发地服务 100 个请求,那就需要 Tomcat 容器有 100 个工作线程,每个线程处理一个请求,如果来了第 101 个请求,那它只能等待前面的某个请求被处理完,有空闲的线程后才开始处理。每个线程本身是要消耗一定资源的,(例如消耗更多内存),大量线程间的切换也会消耗 CPU。但这还不是最要命的,最要命的是在请求处理过程中,如果我们还需要与数据库交互,或者读写文件,又或者调用远程服务,那么当前线程就不得不被阻塞,直到操作结果返回,这就会造成大量的资源浪费。
想要处理更多请求,无非是提升性能,提高并发度。可以用更多的线程和更强的机器,也可以想办法挤压现有资源。既然基于同步线程的方式不行,那就换别的方式,人们自然想了各种办法,如何用更少的资源来提供更大的吞吐量,基于事件驱动的方式是否可行呢?
不同的事件有不同的处理器,在注册完各种处理器之后,通过 IO 多路复用来检测是否有事件(不仅是网络,UI 界面上的点击也算是一种事件),例如 8080 端口是否收到了一个请求,有请求就将它分派给具体的事件处理器做后续处理。而请求处理本身也是事件驱动的,遇到 IO 操作不会“傻傻”地等待结果返回,同样会依靠 IO 完成事件通知。这样一来就能将原本处于阻塞状态的大量线程释放出来。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了响应式编程在Web开发中的应用,重点聚焦于Project Reactor框架。该框架基于Reactor项目,提供了两个重要概念——Publisher和Subscriber,通过这些概念可以实现数据的生产和订阅。在Project Reactor中,Mono代表0或1个对象,Flux代表多个对象,并提供了丰富的操作方法。此外,文章还介绍了Publisher针对事件的钩子方法,并探讨了线程调度和错误处理等方面的内容。通过示例代码展示了如何使用这些方法,以及如何切换执行的上下文。总的来说,响应式编程在Web开发中具有重要意义,而Project Reactor框架为开发者提供了强大的工具来实现响应式编程。 此外,文章还介绍了背压机制,用于解决上游生产速度远大于下游消费速度的情况,以及介绍了使用WebFlux代替WebMVC的方法。WebFlux是一套完全非阻塞的Web框架,不依赖Servlet容器,提供了强大的客户端支持。通过Spring Boot可以方便地引入WebFlux,并且可以选择不同的内置服务器支持。这些内容为读者提供了全面了解响应式编程和WebFlux框架的概览。文章还提到了响应式编程和命令式编程的适用场景,以及迁移至Project Reactor和WebFlux的建议。文章内容丰富,对于想要了解响应式编程和WebFlux框架的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部