Reactor+指南中文版_2.0.pdf
文本预览下载声明
Reactor 指南中文版 V2.0
说明
简介
Reactor 是一个基于 JVM 之上的异步应用基础库。为 Java 、Groovy 和其他 JVM 语言提供了构
建基于事件和数据驱动应用的抽象库。Reactor 性能相当高,在最新的硬件平台上,使用无堵塞分
发器每秒钟可处理 1500 万事件。
《Reactor 指南中文版》原文出自《Reactor Guide(null)》,由多位网友在开源中国众包平台协作
翻译完成,其中:
《Reactor 介绍》、《reactor 核心》由 @viemacs(null) 翻译, @静怡芸香(null) 校对;
《reactor-数据流》由 @leoxu(null) 、@K6F(null) 翻译及校对;
《reactor-总线》、《reactor-网络》、《扩展》由@K6F(null) 翻译,@暖冰(null) 校对。
反馈
大家对《Reactor 指南中文版》有任何反馈,欢迎在以下网址评论:
/news/68445(null)
特别说明
《Reactor 指南中文版》由开源中国组织翻译,转载请注明出处,未经许可不得为其它商业目的使
用。
Reactor 介绍
Reactor 介绍
Reactor 指南
作者:
Stephane Maldini,Jon Brisbin
2.0.7.BUILD-SNAPSHOT
翻译:
OSC众包翻译社
Reactor 介绍
Reactor 是一个基础库,可用它构建时效性流式数据应用,或者有低延迟和容错性要求的微
/纳/皮级服务。
— 前言Preface
TL;DR
什么是 Reactor?
现在你要了解下 Reactor,不妨在你喜欢的搜索引擎里输入
Reactive,Spring+Reactive,Asynchronous+Java 之类的关键词,或者直接输入 Reactor是什
么货?。简单说,Reactor 是一个轻量级 JVM 基础库,帮助你的服务或应用高效,异步地传递消
息。
高效是指什么?
消息从A传递到B时,产生很少的内存*垃圾,甚至不产生。
解决消费者处理消息的效率低于生产者时带来的溢出*问题。
尽可能提供非阻塞异步流*。
从经验可知(主要是 #rage 和 #drunk 的推特),异步编程很难,而像 JVM 这类提供众多可选参数
的平台则尤其困难。 Reactor 旨在帮助大多数用例真正非阻塞地运行。我们提供的 API 比 JDK 的
java.util.concurrent 库低级原语更高效。Reactor 提供了下列功能的替代函数 (并建议不使用 JDK
原生语句):
• 阻塞等待:如 Future.get()
• 不安全的数据访问:如 ReentrantLock.lock()
• 异常冒泡:如 try…catch…finally
• 同步阻塞:如 synchronized{ }
• Wrapper分配(GC 压力):如 new WrapperT(event)
当消息传递效率成为系统性能瓶颈的时候(10k msg/s,100k msg/s,1M...),非阻塞机制就显得尤
为重要。
虽然这个有理论支持 (参见 Amdahl’s Law(null)),但读起来太无聊了。我们举例说明,比如你用
了个 Executor(null) 方法:
private ExecutorService threadPool = Executors.newFixedThreadPool(8);
final ListT batches = new ArrayListT();
CallableT t = new CallableT() { // *1
public T run() {
synchronized(batches) { // *2
T result = callDatabase(msg); // *3
batches.add(result);
return result;
}
}
};
FutureT f = threadPool.submit(t); // *4
T result = f.get() // *5
1. Callable 分配 -- 可能导致 GC 压力。
2. 同步过程强制每个线程执行停-检查操作。
3. 消息的消费可能比生产慢。
4. 使用线程池(ThreadPool)将任务传递给目标线程 -- 通过 FutureTask 方式肯定会产生 GC 压力。
5. 阻塞直至 callDatabase()
显示全部