JPDA 架构研究6 - Agent利用环境指针访问VM (线程管理篇)

简介:

引入:

上篇文章讲解了分类:内存管理,现在讲线程类操作的接口。


分类2:线程类操作

a.GetThreadState.获取线程状态

jvmtiError
GetThreadState(jvmtiEnv* env,
            jthread thread,
            jint* thread_state_ptr)

大家都知道线程有很多种状态,比如Alive,Terminated,Runnable, 等待进入Synchronize Block,Waiting,Sleeping,Parked,Suspended,Interrupted等。

它入参thread表示要查询的线程,返回thread_state_ptr表示线程状态。


b.GetAllThreads.获取所有活着的线程,这些线程必须是连接到当前VM并且Alive的。

jvmtiError
GetAllThreads(jvmtiEnv* env,
            jint* threads_count_ptr,
            jthread** threads_ptr)

它返回threads_count_ptr表示活着的线程数量,返回threads_ptr表示活着的线程的引用数组。


c.SuspendThread.挂起某线程

jvmtiError
SuspendThread(jvmtiEnv* env,
            jthread thread)

一旦挂起某线程,则对应方法无法返回直到另外有某个线程调用ResumeThread.

它入参thread表示要挂起的线程。


d.SuspendThreadList.挂起一组线程

jvmtiError
SuspendThreadList(jvmtiEnv* env,
            jint request_count,
            const jthread* request_list,
            jvmtiError* results)

一旦在ThreadList中某线程被挂起,则只有其他某线程调用ResumeThreadList或者ResumeThread后,此线程对应方法才可以返回。

入参request_count表示要挂起的线程数量,request_list,表示要挂起的线程数组,返回results表示挂起结果。


e.ResumeThread.恢复某个被挂起的线程

jvmtiError
ResumeThread(jvmtiEnv* env,
            jthread thread)


f.ResumeThreadList.恢复某个被挂起的线程组

jvmtiError
ResumeThreadList(jvmtiEnv* env,
            jint request_count,
            const jthread* request_list,
            jvmtiError* results)


g.StopThread.杀死某线程

jvmtiError
StopThread(jvmtiEnv* env,
            jthread thread,
            jobject exception)


h.InterruptThread.中断某线程

vmtiError
InterruptThread(jvmtiEnv* env,
            jthread thread)


i.GetThreadInfo.获取某线程信息

typedef struct {
    char* name;
    jint。 priority;
    jboolean is_daemon;
    jthreadGroup thread_group;
    jobject context_class_loader;
} jvmtiThreadInfo;
jvmtiError
GetThreadInfo(jvmtiEnv* env,
            jthread thread,
            jvmtiThreadInfo* info_ptr)

从这里可以看出,这里可以获取线程的名字,优先级,是否守护线程,所属线程组,上下文加载器等信息。


j.GetOwnerMonitorInfo.获取线程拥有的监视器(可以多个)信息

jvmtiError
GetOwnedMonitorInfo(jvmtiEnv* env,
            jthread thread,
            jint* owned_monitor_count_ptr,
            jobject** owned_monitors_ptr)

我在这里对Monitor的理解是线程持有的锁,也就是synchronized所关联的对象。

入参仍是给定线程,返回监视器的数量和监视器引用的数组。


k.GetCurrentContendedMonitor.获取线程当前的监视器。

jvmtiError
GetCurrentContendedMonitor(jvmtiEnv* env,
            jthread thread,
            jobject* monitor_ptr)

和上面配套使用。因为多个竞争者同时共享某线程,那么肯定有某个当前竞争者占用了此线程的执行。


l.SetThreadLocalStorage.VM设置一个thread-local的值来关联到某 环境-线程对。

jvmtiError
SetThreadLocalStorage(jvmtiEnv* env,
            jthread thread,
            const void* data)


m.GetThreadLocalStorage.Agent来获取为某线程设置的thread-local值。

jvmtiError
GetThreadLocalStorage(jvmtiEnv* env,
            jthread thread,
            void** data_ptr)




本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1587694,如需转载请自行联系原作者
目录
相关文章
|
15天前
|
存储 人工智能 前端开发
Google揭秘Agent架构三大核心:工具、模型与编排层实战指南
本文为Google发布的Agent白皮书全文翻译。本文揭示了智能体如何突破传统AI边界,通过模型、工具与编排层的三位一体架构,实现自主推理与现实交互。它不仅详解了ReAct、思维树等认知框架的运作逻辑,更通过航班预订、旅行规划等案例,展示了智能体如何调用Extensions、Functions和Data Stores,将抽象指令转化为真实世界操作。文中提出的“智能体链式组合”概念,预示了未来多智能体协作解决复杂问题的革命性潜力——这不仅是技术升级,更是AI赋能产业的范式颠覆。
487 1
|
15天前
|
运维 监控 数据可视化
一文详解:工业软件“低代码开发平台”技术架构研究与分析
本文围绕工业软件低代码开发平台的机遇与挑战,提出基于自动化引擎的技术架构,由工具链、引擎库、模型库、组件库、工业数据网关和应用门户组成。文章分析了其在快速开发、传统系统升级中的应用模式及价值,如缩短创新周期、降低试错成本、解决资源缺乏和提升创新可复制性,为我国工业软件产业发展提供参考和支持。
|
2月前
|
机器学习/深度学习 传感器 自然语言处理
基于Transformer架构的时间序列数据去噪技术研究
本文介绍了一种基于Transformer架构的时间序列去噪模型。通过生成合成数据训练,模型在不同噪声条件下展现出强去噪能力。文章详细解析了Transformer的输入嵌入、位置编码、自注意力机制及前馈网络等关键组件,并分析实验结果与注意力权重分布。研究为特定任务的模型优化和专业去噪模型开发奠定了基础。
191 14
基于Transformer架构的时间序列数据去噪技术研究
|
5月前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
1216 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
2月前
|
人工智能 自然语言处理 安全
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
CodeAct是一种先进的AI辅助系统范式,深度融合自然语言处理与代码执行能力。通过自定义代码执行代理,开发者可精准控制代码生成、执行及管理流程。本文基于LlamaIndex框架构建CodeAct Agent,解析其技术架构,包括代码执行环境、工作流定义系统、提示工程机制和状态管理系统。同时探讨安全性考量及应用场景,如软件开发、数据科学和教育领域。未来发展方向涵盖更精细的代码生成、多语言支持及更强的安全隔离机制,推动AI辅助编程边界拓展。
103 3
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
|
2月前
|
存储 人工智能 自然语言处理
Cursor这类编程Agent软件的模型架构与工作流程
编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。这些模型通过海量文本和代码数据的训练,掌握了广泛的编程知识和语言理解能力。
152 1
|
3月前
|
Java 调度
Java线程池的实现架构
线程池是一种用于管理多线程的池化技术,通过复用线程减少创建和销毁线程的开销。Java中的线程池架构包括`Executor`、`ExecutorService`、`ScheduledExecutorService`等接口,以及`ThreadPoolExecutor`和`ScheduledThreadPoolExecutor`两个核心实现类。`Executors`工厂类提供了便捷的线程池创建方法。线程池不仅简化了多线程编程,还能避免线程过多导致的资源消耗和切换开销。本文从使用示例入手,剖析了线程池的实现原理及其内部架构,重点分析调度线程池的实现机制。
|
3月前
|
Java 调度
Java线程池实现架构
Java线程池实现架构
|
7月前
|
存储 人工智能 自然语言处理
AI经营|多Agent择优生成商品标题
商品标题中关键词的好坏是商品能否被主搜检索到的关键因素,使用大模型自动优化标题成为【AI经营】中的核心能力之一,本文讲述大模型如何帮助商家优化商品素材,提升商品竞争力。
816 62
AI经营|多Agent择优生成商品标题
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
Gemini 2.0:谷歌推出的原生多模态输入输出 + Agent 为核心的 AI 模型
谷歌最新推出的Gemini 2.0是一款原生多模态输入输出的AI模型,以Agent技术为核心,支持多种数据类型的输入与输出,具备强大的性能和多语言音频输出能力。本文将详细介绍Gemini 2.0的主要功能、技术原理及其在多个领域的应用场景。
790 20
Gemini 2.0:谷歌推出的原生多模态输入输出 + Agent 为核心的 AI 模型