gpt4 book ai didi

java - JVM 线程是否始终保持它们到 OS 线程的映射

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:59:49 25 4
gpt4 key购买 nike

我正在编写一项服务,该服务使用 JNA 将工作从 Java 委托(delegate)给 native C++ 库。 C++ 库对计算量大的任务进行异步调用,然后在该任务完成时获得回调(在不同的操作系统线程上)。我想将这项工作的结果路由回 JVM 中的正确线程。

我想知道的是,我能否保证 JVM 线程 ID 始终与 native thread_id 具有一对一的映射? IE。如果我通过

在 C++ 中记录线程 ID
std::this_thread::get_id()

然后开始一些昂贵的工作并在 cv 上阻塞,工作完成后线程仍将存在,并且我将能够正确地将结果返回到 JVM。任何幕后的 JVM 工作(如 JIT、GC 或停止世界收集)是否会引起对该模式的担忧?

最佳答案

JLS、JVM 规范或 Javadocs 中未指定答案。

的确,它可能是特定于平台的。例如,在 Solaris 的 JVM 中,可以(或曾经)进行用户空间线程到内核空间线程的 N:M 映射;见this document .目前尚不清楚这对 native 线程 ID 意味着什么。

那么对于您正在使用的 JVM,线程的 native thread_id 是否会保持不变?

只有一种方法可以确定:下载 JVM 源代码并检查。

警告:它太复杂了!

(您可能应该将其视为您不应该做这种事情的暗示……如果您不得不求助于 StackOverflow 询问它是否有效!)

关于java - JVM 线程是否始终保持它们到 OS 线程的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com