Rxjava2Schedulers.io()与具有大并发请求的Schedulers.count()的比较 [英] Rxjava2 Schedulers.io() vs Schedulers.computation() with large concurrent request

查看:10
本文介绍了Rxjava2Schedulers.io()与具有大并发请求的Schedulers.count()的比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是带有Spring Boot的Rxjava2。

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

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

因此,在这种情况下,我应该使用Schedulers.io()还是Schedulers.compuatation()

基本上我的困惑应该被使用,因为这是IO工作, 但这可能会创建大量线程?

还可以指定计算线程的池大小吗? 另外,我是否可以指定io线程的池大小?

推荐答案

我应该使用Schedulers.io()还是Schedulers.Compuatation()。

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

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

否,computation()由一个大小等于可用处理器数的有界线程池支持。因此,如果要派生10个线程,无法这样做。

我是否可以指定io线程的池大小

如果需要限制同时进行的网络调用的最大数量,请使用:Scheduler.from(Executors.newFixedThreadPool(10))

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

有关详细信息,请参阅:href="https://stackoverflow.com/a/31282775/5282585">rxJava调度程序用例 。

这篇关于Rxjava2Schedulers.io()与具有大并发请求的Schedulers.count()的比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆