如何为flatMap选择最佳的最大并发值

时间:2018-10-29 13:19:14

标签: android concurrency rx-java2 flatmap

应用程序应从网络下载大量图像。 我想尽可能高效地在parallel中下载此图像。 为了实现并行下载所使用的flatMap,并提供maxConcurent值。

    Disposable ds =
    dataManager.getAllImages()
        .flatMap(image -> Observable.zip(
        dataManager.processImageCaching(image.getFullSizeImage()),
            dataManager.processImageCaching(image.getThumbImage()),
            (Optional<CachedImage> fullSizeImage, Optional<CachedImage> thumbImage) -> {
                image.setFullSizeImageLocalPath(fullSizeImage.map(CachedImage::getFilePathInternal).orElse(null));
                image.setThumbImageLocalPath(thumbImage.map(CachedImage::getFilePathInternal).orElse(null));
                return image;
            })
            .subscribeOn(Schedulers.io()), MAX_CONCURRENT_THREADS)
        .doOnNext(dataManager::saveCachedImageToDb)
        .subscribeOn(Schedulers.io())

该应用程序可以并行工作和下载,但是max concurrent的使用值可能不是最佳值,并且不能通用。 我猜这个值对于不同的设备可能会有所不同。 有人可以给我一个想法,如何根据设备功能选择最佳的最大并发值? 谢谢。 注意:当前最大并发值为3

1 个答案:

答案 0 :(得分:1)

/**
 * @param subscribeOn if not set, then creates new Thread (if there is room for new Thread)
 * @param observeOn if not set, then uses MainThread
 */
data class SchedulerProvider(val subscribeOn: Scheduler
                             = Schedulers.from(Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()))
                             , val observeOn: Scheduler = AndroidSchedulers.mainThread())

我使用类似的东西,它显然基于可用的处理器。我不确定是否有更好的方法