我正在开发一个应用程序,其中有两个程序同时运行:一个在 C++ 中,另一个在 MATLAB 中。
C++ 程序定期生成三个数值作为输出。 MATLAB 程序需要定期但在不同的时间段访问三个输出。
目前,我已经使用解决了这个问题.txt
文件。当例程完成时,C++ 写入此文件,而 MATLAB 在需要时从该文件中读取。
然而,使用textscan
命令,MATLAB 需要大约 1.5 ms 来读取.txt
使用奔腾 I5-4250U。所以我想知道是否有更快的方法来解决这个问题。
答:是的,使用消息传递层
如果不需要其他服务,C++端将充当信息提供者(ZMQ.PUB
发布者 ) 而 MATLAB 端将充当信息订阅者 (ZMQ.SUB
).
通过这种方式,与消息传递相关的低级细节由分布式处理消息传递层解决,您的解决方案将受益于速度、现成的工具,并且可以使用分布式到私有网格计算/云计算架构上相同的仪器,获得额外的性能等。
ZeroMQ 具有 C++ 和 MATLAB 的绑定,因此这是一个开始和尝试进程到进程消息传递层方法的地方。
% MATLAB script to setup zeromq-matlab
clear all;
if ~ispc
s1 = zmq( 'subscribe', 'ipc', 'MATLAB' ); %% using IPC transport on <localhost>
else
disp('0MQ IPC not supported on windows. Setup TCP transport class instead')
disp('Setting up TCP')
s1 = zmq( 'subscribe', 'tcp', 'localhost', 5555 );
end
recv_data1 = []; %% setup RECV buffer
可以找到 MATLAB 绑定here.
有一些浮点数要发送,延迟将在数百甚至数十[usec]以下,正如您的通知提到的数据调度的异步模式,因此本地主机将仅花费一些时钟从本地主机 ZMQ.SUB 检索数据队列。
更复杂的应用程序到应用程序信号传输是可能的,只需受到以下启发ZeroMQ 指南
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)