用途:在本地机器上加速 parfor、parfeval 或 spmd 代码,做法是启动基于线程的并行池 parpool("Threads"),替代默认的基于进程的池。
主要能力:线程池是即插即用的替代方案,原有并行代码块无需改动。广播变量在线程上为零拷贝,可省去序列化与进程间通信开销;切片输入输出(如 X(:,:,i))仍会分配和复制,线程只跳过序列化/IPC 成本。
使用方式:先直接在线程池上运行代码,不要预先扫描代码找阻碍。仅当当前池不是线程池时才创建,避免无条件删除用户已打开的池。开发期辅助片段:pool = gcp("nocreate"); if isempty(pool) || ~isa(pool, "parallel.ThreadPool") delete(pool); parpool("Threads"); end。若报错,阅读诊断信息,MATLAB 会指出不支持的功能并建议改用 parpool("Processes")。若用户希望始终使用线程池,可建议通过 parallel.defaultProfile("Threads")(R2022b+)设为默认配置。
适用场景:用户要求提升本地 parfor、parfeval、spmd 性能;代码向迭代传入大数组或跨工作进程广播;用户提到启动慢、序列化或数据传输问题;用户询问“进程还是线程”或希望默认使用线程。
限制:线程池仅限本地,集群不适用;使用 parsim 或其他 Simulink 并行功能时需基于进程的池;使用 distributed 或 codistributed 数组时不适用;backgroundPool 用于异步执行而非并行加速,所有 MATLAB 用户在该池中有 1 个工作进程,拥有 Parallel Computing Toolbox 许可的用户有多个。不要凭记忆断言某函数不支持线程,应实际运行并阅读诊断;仅在确实无法运行时才查阅文档的 Thread-Based Environment 部分。