介绍
在本文中,我们将比较在JVM中实现并发的两种不同方法:Java虚拟线程和Kotlin Coroutines。我们将看到每种方法的主要区别,优势和缺点。
什么是虚拟线程和共核?
虚拟线程和coroutines都是实现并发的技术,而无需创建太多的系统线程。系统线程的创建和维护价格昂贵,如果有太多的情况,它们可能会导致性能问题。虚拟线程和Coroutines允许我们创建许多可以在较小数量的系统线程上同时运行的轻巧任务,从而减少了上下文开关和内存使用的开销。
虚拟线程是Project Loom的功能,该功能是一个实验项目,可在Java中添加新的并发功能。虚拟线程也称为纤维或连续性。它们类似于常规线程,但由JVM而不是操作系统管理。 JVM可以在单个系统线程上安排许多虚拟线程,并根据需要在它们之间进行切换。虚拟线程也可以暂停并恢复执行,而无需阻止系统线程,这允许进行非块IO操作。
Coroutines是Kotlin的功能,Kotlin是一种在JVM上运行的现代编程语言。 Coroutines也类似于线程,但它们是作为库功能而不是语言功能实现的。可以使用悬挂,启动或异步等特殊关键字来创建Coroutines,它们也可以暂停和恢复执行而不会阻止系统线程。 Coroutines可以使用不同的调度程序来控制它们在系统线程上的计划,并且它们也可以使用渠道或共享变量相互通信。
他们如何比较?
虚拟线程和Coroutines具有一些相似之处和一些差异。让我看看其中的一些:
- 性能:虚拟线程和坐标通常更有效,并且可以比常规线程更有效地利用资源。但是,实际的性能好处将取决于特定的用例和实施。一些基准测试表明,与虚拟线程相似的Go Goroutines的性能比Kotlin Coroutines1更好。但是,其他基准测试表明,Kotlin Coroutines的性能比Java虚拟线程更好。因此,很难说哪一个通常更快或更好。
- 语法:虚拟线程使用与Java中常规线程相同的语法,这意味着它们易于使用并与现有代码集成。但是,这也意味着它们继承了常规线程的某些局限性和复杂性,例如同步,锁定或异常处理。 Coroutines使用的语法与Kotlin中的常规线程不同,这意味着它们需要一些学习和适应。但是,这也意味着它们比常规线程(例如结构化并发,取消或错误处理)提供了一些优点和简化。
- 成熟度:虚拟线程仍然是Project Loom的实验特征,该功能尚不是官方Java版本的一部分。因此,它们不受工具或库的稳定或广泛支持。他们也可能会在将来改变或发展。自2018年发行的1.3版以来,Coroutines是Kotlin的稳定功能。因此,它们更可靠并且由工具或库支持。随着时间的流逝,它们也经过了测试和改进。
结论
总而言之,虚拟线程和珊瑚酸是在JVM中实现并发的有趣和有前途的方法。它们都提供了比常规线程更好的性能和资源利用率,但也有一些权衡和挑战。根据情况和偏爱,一个人可以选择一个或另一个作为同时的编程需求。
https://itnext.io/kotlin-coroutines-vs-java-virtual-threads-a-good-story-but-just-that-91038c7d21eb