openwrt固定速率_固定速率与固定延迟– RxJava常见问题解答

openwrt固定速率

如果您使用的是纯Java,从版本5开始,我们有一个方便的调度程序类,该类允许以固定速率或固定延迟运行任务:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);

基本上,它支持两种类型的操作:

scheduler.scheduleAtFixedRate(() -> doStuff(), 2, 1, SECONDS);
scheduler.scheduleWithFixedDelay(() -> doStuff(), 2, 1, SECONDS);

scheduleAtFixedRate()将确保每秒精确调用doStuff() ,初始延迟为2秒。 当然,垃圾回收,上下文切换等仍然会影响精度。 scheduleWithFixedDelay()看起来很相似,但是它考虑了doStuff()处理时间。 例如,如果doStuff()运行doStuff()毫秒,则固定速率将仅等待800毫秒,直到下一次重试。 另一方面, scheduleWithFixedDelay()总是在重试之间等待相同的时间(在本例中为1秒)。 在不同情况下,两种行为当然都是可取的。 仅记住,当doStuff()的速度慢于1秒时, scheduleAtFixedRate()不会保留所需的频率。 即使我们的ScheduledExecutorService有10个线程, doStuff()也绝不会被同时调用并且不会与之前的执行重叠。 因此,在这种情况下,速率实际上将小于配置的速率。
<h1”> RxJava中的计划

使用interval()运算符,使用RxJava模拟scheduleAtFixedRate()非常简单。 有几点警告:

Flowable.interval(2, 1, SECONDS).subscribe(i -> doStuff());

如果doStuff()的速度慢于1秒,则会发生不良情况。 首先,我们使用Schedulers.computation()线程池,它是从interval()运算符继承的默认池。 这是一个坏主意,该线程池仅应用于CPU密集型任务,并在整个RxJava之间共享。 一个更好的主意是使用您自己的调度程序(或至少使用io() ):

Flowable.interval(2, 1, SECONDS).observeOn(Schedulers.io()).subscribe(i -> doStuff());

observeOn()从开关computation()由用于调度interval()io()调度器。 由于subscribe()方法永远不会被设计并发调用, doStuff()永远不会并发调用,就像scheduleAtFixedRate() 但是, interval()运算符非常努力地保持恒定的频率。 这意味着如果过一会儿doStuff()的速度慢于1秒,我们应该期望MissingBackpressureException …RxJava基本上告诉我们订户速度太慢,但是interval() (根据设计)不会变慢。 如果您可以容忍(甚至期望) doStuff()并发执行重叠,则修复起来非常简单。 首先,必须使用非阻塞Completable包装阻塞的doStuff() 。 从技术上讲, Flowable SingleMaybe也可以工作,但是由于doStuff()void ,所以Completable听起来不错:

import io.reactivex.Completable;
import io.reactivex.schedulers.Schedulers;Completable doStuffAsync() {return Completable.fromRunnable(this::doStuff).subscribeOn(Schedulers.io()).doOnError(e -> log.error("Stuff failed", e)).onErrorComplete();
}

捕获并吞下异常很重要,否则单个错误将导致整个interval()中断。 doOnError()允许记录日志,但它将异常通过下游传递。 另一方面, doOnComplete()仅吞下异常。 现在,我们可以在每个间隔事件中简单地运行此操作

Flowable.interval(2, 1, SECONDS).flatMapCompletable(i -> doStuffAsync()).subscribe();

如果您不subscribe()循环将永远不会开始-但这是RxJava101。请注意,如果doStuffAsync()花费一秒钟以上的时间来完成,我们将得到重叠的并发执行。 这没什么不对,您只需要意识到这一点。 但是,如果您真正需要的是固定延迟怎么办?

修复了RxJava中的延迟

在某些情况下,您需要固定的延迟:任务不应重叠,并且在两次执行之间我们应保持喘息的时间。 不管周期性任务有多慢,都应始终保持恒定的时间暂停。 interval()运算符不适合实现此要求。 但是,事实证明,RxJava中的解决方案非常简单。 想一想:您需要睡一会儿,运行一些任务,然后在完成此任务后重复。 让我再说一遍:

  • 睡一会儿(有一些timer()
  • 运行一些任务,等待它complete()
  • repeat()

而已!

Flowable.timer(1, SECONDS).flatMapCompletable(i -> doStuffAsync()).repeat().subscribe();

timer()运算符在一秒钟后发出一个事件( Long类型的0 )。 我们使用此事件来触发doStuffAsync() 。 当我们的东西做,全码流完成-但我们想重复! 好吧, repeat()运算符就是这样做的:当它从上游收到完成通知时,它会重新订阅。 重新订阅基本上意味着:再等待1秒钟, doStuffAsync() –依此类推。

翻译自: https://www.javacodegeeks.com/2017/09/fixed-rate-vs-fixed-delay-rxjava-faq.html

openwrt固定速率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何处理表单中的中文(中文编码/解码问题)

浏览器会如何对表单中的数据进行编码? 当表单采用 post 方式提交时&#xff0c;浏览器会按照打开该表单所在的页面的编码来对表单中的数据进行编码。 在 html 文件当中设置字符编码集&#xff08;即字符编码格式&#xff09; <meta http-equiv"content-type" …

linux 进城 管道丢数据,linux – 使用命名管道与bash – 数据丢失的问题

有人在线搜索,发现简单的“教程”使用命名管道.但是,当我做任何后台工作时,我似乎失去了大量的数据.[[编辑&#xff1a;找到一个更简单的解决方案,看到回复帖子.所以我提出的问题现在是学术性的 – 万一有人想要一个工作服务器]]使用Ubuntu 10.04与Linux 2.6.32-25-generic#45-…

wso2 安装_WSO2注册表安装简介

wso2 安装这篇文章基于有关注册表安装及其工作原理等常见问题。以下是人们提出的主要问题&#xff1a; 1&#xff09;。 安装如何工作&#xff1f; 2&#xff09;。 Config Registry和Governance Registry有什么区别&#xff1f; 3&#xff09;。 可以将H2以外的数据库用于本…

Servlet配置错误处理页面/配置错误页面

写一个错误处理页面 error.html <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <title>Insert title here</title> </head> <body style"font-size:30px;color:red;&quo…

azdb文件怎么打开_AZDBExplorerSvcs.dll

我该如何安装从金山毒霸下载的DLL文件&#xff1f;一&#xff1a;1、从金山毒霸下载压缩文件。2、将DLL文件解压到电脑上的某个地方。3、把该文件跟要求使用它的程序放在同一路径上。注意32位程序需要使用32位的DLL文件&#xff0c;64位程序需要使用64位的DLL文件。否则会出现0…

linux添加windows网络打印机,Linux Mint如何添加windows分享的网络打印机?

1.安装sambasudo apt-get install samba2.找到系统打印机选项通过 Menu-->>控制中心-->>系统管理找到 Printers选项&#xff0c;双击打开。3.核对windows打印机名并添加在如上图的画面中&#xff0c;点击 “Network Printer”&#xff0c;再点击“windows Printer …

5菜鸟教程_excel图文教程:应用PQ工具进行数据整理

编按&#xff1a;哈喽&#xff0c;大家好&#xff01;在日常工作中&#xff0c;我们经常会与数据打交道&#xff0c;那整理数据自然也是一件习以为常的事。但就是这么一件天天都会做的事&#xff0c;却让很多人压力山大&#xff0c;这不&#xff0c;又有一位小伙伴遇到问题了&a…

MyEclipse 如何将 jar 包导入项目中

步骤 1 项目右键->build path( 构建路径 )->configure build path(配置构建路径) 步骤 2 Java Build Path --> libraries(库) --> Add External JARs --> 选择 ojdbc14_11g.jar 在项目中出现 Referenced Libraries , 则完成

redis lettuce_Redis Client Lettuce 5 GA发布

redis lettuce经过13个月的开发阶段和208张已解决的故障单&#xff0c;我很高兴宣布Lettuce 5.0全面上市。 这是一个主要发行版&#xff0c;带有一些重大更改&#xff0c;新的有趣功能以及Java 9兼容性。 从Maven Central获取发行版 <dependency><groupId>io.let…

c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf

C语语言言中中“不不受受限限制制”的的字字符符串串函函数数总总结结“不不受受限限制制的的“字字符符串串函函数数按 《C和指针》中所说&#xff0c;那些常用的字符串函数都是“不是限制的”&#xff0c;就是说 们只能通过寻找字符串末尾的NULL来判断字符串的长度。strlenst…

测试类/测试包/演示类/演示包的命名规范/命名规则

文章目录1.测试类的命名规范2.测试程序的包命名规范3.测试方法命名规范4.演示类/范例类的命名规范1.测试类的命名规范 测试类命名规则&#xff1a;Test 要测试的类名称 测试类命名规则&#xff1a;功能名称或者类名 Test ✓ 2.测试程序的包命名规范 测试程序包的命名规则是…

mybatis转义反斜杠_MyBatis Plus like模糊查询特殊字符_、\、%

在MyBatis Plus中&#xff0c;使用like查询特殊字符_&#xff0c;\&#xff0c;%时会出现以下情况&#xff1a;1、查询下划线_&#xff0c;sql语句会变为"%_%"&#xff0c;会导致返回所有结果。在MySQL中下划线“_”表示匹配单个字符&#xff0c;所以结合后“%_%”就…

移动端apm关键指标_3个经常被忽视的APM关键功能

移动端apm关键指标APM核心功能已不再足够。 市场领先的应用程序超越了所有人&#xff0c;树立了其他人必须匹配的新标准。 每当任何针对消费者或企业的Web应用程序达到新的性能高峰时&#xff0c;都会为用户期望值设定基准。 这可能不公平或不合理&#xff0c;但这就是市场运作…

Java包命名规则/包命名规范

文章目录个人项目的包命名规则团队项目的包命名规则包前缀说明包名通常是一个单词&#xff0c;且单词通常是名词&#xff0c;字母全部小写&#xff0c;如果多个单词使用下划线连接。 个人项目的包命名规则 individual&#xff08;个体&#xff09;&#xff1a;指个体项目&…

程序设计基础(c语言)复习大纲,《程序设计基础-C》复习大纲.doc

《程序设计基础-C》复习大纲.doc《程序设计基础-C》复习大纲第一部分 期末考核说明一、期末考试要求考核学生是否掌握C语言的基本概念&#xff0c;能否较熟练运用Visual C工具进行程序设计。具体考核要求分为以下几个层次&#xff1a;掌握C的基本语法结构&#xff1b;掌握基本的…

单容水箱液位pid控制实验报告_单容水箱液位PID控制系统

图7-1、单容水箱液位控制系统的方块图图7-1为单容水箱液位控制系统。这是一个单回路反馈控制系统&#xff0c;它的控制任务是使水箱液位等于给定值所要求的高度&#xff1b;并减小或消除来自系统内部或外部扰动的影响。单回路控制系统由于结构简单、投资省、操作方便、且能满足…

oauth 使用令牌_使用OAuth2令牌的安全REST服务

oauth 使用令牌1.简介 在本教程中&#xff0c;我们将介绍如何将Spring Security与OAuth结合使用以保护REST服务。 在演示应用程序中&#xff0c;可以使用路径模式&#xff08; / api / ** &#xff09;访问服务器上受保护的REST资源&#xff0c;以便基于该路径的请求URL映射到不…

如何解析属性文件(properties)获取键值对的值?

文章目录创建属性文件解析属性文件获取数据使用类加载器使用 File 对象创建属性文件 新建 db-oracle.properties , 存放项目必须使用到的参数&#xff1a; driver oracle.jdbc.driver.OracleDriver url jdbc:oracle:thin:192.168.0.23:1521:htlwk username openlab passwo…

微信小程序 高德地图知道两点求道路_微信小程序——计算2点之间的距离

关于计算2点之间的距离都依赖了腾讯地图&#xff0c;所以请先在下面具体讲计算2点之间距离的方法。方法一&#xff1a;getPosition: function() {var that this;wx.getLocation({success:function(res) {that.setData({fromLng: res.longitude,fromLat: res.latitude})}})},2.…

c语言char指针用法,整理C语言中各种类型指针的特性与用法

2016指针为什么要区分类型&#xff1a;在同一种编译器环境下,一个指针变量所占用的内存空间是固定的。比如,在16位编译器环境 下,任何一个指针变量都只占用8个字节,并不会随所指向变量的类型而改变。虽然所有的指针都只占8个字节,但不同类型的变量却占不同的字节数。一个int占用…