Page 1 of 1

它们运行代码的速度并不比平台线程快

Posted: Wed Jan 15, 2025 7:06 am
by suchona.kani.z
虚拟线程不是更快的线程。它们旨在提供可扩展性(更高的吞吐量),而不是速度(更低的延迟)。

JVM 管理操作系统线程池,并分配一个线程作为“载体线程”来执行虚拟线程的任务。当任务涉及阻塞操作时,可以暂停虚拟线程而不影响承载线程,从而允许其他虚拟线程并发运行。

使用传统方法可以实现虚拟线程之间的同步,并由 JVM 确保适当的协调。任务完成后,虚拟线程可以重新用于将来的任务。

当虚拟线程暂停时,JVM可以将其执行切换到另一个虚拟线程或载体线程以提高效率。

摘要 – 这些是虚拟线程
总之,Java 的虚拟线程提供了轻量级且高效的并发性,由 JVM 通过 阿尔及利亚 whatsapp 数据​ 分配操作系统线程和优化资源来管理。使用虚拟线程时需要记住一些最佳实践:

为每个任务启动一个新的虚拟线程。
虚拟线程不应该被池化。
大多数虚拟线程都有浅调用堆栈,因此寿命很短。
如何在标准 Java 中使用虚拟线程?
使用虚拟线程时,必须考虑以下几点:

虚拟线程无法访问其支持,并且 Thread.currentThread() 返回虚拟线程本身。
堆栈跟踪是独立的,并且虚拟线程中引发的每个异常仅包含其自己的堆栈帧。
虚拟线程的线程局部变量对其宿主不可用,反之亦然。
从代码的角度来看,载体及其虚拟线程之间共享平台线程是不可见的。
Thread 和 Thread.Builder API 提供了创建平台线程和虚拟线程的方法。

如何在 Quarkus 中使用虚拟线程?
自 2022 年 6 月发布 2.10 版本以来,Quarkus 已经支持 Jakarta EE 11 中定义的 @RunOnVirtualThread 注释。

在 Quarkus 中使用虚拟线程非常简单。为此,只需使用 @RunOnVirtualThread 注释即可。这告诉 Quarkus 在虚拟线程而不是常规平台线程上运行带注释的方法。