当前位置: 首页 > 知识库问答 >
问题:

schedulers.computation和schedulers.io的实现有什么不同?

齐学文
2023-03-14

为什么它们被用于不同类型的任务?它们在处理计算任务和io任务时有什么不同?


schedulers.io()--用于I/O绑定的工作,如阻塞I/O的异步性能,该调度程序由线程池支持,线程池将根据需要增长;对于普通的计算工作,切换到Schedulers.Computation();默认情况下,schedulers.io()是一个CachedThreadScheduler,它类似于具有线程缓存的新线程调度器

共有1个答案

上官思博
2023-03-14

I/O和计算是非常不同的工作负载。

计算是纯粹的CPU绑定的,所以您希望限制线程的数量,这样它们就不会为了CPU而争斗而饿死自己。如果您有1000个线程都试图在8个核心上工作,您可能会有一个糟糕的时间。schedulers.computation()的上限是内核数。

I/O是不同的,因为虽然它们通常需要一个线程来维护上下文,但它们并不真正使用CPU-它们只是在I/O完成之前Hibernate。在一台单核机器上有1000个I/O操作是非常好的,因为它们大部分时间都处于Hibernate状态。schedulers.io()被取消了上限,并将根据需要生成尽可能多的线程

 类似资料:
  • 我在couchbase中使用可观测值。 调度程序之间的区别是什么。io()和调度程序。计算()?

  • 我已经阅读了很多关于rxjava调度器的答案,比如下面的用例,调度器io和调度器计算,rxjava2调度器io和具有大并发请求的调度器计算之间的区别是什么。 最常见的解释是使用Schedulers.computation()进行CPU密集型工作 并使用调度程序。io()用于与文件系统交互、与数据库或服务交互、REST API调用 通过CPU密集型工作,我假设/考虑图像调整大小/操作,大数据集等(如

  • 我正在使用Rxjava2和Spring Boot。 我在服务器上有500个并发请求。 每个请求产生10个线程,这些线程调用其他服务(因此IO工作)

  • 在的留档中,它说 实现必须与PartialOrd实现一致[…] 这当然是有道理的,并且可以很容易地归档,如下面的示例所示: 我想知道,为什么他们会把这个负担/风险留给我们用户,而不是用毯子 我在操场上测试了循环依赖和其他东西的问题,但这和我预期的一样有效。互联网也没有产生任何结果。 我能想到的另一个原因是宏现在是如何工作的。人们可能必须将每个替换为(或者将(PartialOrd)的宏变得更智能-我

  • 本文向大家介绍getComputedStyle和element.style有什么不同?相关面试题,主要包含被问及getComputedStyle和element.style有什么不同?时的应答技巧和注意事项,需要的朋友参考一下 element.style 只能获取内联样式属性 getComputedStyle() 可以获取所有样式属性

  • 本文向大家介绍frame和bounds有什么不同?相关面试题,主要包含被问及frame和bounds有什么不同?时的应答技巧和注意事项,需要的朋友参考一下 答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统) bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)