RxJava 和 Kotlin 数据中线程切换的成本 class copy() 操作
Cost of thread switching in RxJava and Kotlin data class copy() operation
我的问题是关于运营成本,特别是 Kotlin data class copy()
运营的成本和 RxJava observeOn()
线程切换。
我有一个系统可以在 Schedulers.mainThread
上生成事件。事件是 Kotlin data classes。接下来是业务逻辑,最后,链通过copy()
操作产生新的数据class。所有结果都必须在 Schedulers.mainThread
上使用。所以,一条链看起来像这样:
eventSource() //Events are produced on Schedulers.mainThread
.observeOn(Schedulers.computation)
.map { event ->
other business logic
event.copy(...)
}
.observeOn(Schedulers.mainThread)
.subscribe(eventConsumer)
因此,如果事件 class 有 15 个字段,那么问题是值得通过 observeOn
切换调度程序以执行 copy()
等操作。需要说明的是,Schedulers.mainThread
是用来渲染UI的线程,越空越好
copy
只是调用数据 class 构造函数,其中包含您尚未传递的参数的默认参数,即
event.copy(field3 = "")
与
相同
Event(event.field1, event.field2, "", event.field4, ...)
就其本身而言,不太可能值得切换调度程序,但当然 "other business logic" 很可能值得,如果你有
event.copy(field3 = complexCalculation())
您需要考虑 complexCalculation()
的费用。
我的问题是关于运营成本,特别是 Kotlin data class copy()
运营的成本和 RxJava observeOn()
线程切换。
我有一个系统可以在 Schedulers.mainThread
上生成事件。事件是 Kotlin data classes。接下来是业务逻辑,最后,链通过copy()
操作产生新的数据class。所有结果都必须在 Schedulers.mainThread
上使用。所以,一条链看起来像这样:
eventSource() //Events are produced on Schedulers.mainThread
.observeOn(Schedulers.computation)
.map { event ->
other business logic
event.copy(...)
}
.observeOn(Schedulers.mainThread)
.subscribe(eventConsumer)
因此,如果事件 class 有 15 个字段,那么问题是值得通过 observeOn
切换调度程序以执行 copy()
等操作。需要说明的是,Schedulers.mainThread
是用来渲染UI的线程,越空越好
copy
只是调用数据 class 构造函数,其中包含您尚未传递的参数的默认参数,即
event.copy(field3 = "")
与
相同Event(event.field1, event.field2, "", event.field4, ...)
就其本身而言,不太可能值得切换调度程序,但当然 "other business logic" 很可能值得,如果你有
event.copy(field3 = complexCalculation())
您需要考虑 complexCalculation()
的费用。