首页 > 试题

lastest

更新时间:2022-11-12 09:24:10 阅读: 评论:0

个人辅导班传单模板-光明会杀死的艺人


2022年11月12日发(作者:九寨沟的水)

架构师学习--rxjava背压模式

什么是背压模式,在rxjava1系列是没有背压模式的,但是在rxjava2中加⼊了背压。那是因为在rxjava1中,如果上游不停地发射,下游处

理不过来(阻塞),就会出现内存泄漏。为了解决这个问题,就引⼊了背压。背压的上游被观察者是Flowable,下游观察者是Subscriber。

使⽤⽅式和Obrvable极为相似。了解到背压,就不得不说背压的⼏种策略模式:

ERROR:上游不停的发射⼤量事件,下游阻塞了处理不过来,放⼊缓存池,如果池⼦满了,就会抛出异常,最⼤128个事件

BUFFER:上游不停的发射⼤量事件,下游阻塞了处理不过来,放⼊缓存池,”等待“下游来接收事件处理

DROP:上游不停的发射⼤量事件,下游阻塞了处理不过来,放⼊缓存池,如果池⼦满了,就会把后⾯发射的事件丢弃

LASTEST:在LATEST策略下如果此时Flowable的缓存池的数据超过了最⼤值128,此时如果Flowable继续发送数据的话,缓存池

会将之后的数据都给丢弃掉,但是还会缓存发送的事件中最后⼀次发送的数据。

下⾯,针对上游同步和异步两种情况,对不同得背压模式进⾏测试。

⼀、同步

1、ERROR

测试代码如下:

(1)不执⾏t()⽅法

测试结果如下:

发⽣了异常,并且在下游onError()⽅法中打印了异常信息。

(2)执⾏t()⽅法

测试结果仍然和上⾯⼀致,但是当我们把发送的事件个数设置为128以内(上线发送了200个事件),测试结果如下:

这⾥下游处理了20个事件,即调⽤了t(20);

2、BUFFER

测试代码如下:

策略模式改为BUFFER。

测试结果如下:

(1)不执⾏t()⽅法

不会发⽣异常。

(2)执⾏t()⽅法

即使上游发送的事件数超过128,都不会发⽣异常。

3、DROP

测试代码如下:

策略模式改为DROP。

测试结果如下:

(1)不执⾏t()⽅法

不会发⽣异常。

(2)执⾏t()⽅法

发现上游发射了200个事件,但是下游最⼤接受了128个事件,其他的事件被丢弃了。

4、LASTEST

测试代码如下:

策略模式改为LASTEST。

测试结果如下:

(1)不执⾏t()⽅法

不会发⽣异常。

(2)执⾏t()⽅法

发现上游发射200个事件,下游只打印了前128个事件和最后⼀个事件。

背压模式,上游同步发射总结:

ERROR:上游发射事件不能超过128个,并且上游发射的事件如果下游没有及时处理(调⽤request()⽅法),都会抛出异常。

BUFFER:该模式下不会出现异常,并且发射的事件数量不受限制

DROP:上游发射事件超过128个,将会丢弃掉剩余的事件

LASTEST:上游发射事件超过128个,将会丢弃掉缓存池所有的事件,但是仍然会缓存发送最后的⼀次事件。

⼆、异步

1、ERROR

测试代码如下:

测试结果如下:

(1)不执⾏t()⽅法

不会发⽣异常。

(2)执⾏t()⽅法

如果发射的事件数超过128,会抛出异常,如下:

反之,如下:

2、BUFFER

和同步测试⼀致

3、DROP

和同步测试⼀致

3、LASTEST

和同步测试⼀致

背压模式,上游异步发射总结:

ERROR:异步模式下,只要发射的事件数不超过128个,那么⽆论下游有没有处理事件(调⽤request()⽅法),都不会抛出异常。

本文发布于:2022-11-12 09:24:10,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/3690.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:under的反义词
下一篇:worry的形容词
标签:lastest
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图