具有大型并发请求的Rxjava2 Schedulers.io()与Schedulers.computation()

Ank*_*sal 1 rx-java2

我在春季启动中使用Rxjava2。

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

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

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

基本上,我的困惑是理想上io()应该使用的,因为这是IO工作,但这会创建大量线程吗?

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

nho*_*ass 5

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

您想调用其他服务,因为它是I / O工作,所以您不应使用computation()。因为它是最好保留computation()CPU密集型工作只否则你不会得到良好的CPU使用率。

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

不,computation()由有界线程池支持,该线程池的大小等于可用处理器的数量。因此,如果您希望产生10个线程,则无法执行。

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

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

对于您的用例而言,这是不必要的,因为您一次只能执行10个任务。但这是一个好习惯,因为它io()是不受限制的,并且如果您需要并行调度数百个任务,那么每个任务将拥有自己的线程并导致上下文切换开销。

有关更多信息,请参见:rxJava Schedulers用例