multithreading - 让 MATLAB 运行包含无限循环的多个独立函数

标签 multithreading matlab multitasking

我目前正在使用三个 matlab 函数使它们在单个 Matlab session 中几乎同时运行(因为我知道 matlab 是单线程的),这三个函数分配有单独的任务,我可能很难解释所有在这里详细介绍每个功能,但尽量包含尽可能多的信息。

它们是 CONTROL/CAMERA/DATA_DISPLAY 任务,我使用的方法是创建 Timer 对象,让所有函数连续回调,回调周期不同。

  1. CONTROL 会通过 udp 端口​​通过 wifi 发送和接收数据,它会检查包的可用性,并不断执行回调
  2. CAMERA通过tcp不断接收camera frame并显示,一个timer object T1用于此功能刷新capture frame
  3. DATA_DISPLAY 显示所有接收到的数据,这个会不断刷新,所以这个功能的另一个定时器T2来刷新显示

但是我注意到定时器 T2 在执行时阻塞了定时器 T1,并减慢了整个过程。我正在使用多核 CPU 的系统上工作,我希望 MATLAB 能够利用计算核心并行执行两个计时器对象。

查了一下matlab的并行计算工具箱,似乎不能处理无限循环或者连续回调,因为代码执行完不会执行完,什么都不显示,可能我不太清楚这个工具箱怎么用

或者任何人都可以提供任何将代码重组为更高效结构的好主意。

非常感谢

最佳答案

我在这里使用并行计算工具箱时遇到问题。该设计意味着作业是通过您的主要 matlab 实例控制的。除此之外,主实例是唯一具有图形用户界面的实例,这需要让您的 DISPLAY_DATA-Task 控制一切。我不知道这是否可能,但它会导致一个非常奇怪的架构。除此之外,进程间通信在处理大量数据时并不是最好的主意。

为了解决这个问题,我会使用 Java 来显示您的数据并实现“DISPLAY_DATA”部分。与java的连接非常快速且易于使用。您将不得不编写一个小型 Java 图形用户界面,它具有一个 appendframe-函数,允许您的 CAMERA-Job 推送新数据。显然,更新 gui 应该并行进行而不阻塞。

关于multithreading - 让 MATLAB 运行包含无限循环的多个独立函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269555/

相关文章:

c++ - Armadillo 相当于 Matlab 置换?

Matlab计算数组中所有(u,v)向量的最近邻距离

c - forkN的作用是什么?

iphone - 如何在使用 AVAudioPlayer 的应用程序的多任务栏中启用音频控件?

java - 在 SWT 程序中,如何启动一个能够在不阻塞的情况下更新 UI 的线程

c# - BackgroundWorker,更新gui,静态方法

java - Axis2 生成的 stub 是线程安全的吗?

java - 终止轮询 HTTP 请求

matlab - 将匿名函数定义为 m 文件函数的 4 个输出中的 2 个

javascript - Redux 中间件是如何实现多任务的?