Vert.x学习笔记-异步编程和响应式系统
GPT是指Generative Pre-Trained Transformer (生成式预训练Transformer模型),平时在生活和工作中碰到一些问题的时候会去通过这种方式来解决,一般用的比较多的是百度的文心一言
同步阻塞模式
该模式主要的行为特征就是当我们再执行某项操作时,当我们依赖的其它操作没有准备好之前,我们一直等在这里,直到依赖的其它操作完成为止
优点
- 实现简单,容易理解
缺点
- 阻塞操作比较浪费资源,在阻塞过程中CPU无法去处理其它操作
- 并发处理能力比较弱
实例
- Java中的BIO相关的操作,如 InputStream 、OutputStream等
异步非阻塞模式
其实在Java中,其实我们大部分的异步IO非阻塞模式都是通过Java底层的NIO来实现的,NIO本质是一个同步非阻塞的操作,通过IO多路复用与事件循环线程模型来实现
优点
- 并发处理能力强,对高并发的操作更加友好
缺点
- 在处理过程中由于涉及到了多线程、回调等操作,处理过程比较复杂,比较难理解
实例
- Vert.x
响应式系统的特点
-
可伸缩性 (Elastic:弹性) :应用程序可以以不同数量的实例来进行工作,可以根据不同数量的实例来负载不同的流量。该特点保证了系统的高承载能力
-
回弹性(Resilient) : 服务的回弹性是指在服务遇到问题时,能够作出反应并恢复正常运行的能力。该特点保证了系统的稳定性。为了实现回弹性,我们通常会采用负载均衡、容错处理、分布式缓存等手段
-
即时响应 (Responsive): 稳定一致的响应时间(如果可伸缩的系统依赖了不可伸缩的资源,例如单个数据库,那么即时响应就无法实现,因为随着实例的增多,不可伸缩的资源会影响响应时间)
-
消息驱动(Message-Driven): 异步的消息传递机制(远程过程调用(RPC)属于是阻塞式机制),消息驱动可以把消息分发到更多的实例,使系统具有更好的可伸缩性
响应式系统 : 具备可伸缩性、回弹性、即时响应、消息驱动这些特征的可靠的应用系统
响应式编程: 一种对变化和事件作出响应的变成模式。例如电子表格,当一个单元格发生了变化,依赖于它的使用了计算公式的其它表格将自动重新计算结果, RxJava是一个流行的Java响应式拓展
响应式流: 当系统间存在连续的数据流交换时,就会出现传统的 生产者-消费者 问题,响应式流是一种费阻塞背压方式处理异步数据流的标准,它提供了一种最小化的接口、方法和协议描述必要的操作和实体。在系统之间高并发的大量数据流交互中,通常采用异步的发布-订阅模式,当生产者产生的数据速度远远大于消费者的消费速度,消费者会承受巨大的资源压力而有可能奔溃,此时,需要一种背压机制,即通过控制数据流的速度以防止快速的数据流压垮目标