读Java实战(第二版)笔记14_CompletableFuture及反应式编程背后的概念

1. 潮流

1.1. 与应用程序运行的硬件平台相关

1.1.1. 编写能充分利用多核处理器能力的软件

1.2. 与应用程序的结构相关

1.2.1. 反映了互联网应用对可用性日益增长的需求

2. 聚合型应用(mashup)

2.1. 使用来自多个数据源的内容,将它们聚集在一起,从而简化我们的生活

3. 并发

3.1. 一种编程属性(重叠地执行)

3.2. 在单核的机器上可以执行

4. 并行

4.1. 执行硬件的属性(同时执行)

5. 为支持并发不断演进

5.1. 提供了锁(通过synchronized类和方法)、Runnable以及线程

5.2. Java 5又引入了java.util.concurrent包

5.3. Java 7为了使用fork/join实现分而治之算法,新增了java.util.concurrent.RecursiveTask

5.4. Java 8则增加了对流和流的并行处理(依赖于新增的Lambda表达式)的支持

5.5. Java 9提供了对分布式异步编程的显式支持

5.6. Java 9通过“发布-订阅”协议增加了对反应式编程的支持

6. 线程以及更高层的抽象

6.1. 对并行流的迭代是比显式使用线程更高级的概念

6.2. 使用流(Stream)是对一种线程使用模式的抽象

6.3. 执行器和线程池

6.3.1. Java 5提供了执行器框架,其思想类似于一个高层的线程池,可以充分发挥线程的能力

6.3.2. 能以很低的成本向线程池提交上千个任务,同时保证硬件匹配的任务执行

6.4. 使用线程池都比直接操纵线程要好

6.4.1. 使用k个线程的线程池只能并发地执行k个任务

6.4.2. 超限的任务会被加入等待队列,直到现有任务执行完毕才会重新调度空闲线程去执行新任务

6.5. 严格fork/join

6.5.1. 线程创建以及与其匹配的join()在调用返回的嵌套方法调用中都以嵌套的方式成对出现

6.5.2. 无论什么时候,任何任务(或者线程)在方法调用中启动时,都会在其返回之前调用同一个方法

6.6. 非嵌套方法调用

7. 同步及异步API

7.1. 同步API变为异步API

7.1.1. 方法不再在物理返回其调用者的同时返回它的执行结果

7.1.2. 被调用函数可以在返回结果就绪之前物理上提前返回调用函数

7.1.3. 方法异步化(在完成它们的工作之前返回)能提升程序的并发度,其可以与用于循环结构的优化进行互补

7.2. Future风格的API

7.2.1. 使用Java Future的改进版本

7.3. 反应式风格的API

7.3.1. 使用Java 9 java.util.concurrent.Flow接口的反应式编程风格

7.4. 有害的睡眠及其他阻塞式操作

7.4.1. 线程池中的任务即便是处于睡眠状态,也会阻塞其他任务的执行

7.4.2. 它们无法停止已经分配了线程的任务,因为这些任务的调度是由操作系统管理的

8. “线框-管道”模型

8.1. box-and-channel

8.2. 可以对异步系统进行可视化

8.3. 设计和理解并发系统最好的方式是使用图形

9. 反应式系统

9.1. 一个程序,其架构很灵活,可以在运行时调整以适应变化的需求

9.2. 响应性

9.2.1. 不能因为正在替某人处理一个大型任务就延迟其他用户的查询请求,它必须实时地对输入进行响应

9.3. 韧性

9.3.1. 不能因为某个组件失效就无法提供服务

9.4. 弹性

9.4.1. 系统可以调整以适应工作负荷的变化,持续高效地运行

9.5. 消息驱动

9.5.1. 基于线框-管道模型提供了内部API,组件等待要处理的输入,处理结果通过消息发送给其他的组件

10. Future和CompletableFuture

10.1. 思维模式是计算的执行是独立且并发的

10.2. Future是一个一次性对象,它只能从头到尾执行代码一次

11. 反应式编程

11.1. 思维模式是类Future的对象随着时间的推移可以产生很多的结果

12. 发布-订阅”的模型

12.1. pub-sub

12.2. 订阅者可以订阅的发布者

12.3. 名为订阅的连接

12.4. 消息(也叫事件),它们通过连接传输

12.5. 数据的流动是从发布者(生产者)流向订阅者(消费者)

12.5.1. 向上流(upstream)

12.5.2. 向下流(downstream)

12.6. 提供了对onError和onComplete方法的支持

12.6.1. 比传统的观察者模式更加强大

12.7. 背压

12.7.1. 流量控制

12.8. 压力

posted @ 2023-02-19 07:18  躺柒  阅读(67)  评论(0编辑  收藏  举报