【发布时间】:2020-12-12 08:27:05
【问题描述】:
我有一个ExecutorService 代码 sn-p,我正在尝试将其转换为协程以测试性能。然而,无论我如何构建协程代码,ExecutorService 都快得多。我认为协程应该可以提高性能
功能:
- 在后台线程中运行
- 执行 200000 次操作(计数器++)
- 传递给 UI 线程的发布时间
- 代码在 ViewModel 中运行,更新时间文本视图
- 执行器服务代码在模拟器上大约需要 150 毫秒
- 我编写的任何协程代码都需要更长的时间
与以下代码等效的协程是什么:
fun runCodeExecutorService() {
spinner.value = true
val executorService = Executors.newFixedThreadPool(NUMBER_OF_CORES * 2)
val result = AtomicInteger()
val startTime = System.currentTimeMillis()
val handler: Handler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(inputMessage: Message) {
time.value = toTime(System.currentTimeMillis() - startTime)
spinner.value = false
Log.d("tag", "counter Executor = " + result.get())
}
}
thread(start = true) {
for (i in 1..NUMBER_OF_THREADS) {
executorService.execute {
result.getAndIncrement()
}
}
executorService.shutdown();
executorService.awaitTermination(2, TimeUnit.MINUTES)
val msg: Message = handler.obtainMessage()
val bundle = Bundle()
bundle.putInt("MSG_KEY", result.get())
msg.data = bundle
handler.sendMessage(msg)
}
}
其中 NUMBER_OF_CORES 是 val NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors()
NUMBER_OF_THREADS 为 200000
【问题讨论】:
标签: android kotlin kotlin-coroutines coroutine