做算法加速的兄弟,肯定被 MATLAB 多线程 坑过。代码跑仿真,CPU 占用率才 15%,看着任务管理器里剩下的 7 个核在那儿围观,心里那个急啊。2026年了,别再死磕 parfor了,有些场景用 Timer(定时器) 和 MemMapFile(内存映射文件) 才是正解。今天聊聊怎么在没有传统线程的情况下,把 MATLAB 的性能榨干。
MATLAB 本身不支持 POSIX 标准的多线程(Thread),但它有 Timer 对象。这本质上是一种中断回调机制。
t = timer( ...
'BusyMode', 'queue', ... % 忙时排队,防止丢帧
'ExecutionMode', 'fixedSpacing', ... % 上一次结束后计时
'Period', 0.1, ... % 每0.1秒触发一次
'TimerFcn', @(src, evt) disp('Hello World'));
start(t);
这里的 BusyMode是关键。如果你设成 'drop',任务来不及处理就丢了;设成 'queue',任务会排队,哪怕慢一点也不会漏。这在做实时数据采集或刷新 UI 界面时特别管用。虽然这不是真正的并行,但能让你的主程序不被卡死,实现“看起来像多线程”的效果。真正的并行计算,往往要开多个 MATLAB 进程。比如一个进程负责跑仿真(Worker),一个进程负责实时显示结果(Viewer)。它们之间怎么传数据?用 MemMapFile。

这招的核心是把硬盘上的一个文件当成共享内存来用。
写入进程(Writer):
% 1. 创建数据文件
data = 1:100;
fid = fopen('shared_data.dat', 'w');
fwrite(fid, data, 'double');
fclose(fid);
% 2. 映射文件并修改
m = memmapfile('shared_data.dat', 'Format', 'double', 'Writable', true);
while 1
m.Data(1) = m.Data(1) + 1; % 修改第一个数
pause(0.1);
end
读取进程(Reader):m = memmapfile('shared_data.dat', 'Format', 'double', 'Writable', false);
while 1
disp(m.Data(1)); % 读取第一个数
pause(0.1);
end
这样,两个独立的 MATLAB 进程就能通过 shared_data.dat这个中介实时交换数据了。注意,不能两个进程同时写,不然文件锁会报错,只能一写一读。什么时候用 Timer,什么时候用 MemMapFile?
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。