RxJava 调度程序的用例

2023-12-10

在RxJava中有5种不同的调度程序从中选择:

  1. 即时():创建并返回一个立即在当前线程上执行工作的调度程序。

  2. 蹦床():创建并返回一个调度程序,该调度程序将当前线程上的工作排队,以便在当前工作完成后执行。

  3. 新线程():创建并返回一个为每个工作单元创建一个新线程的调度程序。

  4. 计算():创建并返回用于计算工作的调度程序。这可用于事件循环、处理回调和其他计算工作。不要在此调度程序上执行 IO 密集型工作。使用调度程序。io()反而。

  5. io():创建并返回一个用于 IO 绑定工作的调度程序。 该实现由执行器线程池支持,该线程池将根据需要增长。这可用于异步执行阻塞 IO。不要在此调度程序上执行计算工作。使用调度程序。计算()反而。

问题:

前 3 个调度程序非常不言自明;不过,我有点困惑计算 and io.

  1. 到底什么是“IO 密集型工作”?它是否用于处理流(java.io)和文件(java.nio.files)?它用于数据库查询吗?它用于下载文件或访问 REST API 吗?
  2. How is 计算()不同于新线程()?难道这一切都是计算()调用每次都在单个(后台)线程上而不是新的(后台)线程上?
  3. 为什么打电话不好计算()什么时候做IO工作?
  4. 为什么打电话不好io()当做计算工作时?

很好的问题,我认为文档可以提供更多细节。

  1. io()由无界线程池支持,并且是用于非计算密集型任务的那种东西,即不会给 CPU 带来太多负载的东西。因此,与文件系统的交互、与不同主机上的数据库或服务的交互都是很好的例子。
  2. computation()由大小等于可用处理器数量的有界线程池支持。如果您尝试在多个可用处理器上并行调度 CPU 密集型工作(例如使用newThread())那么,当线程争夺处理器时,您就会面临线程创建开销和上下文切换开销,这可能会严重影响性能。
  3. 最好离开computation()仅适用于 CPU 密集型工作,否则您将无法获得良好的 CPU 利用率。
  4. 打电话不好io()出于 2 中讨论的原因进行计算工作。io()是无界的,如果你在上面安排一千个计算任务io()如果并行,那么这 1000 个任务中的每一个都将拥有自己的线程,并竞争 CPU,从而产生上下文切换成本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxJava 调度程序的用例 的相关文章

随机推荐

  • Android发布密钥库问题:“密钥库被篡改,或密码不正确”

    几个月前 我使用以下命令生成了 Android 版本密钥库 keytool genkey v keystore my release key keystore alias myalias keyalg RSA keysize 2048 va
  • 从最新到最旧读取事件日志

    我编写了一个简短的程序 使用启动和关闭时发布的事件日志消息来确定远程 PC 的正常运行时间 目前的逻辑是 foreach eventlogentry if entryTime gt OldestTime if entry Startup a
  • Spring MVC不加载css、js文件到静态html页面

    我禁用了该角色内部视图解析器为了访问一些静态页面 html not jsp页面 我做了所需的更改 确实我做了并且我可以访问我的html页面 但是当我看到浏览器的控制台时 它看起来好像没有带来我的本地css and js files 这是我的
  • 在 Ruby 中访问 JSON 对象 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我有一个 json 文件 看起来像这样 Results Lookup null Result Paths Domain VALUE1 LTD Url Text1 Modules Name
  • 如何编辑文件夹/文件的修改日期?

    我正在使用 webdav 和 HttpWebRequest MKCOL 方法在 SP 中创建文件夹 我使用 WebClient 上传文件 对于上传的文件和创建的文件夹 如何设置其修改日期 我正在寻找类似的东西Directory SetLas
  • Swift 5:转义闭包捕获“inout”参数

    我已经有了从服务器收到的响应数据 这个响应数据有一些面包师数据 现在我想计算用户和面包店的距离 然后将其存储在同一个模态类中 我为它创建了一个函数 由于这个函数需要在 4 5 视图控制器中使用 我的计划是创建为 UIViewControll
  • 如何在 Python 中使用 ctypes 卸载 DLL?

    我正在使用 ctypes 在 Python 中加载 DLL 这很好用 现在我们希望能够在运行时重新加载该 DLL 直接的方法似乎是 1 卸载DLL 2 加载DLL 不幸的是我不确定卸载 DLL 的正确方法是什么 ctypes FreeLib
  • 创建自定义 Powershell 对象的多个实例

    我正在 Powershell 脚本中创建一个新对象 或者实际上是一个对象类型 我想创建该对象的多个实例 我该怎么做呢 下面的代码是我正在处理的代码 看起来数组中的所有实例都引用相同的对象 包含相同的值 Define output objec
  • DART:有人可以向我解释一下这句话吗?

    我正在学习 Dart 和 Flutter 但我正在努力解决一些基本的编程问题 例如 getter 的使用 GoogleSignInAccount get user gt user 与 get 方法等效的是什么 什么是 变量末尾的意思是什么
  • 在 Sublime Text 2 中使用默认的 ruby​​ 版本

    我的默认当前 ruby 版本是 1 9 3 它实际上是我运行时出现的唯一版本rvm list所以我不明白我怎么能把那部分搞乱 我确实关注了this我在这里找到的教程 但它似乎破坏了一切 对于我看到的修复程序的所有变体 甚至在评论中 我不断收
  • 通过 AWS Data Pipelines 运行 python 脚本

    我使用 AWS Data Pipelines 运行夜间 SQL 查询 以填充表以获取摘要统计信息 用户界面有点时髦 但最终我安装并运行了 现在我想用 python 脚本做类似的事情 我有一个每天早上在笔记本电脑上运行的文件 forecast
  • 是否可以在不使用 lambda 的情况下将标准函数模板之一作为参数传递?

    例如 std get
  • PDO-MySQL:在准备好的语句绑定上布尔值被转换为 1 或空字符串

    我正在尝试将一些布尔值插入到 JSON 类型列中 taskSql INSERT INTO Tasks data taskListId VALUES JSON OBJECT title title done done taskListId t
  • UICollectionView 单元格与图像,单击更改背景

    我有一个UICollectionView with Custom CollectionView Cells 每个Cell上都有一个Image 它和整个Cell一样大 现在我想在用户触摸单元格时突出显示该单元格 首先我尝试了以下方法deleg
  • Apps 脚本与 Chrome 扩展:编写 Google 文档的替代拼写检查器

    Say 我想开发一个替代谷歌文档的拼写检查模块 这意味着我必须从后端获取更正 并对拼写错误的文本的背景进行着色 并在用户将鼠标悬停在其上方时弹出一个小气泡 在其中显示更正 请注意 拼写检查不是我项目的实际目标 但它确实以更简化的方式解决了我
  • 计算 Pandas 中字符串列中的单词数

    我有一个 pandas 数据框 其中包含给定时间段的查询和计数 我希望将此数据框转换为唯一单词的计数 例如 如果数据框包含以下内容 query count foo bar 10 super 8 foo 4 super foo bar 2 我
  • 外部表的格式不符合预期。

    我正在创建一个小应用程序来将 Excel 数据导入我的数据库 当我单击按钮时 它崩溃并出现错误 外部表的格式不符合预期 我尝试在谷歌上搜索并更改代码 但问题仍然出现 我尝试将文件另存为 xls 当我运行代码时 页面与 google chro
  • 具有自定义哈希行为的 python 对象集

    我想使用一个集合来管理 myItem 实例的集合 myItem 类有自己的哈希函数 这些项目的哈希值基于每个项目中的部分数据 但不是全部数据 为简单起见 在下面的示例中 数据 是字典 r 哈希考虑了 2 个键 hk1 和 hk2 还有第三个
  • AutoValue 示例:错误:找不到符号类 AutoValue_Animal

    我正在尝试了解 AutoValue 我按照中的例子https github com google auto blob master value userguide index md 我使用的是 Android Studio 3 4 我添加我
  • RxJava 调度程序的用例

    在RxJava中有5种不同的调度程序从中选择 即时 创建并返回一个立即在当前线程上执行工作的调度程序 蹦床 创建并返回一个调度程序 该调度程序将当前线程上的工作排队 以便在当前工作完成后执行 新线程 创建并返回一个为每个工作单元创建一个新线