matlab的多线程操作

  • 先导知识
  • 一、结论
  • 二、定时器timer
  • 三、多进程操作

先导知识

  1. 听说过:定时器中断、线程、进程
  2. 知道:matlab的帮助文档使用方式,如:doc memmapfile、help memmapfile
  3. 理解:回调函数,同步回调、异步回调(不知道也没关系,csdn里面很多人都写了这个)

一、结论

截止到2021a版本,matlab不能实现传统意义的多线程,但是可以实现并行计算(doc parallel)、定时器中断,以及利用磁盘映射实现多进程通信(doc memmapfile)

本文标题是有些“文不对题”的,实际上只是便于读者检索到该文章。

二、定时器timer

对于轻量级的任务,比如在命令行打印一个字符串,绘制一张点数不多的图,可以”模拟“多线程(本质上还是定时器中断)

该板块讲一下timer的基本使用,有底子的建议在matlab中或者浏览器中查阅timer的帮助文档:

1、基本用法

t = timer('BusyMode','queue','ExecutionMode', 'fixedspacing',...'Period',1/fps, 'TimerFcn', @call_back)

一般设置这几个就可以了,如果需要设置其他的,请自行查阅帮助文档。

(1)‘BusyMode’: 一般选‘queue’,排队执行,这样的话,不至于丢任务。

Character vector or string scalar that indicates action taken when a timer has to execute TimerFcn before the completion of previous execution of the TimerFcn. When Running='on', BusyMode is read only. This table summarizes the busy modes.

BusyMode Values Behavior if Queue Empty Behavior if Queue Not Empty Notes
'drop' Adds task to queue Drops task Possible skipping of TimerFcn calls
'error' Adds task to queue Completes task; throws error specified by ErrorFcn; stops timer Stops timer after completing task in execution queue
'queue' Adds task to queue Waits for queue to clear, and then enters task in queue Adjusts Period property to manage tasks in execution queue

(2)‘Period’:两次回调之间间隔时间;

(3)‘ExecutionMode’:设置下一次回调从什么时候开始,这四个都可能用到,根据需求来。

singleShot:只执行一次;

fixedRate:从上一次回调进入排队开始,经过一个周期,再进入下一次回调;
fixedDelay:经过一个time lag之后,经过一个周期,再进入下一次回调;
fixedSpacing:上一次回调结束之后,经过一个周期,再进入下一次回调;
(4)‘TimerFcn’, @call_back

设置回调函数,这个有点复杂。timer本质上就是一个定时器中断,它通过将任务(call_back)排队执行,它的”回调方式“是根据’ExecutionMode’的设置来确定的,不是传统意义上的同步回调或者异步回调。

三、多进程操作

所谓多进程操作,就是开多个matlab,通过访问硬盘当中的同一个内存空间,实现多个进程之间的通信,从而做到做进程操作。

用到的关键函数是:memmapfile

这里贴一个我自己做测试时用的demo,看不懂的可以在评论区问,看见了就会回复。

注意:两个进程不能同时访问一块内存空间,否则会报错。
(由于matlab语言在markdown格式下,没有高亮,所以下面的两个代码块是选择的是c语言)
第一个.m文件

% 写入一些数据
myData = (1:10)';
fileID = fopen('records.dat','w');
fwrite(fileID,myData,'double');
fclose(fileID);
% 改变一些数据
while 1
m = memmapfile('records.dat','Format','double','Writable',true) ;
m.Data(1) = m.Data(1)+1;
disp(m.Data);
clear m
pause(1)
end

第二个.m文件

%将内存空间'records.dat'的内容打印出来
while 1
m = memmapfile('records.dat','Format','double','Writable','false') ;
disp(m.Data)
clear m
pause(1)
end

matlab的多线程操作相关推荐

  1. FMDatabaseQueue 数据库多线程操作、事务处理

    SQLite数据库多线程操作: 在上面一节中已经讲过FMDB的用法了,接下来讲讲sqlite在都线程中的用法.如果应用中使用了多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安 ...

  2. 一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault...

    一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault

  3. Shell多线程操作及线程数控制实例

    来源:http://www.jb51.net/article/51720.htm 这篇文章主要介绍了Shell多线程操作及线程数控制实例,文中从单线程实现一个需求开始,不断加入代码实现多线程以及线程数 ...

  4. python多线程读取数据库数据_python多线程操作MySQL数据库pymysql

    python多线程操作MySQL数据库pymysql 项目中使用多线程操作数据库提示错误:pymysql.err.InterfaceError: (0, "),原因是pymysql的exec ...

  5. MFC不能多线程操作控件的原因

    对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下:   mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能!   mfc与界 ...

  6. matlab文件目录表示,Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格...

    Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格 tr1   str1   for   max   imp   mda   eva   目录   xls clear;clc; clo ...

  7. python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解

    Python基于多线程操作数据库相关问题分析 本文实例分析了Python多线程操作数据库相关问题.分享给大家供大家参考,具体如下: python多线程并发操作数据库,会存在链接数据库超时.数据库连接丢 ...

  8. Core Data 多线程操作实战篇

    最近在解决百度音乐iPhone客户端偶现数据库操作crash的问题,顺手整理了下CoreData的多线程原则,以及实际开发时应该如何遵守这些原则. Core Data多线程操作的基本原则 不允许跨线程 ...

  9. c#多线程操作界面控件的简单实现

    一个小功能,早有人实现了.自己在一个项目中用到,觉得有必要记录一下,写下来. 代码 从上面你可能已经看出如何多线程操作同一个控件的,就是通过一个委托,然后定义委托方法,判断控件的InvokeRequi ...

最新文章

  1. 干货!仅有 100k 参数的高效显著性检测方法
  2. oracle中的sql%rowcount
  3. 检索数据_15_将空值转成其它值
  4. hive 自定义元数据表_Hive分区表和桶表的使用
  5. javaSE各阶段练习题--数据类型运算符
  6. oracle12c完全卸载工具_oracle完全卸载方法
  7. linux 环境下配置ftp服务器
  8. Java Virtual Machine
  9. 区块链酒廊BTC Lounge正式启动运营
  10. 使用单例时一定要注意的一个问题
  11. httpd2.4.39直接访问路径下的ceb文件,显示乱码
  12. Android SDK Platform Tools下载(包括adb 、 fastboot 和 systrace)
  13. element table 组件内容换行
  14. 儿童吹泡泡水简单配方_请问儿童吹泡泡液如何制作?
  15. iText操作word
  16. 软件工程 sdlcmodel
  17. Ribbon的简单介绍和使用
  18. 当a=1,b=2,c=3时,if(ac)b=a;a=c;c=b;的执行结果详解
  19. C语言中getchar()函数的详解
  20. 自定义SpringBoot程序启动图标

热门文章

  1. 费曼物理学讲义(连载)
  2. cup过高是什么意思_CPU占用过高怎么办? 每日一答
  3. web mysql报表工具_新一代Java web报表工具—Smartbi电子表格的优势
  4. 爬取网易云音乐评论《安河桥》,进行分析
  5. 视频教程-微信小程序全集-微信开发
  6. 【机器学习的数学基础】(十五)信息论
  7. 解决Could not find method xxx for arguments问题
  8. HuTool工具生成带图片二维码
  9. Java多线程实现火车站售票案例
  10. SuMa++:Efficient LiDAR-based Semantic SLAM