Ben RxJava son derece hesaplama, paralel hale görevler için, geleneksel ExecutorService
bir Scheduler
daha hızlı olacağını bir his vardı. RxJava - Zamanlayıcılar vs ExecutorService?
Observable<MyItem> source = ...
source.flatMap(myItem -> myItem.process().subscribeOn(Schedulers.computation()))
.subscribe();
Ben iş yerinde yapmak tipik bir paralel işlem ile bu iki yaklaşımı karşılaştırıldığında bu
final ExecutorService svc = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
Observable<MyItem> source = ...
source.flatMap(myItem -> myItem.process().subscribeOn(Schedulers.from(svc)))
.finallyDo(svc::shutdown)
.subscribe();
daha yavaş aday olacağını bir teori vardı ve ben şu var Sonuçlar.
EXECUTOR
START: 2016-01-25T09:47:04.350
END: 2016-01-25T09:48:37.181
TOTAL TIME (SEC): 92
COMPUTATION SCHEDULER
START: 2016-01-25T09:50:37.799
END: 2016-01-25T09:54:23.674
TOTAL TIME (SEC): 225
Yani benim kaba test geleneksel ExecutorService
hesaplaması için bir Scheduler
çok daha hızlıdır göstermiştir.
Bu sonuçlar için bir sebep var mı? RxJava zamanlayıcıları sadece paralelleştirme için optimize edilmiyor mu? Hesaplama planlayıcılarının Executors'dan daha az ileti kullandığı izlenimini aldım.
Her iki durumda da öğeleri paralel olarak işliyor. Paralel yürütmeyi istiyorsanız, [RxJavaParallel] deney kütüphanesine göz atmalısınız (https://github.com/ReactiveX/RxJavaParallel). –
Yine de, ExecutorService'nin neden Schedulers.computation() 'dan daha hızlı olduğu konusunda hala güzel bir soru. Buna cevap vermeye yetkili değilim. –
Bence bu proje bir sene boyunca uzmandır, çünkü RxJava devleri şu andaki zamanlarına öncelik veremezler. – tmn