多线程是越多越好, 还是越少越好?
正确的设计思路是, 让少量的线程一直忙, 最好等于CPU核数, 而不是让大量的线程一直切换
大量的线程只会引起激烈的资源竞争, 由于线程切换要保留现场, 既浪费内存也花费时间, 即使创建线程池也不是最优解
https://www.reactive-streams.org/
从JDK9开始, 借鉴了C#, Java底层引入了响应式规范, 四大接口位于Flow类下: java/util/concurrent/Flow.java
- Publisher
- Subscriber
- Subscription
- Processor<T,R> extends Subscriber, Publisher
传统的高并发系统, 需要分布式缓存, 分布式消息中间件做异步, 要求开发人员在架构层面做调整, 大白话就是无脑加机器
- 分布式架构并且引入了新的一致性问题
- 单体服务性能并没有压缩到极致
而所谓ReactiveStream正是针对单体服务本地化的消息系统解决方案, java/util/concurrent/Flow.java封装了整个响应式发布订阅关系, 做好了全链路的异步线程, 缓存区, 非阻塞回调处理
因此基于封装好的响应式API, 开发人员只需要组装好数据交给流水线ReactiveStream, 即可达到高性能服务器的效果
- 框架核心适配Stream以及CompletableFuture
- 将全部数据抽象为Mono(0|1)对象以及Flux(N)对象序列
- 非阻塞IO, 回调缓存区