我正在使用Rxjava2和spring boot。
我在服务器上有500个并发请求。
每个请求产生10个调用其他服务的线程(因此IO工作)
因此,在这种情况下,我应该使用Schedulers.io()
还是Schedulers.compuatation()
。
基本上我的混淆是理想的io()
应该被使用,因为这是IO工作,
但是这会产生大量的线程吗?
我还可以指定计算线程的池大小吗? 我也可以指定io线程的池大小吗?
答案 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 。