multithreading - 在 Kotlin 中使用线程还是协程更好?

标签 multithreading kotlin kotlin-coroutines

我正在从应用程序发送邮件。由于邮件发送需要时间并阻塞主线程,因此我正在创建一个新线程并将邮件发送任务移交给新线程。对于发送邮件的大量并发请求,我必须创建大量线程。但创建线程似乎很慢。

我的问题是,如果我使用 Kotlin 的协程,它是否能提供比线程更好的性能?

某种解释或提示非常值得赞赏。

最佳答案

TL;DR - 在 Kotlin 中工作时始终使用协程

线程具有相对较大的内存占用 - 每个线程大约有 1MB 的 VM 内存。如果为每个任务创建一个线程,则可能会面临内存不足的风险。相比之下,协程相对较小,仅占用几 KB 的虚拟机内存。

新线程的创建相对较慢,因为它要经过操作系统。操作系统对协程一无所知,因此生成一个新的协程相对较快。

出于同样的原因,线程之间的上下文切换比挂起的协程之间的上下文切换要昂贵得多。

此外,协程不太容易发生泄漏,这要归功于 structured concurrency

关于multithreading - 在 Kotlin 中使用线程还是协程更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58254985/

相关文章:

Java 线程停止通知程序

android - 使用 mpandroidchart 和 kotlin 显示条形图

使用emitAll进行Android流程单元测试

java - 为什么 JVM 不将 "incrementing a int variable"编译为原子获取和递增操作?

java - 一次将一个 View 添加到后台线程中的线性布局,而不是在所有操作完成后

Python - 如何检查系统负载?

kotlin - 在Kotlin中具有等效功能的Visual Basic

android - 如何在 Kotlin 中传递方法接受参数?

kotlin - 协程范围构建器流程如何工作

kotlin 协程 : possible without standard library?