Some tips about the life cycle of Maya thread pool
As you know, Maya provides class MThreadPool to help develop to create or reuse a thread pool, if you want to know more about this, you can reference the online SDK at http://help.autodesk.com/view/MAYAUL/2015/ENU/?guid=__files_GUID_2BEF58D3_6162_4235_A6CE_3D8B0742A0AE_htm and http://help.autodesk.com/view/MAYAUL/2015/ENU/?guid=__cpp_ref_class_m_thread_pool_html.
If you want to know how to use MThreadPool, besides the above link, you can reference our 2 samples, threadTestCmd and threadTestWithLocksCmd. But here, I just want to talk about the life cycle of the thread pool.
If you check with the above 2 samples, you will see MThreadPool actually be released twice by MThreadPool::release() as follow, why? And what is the purpose of doing each one? I am also interested in this, so I just spend some time to dig into the source code.
- // pool is reference counted. Release reference to current thread instance
- MThreadPool::release();
- // release reference to whole pool which deletes all threads
- MThreadPool::release();
When I dig into the code, I find that whenever the thread pool is created, it actually sets the count reference to 1, instead of 0, so when we call MThreadPool::init(), the cound reference will be increased to 2. So if you release it once, it just decrease the reference count to 1, which will not kill the thread pool, you have to always release it one more time to make it be destroyed. What the benifit for this behavior? Actually, from the online SDK, it says "Since creation and deletion of threads is expensive, it is a good idea to make use of the thread pool where possible, and try to keep it around between invocations of the plug-in rather than recreate it each call.", so everything is clear now, Maya will keep the thread pool alive during the life cycle to save the performance, and it always survives unless you manually decrease the reference count to 0.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期