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

相关推荐
jghhh018 小时前
燃料电池电源 Matlab 仿真方案
开发语言·matlab
wearegogog1238 小时前
用于脑电信号(EEG)分类的 SVM 分类器 Matlab 实现
支持向量机·matlab·分类
zhangfeng113310 小时前
openclaw skills 小龙虾技能 通讯仿真 matlab skill Simulink Agentic Toolkit,通过kimi找到,mcp通讯
开发语言·matlab·openclaw·通讯仿真
chao18984417 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
yongui478341 天前
基于 GA 优化的 BP 神经网络算法分析与 MATLAB 实现
神经网络·算法·matlab
rit84324991 天前
基于 MATLAB 的坐标变换程序
开发语言·matlab
listhi5201 天前
LTE标准下Turbo码编译码仿真
算法·matlab
fie88891 天前
城市环境下车辆目标跟踪算法 MATLAB 实现
算法·matlab·目标跟踪
机器学习之心1 天前
轴承剩余寿命预测 | 基于BP神经网络的轴承剩余寿命预测MATLAB实现!
人工智能·神经网络·matlab·轴承剩余寿命预测
Evand J1 天前
【无人机编队控制程序4】复杂障碍环境下多无人机编队避障(人工势场法APF)与协同控制,MATLAB仿真例程
开发语言·matlab·无人机·控制·apf·避障