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与它们进行通信。

相关推荐
2zcode18 小时前
项目文档:基于MATLAB深度卷积神经网络的肺癌CT影像智能检测系统设计与实现
深度学习·matlab·cnn
其美杰布-富贵-李2 天前
MATLAB 中英文混排-Tex解释器
matlab
2zcode2 天前
基于MATLAB深度卷积特征的多曝光图像自适应融合系统设计与实现
开发语言·matlab·多曝光图像自适应融合系统
钟山翼2 天前
notepad++ 使用 HexEditor 显示二进制 bin 文件存在的 bug
matlab·二进制文件
2zcode3 天前
项目文档:基于MATLAB图像处理与FCM聚类的骨癌X射线影像辅助检测系统设计与实现
图像处理·matlab·聚类
2zcode4 天前
项目文档:基于MATLAB深度卷积特征的多曝光图像自适应融合系统设计与实现
深度学习·计算机视觉·matlab
Promise微笑5 天前
回路电阻测试仪采购:多维度技术评估与深度避坑指南
开发语言·matlab·语音识别
程高兴6 天前
PMSM基于在线转动惯量辩识的滑模负载转矩观测器MATLAB-SIMULINK仿真模型
开发语言·matlab
2zcode7 天前
项目文档:基于MATLAB低采样率ISAR成像的快速稀疏重建算法研究
开发语言·算法·matlab