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

时间:2018-04-05 19:44:32

标签: rx-java2

我正在使用Rxjava2和spring boot。

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

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

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

基本上我的混淆是理想的io()应该被使用,因为这是IO工作, 但是这会产生大量的线程吗?

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

1 个答案:

答案 0 :(得分:5)

  

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

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

  

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

不,computation()由有限的线程池支持,其大小等于可用处理器的数量。因此,如果您想生成10个主题,不能执行此操作。

  

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

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

这对您的用例来说是不必要的,因为您只能同时执行10个任务。但这是一个很好的做法,因为io()是无限制的,如果你需要并行安排数百个任务,那么每个任务都有自己的线程并导致上下文切换开销。

有关详细信息,请参阅:rxJava Schedulers Use Cases