matlab的多线程操作
matlab的多线程操作
- 先导知识
- 一、结论
- 二、定时器timer
- 三、多进程操作
先导知识
- 听说过:定时器中断、线程、进程
- 知道:matlab的帮助文档使用方式,如:doc memmapfile、help memmapfile
- 理解:回调函数,同步回调、异步回调(不知道也没关系,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的多线程操作相关推荐
- FMDatabaseQueue 数据库多线程操作、事务处理
SQLite数据库多线程操作: 在上面一节中已经讲过FMDB的用法了,接下来讲讲sqlite在都线程中的用法.如果应用中使用了多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安 ...
- 一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault...
一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault
- Shell多线程操作及线程数控制实例
来源:http://www.jb51.net/article/51720.htm 这篇文章主要介绍了Shell多线程操作及线程数控制实例,文中从单线程实现一个需求开始,不断加入代码实现多线程以及线程数 ...
- python多线程读取数据库数据_python多线程操作MySQL数据库pymysql
python多线程操作MySQL数据库pymysql 项目中使用多线程操作数据库提示错误:pymysql.err.InterfaceError: (0, "),原因是pymysql的exec ...
- MFC不能多线程操作控件的原因
对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下: mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能! mfc与界 ...
- matlab文件目录表示,Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格...
Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格 tr1 str1 for max imp mda eva 目录 xls clear;clc; clo ...
- python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解
Python基于多线程操作数据库相关问题分析 本文实例分析了Python多线程操作数据库相关问题.分享给大家供大家参考,具体如下: python多线程并发操作数据库,会存在链接数据库超时.数据库连接丢 ...
- Core Data 多线程操作实战篇
最近在解决百度音乐iPhone客户端偶现数据库操作crash的问题,顺手整理了下CoreData的多线程原则,以及实际开发时应该如何遵守这些原则. Core Data多线程操作的基本原则 不允许跨线程 ...
- c#多线程操作界面控件的简单实现
一个小功能,早有人实现了.自己在一个项目中用到,觉得有必要记录一下,写下来. 代码 从上面你可能已经看出如何多线程操作同一个控件的,就是通过一个委托,然后定义委托方法,判断控件的InvokeRequi ...
最新文章
- 干货!仅有 100k 参数的高效显著性检测方法
- oracle中的sql%rowcount
- 检索数据_15_将空值转成其它值
- hive 自定义元数据表_Hive分区表和桶表的使用
- javaSE各阶段练习题--数据类型运算符
- oracle12c完全卸载工具_oracle完全卸载方法
- linux 环境下配置ftp服务器
- Java Virtual Machine
- 区块链酒廊BTC Lounge正式启动运营
- 使用单例时一定要注意的一个问题
- httpd2.4.39直接访问路径下的ceb文件,显示乱码
- Android SDK Platform Tools下载(包括adb 、 fastboot 和 systrace)
- element table 组件内容换行
- 儿童吹泡泡水简单配方_请问儿童吹泡泡液如何制作?
- iText操作word
- 软件工程 sdlcmodel
- Ribbon的简单介绍和使用
- 当a=1,b=2,c=3时,if(ac)b=a;a=c;c=b;的执行结果详解
- C语言中getchar()函数的详解
- 自定义SpringBoot程序启动图标