RxJava中backpressure这个概念的理解

论坛 期权论坛     
选择匿名的用户   2021-5-30 01:53   224   0
<p></p>
<h1 id="toc_0" style="outline:none; margin:0px 0px 10px; font-size:36px; font-family:&#34;Segoe UI Emoji&#34;,&#34;Segoe UI Symbol&#34;,&#34;Segoe UI&#34;,&#34;Segoe WP&#34;,&#34;Microsoft YaHei UI&#34;,微软雅黑,Tahoma,Arial,Roboto,&#34;Droid Sans&#34;,&#34;Helvetica Neue&#34;,&#34;Droid Sans Fallback&#34;,&#34;Heiti SC&#34;,&#34;Hiragino Sans GB&#34;,Simsun,sans-self; font-weight:500; line-height:1.1"> RxJava</h1>
<blockquote style="outline:none; padding:10px 20px; margin:0px 0px 20px; font-size:17.5px; border-left:5px solid rgb(238,238,238); font-family:&#34;Segoe UI Emoji&#34;,&#34;Segoe UI Symbol&#34;,&#34;Segoe UI&#34;,&#34;Segoe WP&#34;,&#34;Microsoft YaHei UI&#34;,微软雅黑,Tahoma,Arial,Roboto,&#34;Droid Sans&#34;,&#34;Helvetica Neue&#34;,&#34;Droid Sans Fallback&#34;,&#34;Heiti SC&#34;,&#34;Hiragino Sans GB&#34;,Simsun,sans-self">
<p style="outline:none; margin-top:0px; margin-bottom:25px; word-spacing:1px; letter-spacing:0.01em"> 英文原文:https://github.com/ReactiveX/RxJava/wiki/Backpressure</p>
</blockquote>
<h2 id="toc_1" style="outline:none; font-family:&#34;Segoe UI Emoji&#34;,&#34;Segoe UI Symbol&#34;,&#34;Segoe UI&#34;,&#34;Segoe WP&#34;,&#34;Microsoft YaHei UI&#34;,微软雅黑,Tahoma,Arial,Roboto,&#34;Droid Sans&#34;,&#34;Helvetica Neue&#34;,&#34;Droid Sans Fallback&#34;,&#34;Heiti SC&#34;,&#34;Hiragino Sans GB&#34;,Simsun,sans-self; font-weight:500; line-height:1.1; margin-top:0px; margin-bottom:10px; font-size:30px"> backpressure</h2>
<p></p>
<p style="outline:none; margin-top:0px; margin-bottom:25px; word-spacing:1px; letter-spacing:0.01em; font-family:&#34;Segoe UI Emoji&#34;,&#34;Segoe UI Symbol&#34;,&#34;Segoe UI&#34;,&#34;Segoe WP&#34;,&#34;Microsoft YaHei UI&#34;,微软雅黑,Tahoma,Arial,Roboto,&#34;Droid Sans&#34;,&#34;Helvetica Neue&#34;,&#34;Droid Sans Fallback&#34;,&#34;Heiti SC&#34;,&#34;Hiragino Sans GB&#34;,Simsun,sans-self; font-size:18px"> 在rxjava中会经常遇到一种情况就是<span style="outline:none">被观察者</span>发送消息十分迅速以至于它的操作符或者订阅者不能及时的响应这些消息。那么问题来了,要怎么处理这些慢慢堆积起来的消息呢?<br style="outline:none"> 举个栗子,使用<code style="outline:none; font-family:Menlo,Monaco,Consolas,&#34;Courier New&#34;,monospace; font-size:16.2px; padding:2px 4px; color:rgb(199,37,78); background-color:rgb(249,242,244)">zip</code>操作符把两个无限大(假设)的<span style="outline:none">被观察者</span>压缩在一起,其中一个被观察者发送消息的速度是另外一个的两倍。一个比较天真(不科学)的做法就是把发送比较快的消息缓存起来,当比较慢的管擦者发送消息的时候取出来将他们结合在一起。但是这样会使得rxJava变得笨重且十分占用系统资源<br style="outline:none"> 在rxJava中有多重控制流以及反压力(backpressure)策略以应对当一个快速发送消息的被观察者遇到一个处理消息缓慢的观察者。本页面将会解释说明这些坑以及像你展示你应当怎么设计属于你自己的被观察者和操作符去应对流量控制(flow control)</p>
<h2 id="toc_2" style="outline:none; font-family:&#34;Segoe UI Emoji&#34;,&#34;Segoe UI Symbol&#34;,&#34;Segoe UI&#34;,&#34;Segoe WP&#34;,&#34;Microsoft YaHei UI&#34;,微软雅黑,Tahoma,Arial,Roboto,&#34;Droid Sans&#34;,&#34;Helvetica Neue&#34;,&#34;Droid Sans Fallback&#34;,&#34;Heiti SC&#34;,&#34;Hiragino Sans GB&#34;,Simsun,sans-self; font-weight:500; line-height:1.1; margin-top:0px; margin-bottom:10px; font-size:30px"> Hot and cold Observables, and multicasted(多路广播) Observables</h2>
<p style="outline:none; margin-top:0px; margin-bottom:25px; word-spacing:1px; letter-spacing:0.01em; font-family:&#34;Segoe UI Emoji&#34;,&#34;Segoe UI Symbol&#34;,&#34;Segoe UI&#34;,&#34;Segoe WP&#34;,&#34;Microsoft YaHei UI&#34;,微软雅黑,Tahoma,Arial,Roboto,&#34;Droid Sans&#34;,&#34;Helvetica Neue&#34;,&#34;Droid Sans Fallback&#34;,&#34;Heiti SC&#34;,&#34;Hiragino Sans GB&#34;,Simsun,sans-self; font-size:18px"> 一个cold Observable在它的订阅者订阅它的时候发送完整的数据序列,不管它的观察者们什么时候订阅它,或者观察者们什么以什么速率去消耗这个消息,都不会扰乱observable发送的完整性。例如把一个静态的迭代器(iterable)对象转换成了一个observable,这个observable将会对后来每个与它发生订阅关系的观察者发送通用的序列。cold observable的例子可能包括数据库查询的结果,文件序列,或者网络请求<br style="outline:none"> Hot observable 不管有没有订阅者订阅,他们创建后就开发发射数据流。 一个比较好的示例就是 鼠标事件。 不管系统有没有订阅者监听鼠标事件,鼠标事件一直在发生,当有订阅者订阅后,从订阅后的事件开始发送给这个订阅者,之前的事件这个订阅者是接受不到的;如果订阅者取消订阅了,鼠标事件依然继续发射<br style="outline:none"> 当一个cold observable是multicast的时候,为了应对反压力,应该吧一个cold observable转换成一个hot observable<br style="outline:none"> cold observable 相当于响
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP