MATLAB Compiler SDK 单进程阻塞问题及解决

单个应用程序只能访问单个MCR计算引擎。这由进程范围的锁保护,因此多个组件无法同时访问计算引擎 (MATLAB运行时被设计为单线程执行,在任何给定时间,只有一个MATLAB函数可以有CPU时间)

也就是说 ,在java中通过多线程或者多个用户进行操作 来调用matlab jar的方法时,如果第一个请求正在执行matlab jar方法,其他的请求进行无法执行会被阻塞住 ,直到当前请求执行完,才会执行后续的matlab jar调用(这类似于在MATLAB的同一个打开会话中逐个调用所有MATLAB文件)。

解决单个计算引擎局限性的唯一方法是创建第二个进程(例如,通过运行可执行文件的第二个实例)。

解决无法并发执行的方法:

1.启动 Java 应用程序的多个进程来调用 Matlab。来自单个进程的调用使用相同的 MCR,该 MCR 具有进程范围的锁;但是来自不同进程的调用将在不同的 MCR 计算引擎上运行。

如果需要并发执行多个MATLAB函数调用,则需要使用"进程外 (out-of-process) "选项,通过该选项可以创建多个MATLAB运行时实例,每个实例都托管在自己的子进程中。

在这种情况下,建议不要频繁创建和销毁MATLAB运行时实例。相反,缓存多个与调用MATLAB函数的并行线程数量匹配的MATLAB运行时实例。这是因为创建和停止许多MATLAB运行时实例会产生性能成本,因为MATLAB运行时不是轻量级的,启动和停止需要时间。

Java开启进程外选项demo(多进程执行matlab 函数)案例:

首先在application.java启动类中设置为OUTPROC

if(!MWApplication.isMCRInitialized()) {//注意:如果./matlab启动着MATLAB完全版,则 isMCRInitialized 为true,导致不会执行if语句设置为不同进程故需关闭matlab完全版。

MWApplication.initialize(MWMCROption.OUTPROC );//这代表指示 MATLAB Runtime 在与 Java 应用程序不同的进程中运行 的选项。这样多进程就不会阻塞了,可以同时运行。

}

//这样new运行时,会在新子进程ctfserver中执行函数,从而避免阻塞

myclass cls = new myclass();

cls.hello();

finally{ if(cls!=null) cls.dispose() } //不要忘记dispose,否则ctfserver进程不会销毁。

注意:

MWApplication.initialize(MWMCROption.OUTPROC )此选项是全局的,设置之后对所有matlab任务都生效。在设置OUTPROC之前如果执行了matlab任务则使用默认选项initialize,全局生效, OUTPROC 就不会在设置了。

另外设置OUTPROC后,执行所有matlab任务都会开一个新进程执行(ctfserver进程)。执行完毕后, 需要dispose掉函数,此函数使用的ctfserver进程才会销毁 ,否则只有jvm销毁后才会销毁所有ctfserver进程,会导致占满内存。

****windows查看ctfserver

linux查看ctfserver: ps -aux|grep ctfserver

2.使用Matlab Production Server,它基本上可以方便地使用多个 MCR。这是一个需要单独许可证和安装的工具包。收费!没有尝试

3.除非您有非常具体的性能顾虑,否则不必局限于运行 MCR/编译代码。您实际上可以在服务器上安装 Matlab 本身,从同一个 Java 进程启动多个实例(例如无头实例),并通过MatlabControl或新的官方Java 版 MATLAB Engine API与它们进行通信。

相关推荐
feifeigo12316 小时前
基于遗传算法的矩形排样MATLAB实现
开发语言·matlab
Evand J18 小时前
【代码介绍】二维平面上的雷达跟踪与UKF(无迹卡尔曼滤波),高精度估计目标轨迹,输出真值、估计值、误差特性等
matlab·平面·雷达·滤波·定位·导航·跟踪
fengfuyao98518 小时前
基于遗传算法的分布式电源选址定容优化(考虑环境因素)
算法·matlab·平面
可编程芯片开发1 天前
基于VMD分解和Qlearning强化学习的biLSTM与DELM最优组合模型的超短期电力负荷预测算法matlab仿真
matlab·强化学习·bilstm·vmd·qlearning·delm·超短期电力负荷预测
jllllyuz1 天前
MATLAB 蒙特卡洛排队等待模拟程序
数据结构·matlab
机器学习之心1 天前
VMD-KAN-Transformer:时间序列预测的“三体运动”,我们用数学与深度学习找到了最优解
matlab·回归·vmd·kan-transformer
MESMarketing2 天前
互动分享 | 软件工具的安全合规实践
功能测试·测试工具·matlab·ci/cd·autosar
南宫萧幕2 天前
从YALMIP工具箱到车辆工况仿真:MATLAB控制策略开发的完整实践指南
开发语言·人工智能·matlab·simulink
yong99902 天前
基于直方图优化的图像去雾技术MATLAB实现
人工智能·计算机视觉·matlab
gihigo19982 天前
MATLAB中实现混沌序列的相空间重构
开发语言·matlab·重构