文档详情

Reactor+指南中文版_2.0.pdf

发布:2017-12-31约2.43万字共96页下载文档
文本预览下载声明
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()
显示全部
相似文档