matlab的多线程操作
matlab的多線程操作
- 先導知識
- 一、結(jié)論
- 二、定時器timer
- 三、多進程操作
先導知識
一、結(jié)論
截止到2021a版本,matlab不能實現(xiàn)傳統(tǒng)意義的多線程,但是可以實現(xiàn)并行計算(doc parallel)、定時器中斷,以及利用磁盤映射實現(xiàn)多進程通信(doc memmapfile)
本文標題是有些“文不對題”的,實際上只是便于讀者檢索到該文章。
二、定時器timer
對于輕量級的任務(wù),比如在命令行打印一個字符串,繪制一張點數(shù)不多的圖,可以”模擬“多線程(本質(zhì)上還是定時器中斷)
該板塊講一下timer的基本使用,有底子的建議在matlab中或者瀏覽器中查閱timer的幫助文檔:
1、基本用法
t = timer('BusyMode','queue','ExecutionMode', 'fixedspacing',...'Period',1/fps, 'TimerFcn', @call_back)一般設(shè)置這幾個就可以了,如果需要設(shè)置其他的,請自行查閱幫助文檔。
(1)‘BusyMode’: 一般選‘queue’,排隊執(zhí)行,這樣的話,不至于丟任務(wù)。
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.
| '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’:兩次回調(diào)之間間隔時間;
(3)‘ExecutionMode’:設(shè)置下一次回調(diào)從什么時候開始,這四個都可能用到,根據(jù)需求來。
singleShot:只執(zhí)行一次;
fixedRate:從上一次回調(diào)進入排隊開始,經(jīng)過一個周期,再進入下一次回調(diào);
fixedDelay:經(jīng)過一個time lag之后,經(jīng)過一個周期,再進入下一次回調(diào);
fixedSpacing:上一次回調(diào)結(jié)束之后,經(jīng)過一個周期,再進入下一次回調(diào);
(4)‘TimerFcn’, @call_back
設(shè)置回調(diào)函數(shù),這個有點復雜。timer本質(zhì)上就是一個定時器中斷,它通過將任務(wù)(call_back)排隊執(zhí)行,它的”回調(diào)方式“是根據(jù)’ExecutionMode’的設(shè)置來確定的,不是傳統(tǒng)意義上的同步回調(diào)或者異步回調(diào)。
三、多進程操作
所謂多進程操作,就是開多個matlab,通過訪問硬盤當中的同一個內(nèi)存空間,實現(xiàn)多個進程之間的通信,從而做到做進程操作。
用到的關(guān)鍵函數(shù)是:memmapfile
這里貼一個我自己做測試時用的demo,看不懂的可以在評論區(qū)問,看見了就會回復。
注意:兩個進程不能同時訪問一塊內(nèi)存空間,否則會報錯。
(由于matlab語言在markdown格式下,沒有高亮,所以下面的兩個代碼塊是選擇的是c語言)
第一個.m文件
第二個.m文件
%將內(nèi)存空間'records.dat'的內(nèi)容打印出來 while 1 m = memmapfile('records.dat','Format','double','Writable','false') ; disp(m.Data) clear m pause(1) end總結(jié)
以上是生活随笔為你收集整理的matlab的多线程操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkcenter电脑重置
- 下一篇: 【Android】CTS测试