Android - сопрограммы медленнее, чем RX. Выполняется при расчете в длинном цикле for. - PullRequest
1 голос
/ 15 января 2020

Попытка простого приложения, в котором один использует сопрограммы для добавления 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...