后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
3818 人已学习
课程目录
已更新 23 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (13讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?
15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?
16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程
17 | 设计模式应用:编程框架中的设计模式
18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?
19 | 组件设计原则:组件的边界在哪里?
20 | 领域驱动设计:35岁的程序员应该写什么样的代码?
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

李智慧 2020-01-01
我们在专栏第 1 篇就讨论了为什么在高并发的情况下,程序会崩溃。主要原因是,在高并发的情况下,有大量用户请求需要程序计算处理,而目前的处理方式是,为每个用户请求分配一个线程,当程序内部因为访问数据库等原因造成线程阻塞时,线程无法释放去处理其他请求,这样就会造成请求堆积,不断消耗资源,最终导致程序崩溃。
这是传统的 Web 应用程序运行期的线程特性。对于一个高并发的应用系统来说,总是同时有很多个用户请求到达系统的 Web 容器。Web 容器为每个请求分配一个线程进行处理,线程在处理过程中,如果遇到访问数据库或者远程服务等操作,就会进入阻塞状态,这个时候,如果数据库或者远程服务响应延迟,就会出现程序内的线程无法释放的情况,而外部的请求不断进来,导致计算机资源被快速消耗,最终程序崩溃。
那么有没有不阻塞线程的编程方法呢?

反应式编程

答案就是反应式编程。反应式编程本质上是一种异步编程方案,在多线程(协程)、异步方法调用、异步 I/O 访问等技术基础之上,提供了一整套与异步调用相匹配的编程模型,从而实现程序调用非阻塞、即时响应等特性,即开发出一个反应式的系统,以应对编程领域越来越高的并发处理需求。
人们还提出了一个反应式宣言,认为反应式系统应该具备如下特质:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • 草原上的奔跑
    异步的调用一般比较难调试,运行正常的时候性能好、可用性高,但出问题后debug比较困难,不知道李老师你们是如何处理的

    作者回复: 异步难调试主要是因为异步的代码执行在不同的线程上,导致没有统一的调用栈,异常的时候不知道哪里出错的。Flower通过流程编排的方式管理异步方法代码,出错的时候可以通过流程定位异常,对调试定位有帮助。

    2020-01-01
    4
  • 老男孩
    李老师和专栏的朋友们新年快乐!哈哈!又一年了。虽然我还在现实的苟且中徘徊,但依然算是不忘初心吧。用一句现在很流行的话就是,愿大家只争朝夕,不负韶华。之前研究了一下spring的webflux发现目前异步编程在数据库驱动这块对关系型数据库的支持不太好,比如myspl。还有诺诺的问一下,mailbox是不是一个内存队列?不知道flower能不能支持用第三方的消息队列来替换mailbox的工作?还有actor里边是不是用到模板设计模式了?

    作者回复: 新年快乐。异步数据库驱动还是有一些的,但是因为业界用的不多,所以都不怎么维护。反应式编程的大气候还是没起来。

    2020-01-01
    1
  • 你的美
    老师这篇文章我一时还掌握不了,课程学完后,以后多久就不能打开看了呢?

    作者回复: 购买以后可以一直看的

    2020-01-03
  • 鹏酱
    最终一致性和结果查询,处理方法是,补偿机制和定时查询
    2020-01-02
  • 七七的首席铲屎官
    老师您好 对响应式我有一点困惑 响应式通过异步消息来减少同步造成的时间等待 但是在实际实践的时候对于需要同步的需求要怎么实现呢 比如在页面对某个字段进行更新时响应式接口无法立即得到最终的结果 对于更新失败的情况怎么在前端展示呢?

    作者回复: 反应式实践其实更多落地就是在前端,发送请求后就不管了,然后等到异步响应到达后异步更新页面。

    2020-01-01
  • a、
    老师,我目前使用的play框架也是基于akka做异步调用的,你觉得play框架和flower框架有哪些区别?

    作者回复: 背后的运行原理一致,但是编程模型有很大区别,Flower是基于流程进行编程的,更符合开发者的思维习惯。

    2020-01-01
    1
收起评论
6
返回
顶部