我使用的是Rxjava2和弹簧引导。
我在服务器上有500个并发请求。
每个请求产生10个线程,它们调用其他服务(所以IO工作)。
所以在这种情况下,我应该使用Schedulers.io()还是Schedulers.compuatation()。
基本上,我的困惑是,理想情况下,应该使用io(),因为这是IO工作,但这可能会创建大量线程?
我还可以指定计算线程的池大小吗?我还可以指定io线程的池大小吗?
发布于 2018-04-08 08:12:13
是使用Schedulers.io()还是使用Schedulers.compuatation()。
您希望调用其他服务,这是I/O工作,因此您的不应该使用computation()。因为最好将computation()留给CPU密集型工作,只有,否则您将无法获得良好的CPU利用率。
我可以指定计算线程的池大小吗?
不,computation()由一个大小等于(可用处理器数量)的有界线程池支持。因此,如果您想要生成10个线程,则不能由执行。
我可以指定io线程的池大小吗?
如果需要限制同步网络调用的最大数量,请使用:Scheduler.from(Executors.newFixedThreadPool(10))
这对用例来说是不必要的,因为您一次只执行10项任务。但是这是一个很好的实践,因为io()是无限的,如果您需要并行安排数百个任务,那么每个任务都会有自己的线程,并导致上下文切换开销。
有关更多信息,请参见:rxJava Schedulers Use Cases 。
https://stackoverflow.com/questions/49680339
复制相似问题