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

Rxjava2 schedulers.io()vs具有大并发请求的schedulers.computation()

拓拔坚
2023-03-14

我正在使用Rxjava2和Spring Boot。

我在服务器上有500个并发请求

每个请求产生10个线程,这些线程调用其他服务(因此IO工作)

共有1个答案

桂德义
2023-03-14

我应该使用schedulers.io()还是schedulers.compuatation()。

您想要调用其他服务,这是I/O工作,所以不应该使用computation()。因为最好只将computation()保留用于CPU密集型工作,否则将无法获得良好的CPU利用率。

我可以指定计算线程的池大小吗?

如果需要限制同时网络调用的最大数量,请使用:Scheduler.From(executors.NewFixedThreadPool(10))

对于您的用例来说,这是不必要的,因为您在同一时间只做10个任务。但这是一个很好的实践,因为io()是无界的,如果您需要并行调度数百个任务,那么每个任务都将有自己的线程,从而导致上下文切换开销。

有关更多信息,请参见:rxJava调度程序用例。

 类似资料:
  • 我的Java应用程序使用各种代理服务器从特定域收集数据。特别申请需要下列程序: 通过特定代理加载URL 等待5秒 通过同一个代理加载下一个url 为了使信息的加载(由于5秒的暂停)不需要永远,我总共使用400个线程。每个线程都使用自己的代理服务器,也就是使用自己的OKHTTP客户端: 每个线程必须使用自己的代理,因此每个线程都有自己的OKHTTP客户端。总共有400个OKHTTP客户端。 我做了一

  • 问题内容: 我目前正在尝试使用Go进行一些实验。这是我正在尝试做的事情: 我有一个REST API服务正在运行,我想在尽可能多的Goroutine中反复查询特定的URL,以查看这些响应的性能如何(通过查看我的REST API服务器日志)。在退出程序之前,我想发送总计100万个HTTP请求-在计算机允许的范围内同时执行。 我知道有一些工具可以做到这一点,但是我主要对如何使用goroutines在Go

  • 我在多个线程上运行以下方法: HTTP请求是并行处理的吗?以这种方式发出请求是否会阻止其他线程发送请求,直到第一个响应到达?

  • 一种写法同时支持 Curl 和 Swoole use \Yurun\Util\YurunHttp\Co\Batch; use \Yurun\Util\HttpRequest; $result = Batch::run([ (new HttpRequest)->url('https://www.imiphp.com'), (new HttpRequest)->url('https:

  • 问题内容: 我知道node.js是单线程,异步,无阻塞的I / O。我已经读了很多。例如,PHP每个请求使用一个线程,但是节点仅对所有线程使用一个线程。 假设有三个请求a,b,c同时到达node.js服务器。这些请求中的三个需要大型阻止操作,例如,它们都希望读取相同的大文件。 然后,如何将请求排队,将按什么顺序执行阻塞操作,以及按什么顺序分派响应?当然使用多少个线程? 请告诉我三个请求从请求到响应

  • 并发请求处理 我创建了一个服务器,并使用s.listenandserve()来处理请求。据我所知,这些请求是同时送达的。我使用一个简单的处理程序来检查它: 我看到,如果我发送了几个请求,我将看到所有的“1”出现,只有在一秒钟后所有的“2”出现。但是如果删除Hibernate行,我会看到程序在完成前一个请求之前从不启动请求(输出为1 2 1 2 1 2...)。所以我不明白,如果它们是并发的还是不是