java协程和线程_Kotlin中的线程和协程之间的区别

由于我仅在JVM上使用协程,因此我将讨论JVM后端,也有Kotlin本机和Kotlin JavaScript,但是这些Kotlin后端不在我的讨论范围之内。

因此,让我们开始将Kotlin协程与其他语言的协程进行比较。 基本上,您应该知道协程有两种类型:无堆栈和堆栈。 Kotlin实现了无堆栈的协程-这意味着协程没有自己的堆栈,这限制了协程的功能。 您可以在此处阅读良好的解释。

例子:

无堆栈:C#,Scala,Kotlin

大量:Quasar,Javaflow

协程就像轻量级线程一样意味着什么?

这意味着Kotlin中的协程没有自己的堆栈,它不映射在本机线程上,不需要在处理器上进行上下文切换。

有什么区别?

线程-抢先多任务。 (通常)。协程-协作多任务。

线程-由OS管理(通常)。协程-由用户管理。

Kotlin的协程实际上是并行/并发运行的吗?

这取决于您可以在自己的线程中运行每个协程,也可以在一个线程或某个固定线程池中运行所有协程。

有关协程如何在此处执行的更多信息。

即使在多核系统中,任何给定时间也只有一个协程运行(对吗?)

不,请参阅上一个答案。

在这里,我要启动100000个协程,这段代码后面会发生什么?

实际上,这取决于。 但是,假设您编写以下代码:

fun main(args: Array) {

for (i in 0..100000) {

async(CommonPool) {

delay(1000)

}

}

}

此代码立即执行。

因为我们需要等待Continuation调用的结果。

所以让我们解决这个问题:

fun main(args: Array) = runBlocking {

for (i in 0..100000) {

val job = async(CommonPool) {

delay(1)

println(i)

}

job.join()

}

}

运行此程序时,kotlin将创建2 * 100000个实例Continuation,这将占用几十Mb的RAM,在控制台中,您将看到1到100000之间的数字。

因此,让我们以这种方式重写此代码:

fun main(args: Array) = runBlocking {

val job = async(CommonPool) {

for (i in 0..100000) {

delay(1)

println(i)

}

}

job.join()

}

我们现在实现了什么? 现在,我们仅创建2700117825680458752的100001实例,这要好得多。

每个创建的Continuation将在CommonPool(ForkJoinPool的静态实例)上调度并执行。

Java线程Kotlin协程是在JVM上实现并发的两种不同方式。Java线程是JVM的虚拟线程,而Kotlin协程是作为库函数实现的。区别主要体现在以下几个方面: 1. 语法:Java线程使用与Java常规线程相同的语法,易于使用并与现有代码集成。而Kotlin协程使用与Kotlin的常规线程不同的语法,需要一些学习和适应。但是,协程提供了一些优势和简化,例如结构化并发、取消或错误处理。 2. 性能:虚拟线程协程通常都比常规线程更高效,并且可以更有效地利用资源。然而,实际的性能优势将取决于具体的用例和实施。一些基准测试表明,类似于虚拟线程的Go Goroutines比Kotlin协程具有更好的性能,但其他基准测试表明Kotlin协程的性能优于Java虚拟线程。因此,总体上很难说哪一个更快或更好。 3. 成熟度:虚拟线程仍然是Project Loom的一个实验性功能,尚未成为官方Java版本的一部分。因此,它们不稳定或不受工具或库的广泛支持。相比之下,自2018年发布1.3版本以来,协程Kotlin的一个稳定功能,更可靠,并且得到工具或库的良好支持。 综上所述,Java线程Kotlin协程在语法、性能和成熟度方面存在一些区别。选择使用哪种方式取决于具体的需求和优先考虑的因素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java 虚拟线程Kotlin 协程](https://blog.csdn.net/qq_52010446/article/details/131465664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值