Попытка простого приложения, в котором один использует сопрограммы для добавления variable i
, а другой использует Completable
из RxJava
.
Код сопрограммы:
val timeCoroutineStart = System.currentTimeMillis()
CoroutineScope(Dispatchers.IO).launch {
var i = 0
repeat(1000000000) {
i++
}
Log.d(
"TASK_TIME",
"COROUTINE: ${System.currentTimeMillis() - timeCoroutineStart}"
)
}.start()
Код Rx:
val timeRxStart = System.currentTimeMillis()
Completable.create{
var i = 0
repeat(1000000000) {
i++
}
it.onComplete()
}.subscribeOn(Schedulers.io()).subscribe {
Log.d(
"TASK_TIME",
"RX: ${System.currentTimeMillis() - timeRxStart}"
)
}
Результат:
D/TASK_TIME: RX: 1720
D/TASK_TIME: COROUTINE: 20873
Я довольно новичок в использовании сопрограмм и хотел попробовать что-то очень простое. Стоит отметить, что в меньших циклах сопрограммы составляют MUCH faster
. Я использую это неправильно? Или сопрограммы имеют недостаток в более длинных вычислениях, чем RX?
Редактировать
Запуск кода сопрограммы на JVM (не Android) очень похож на Rx, точно такой же код, работающий на Android, имеет другую производительность, чем запущенный на JVM