CN106909461A - 一种单线程模拟多线程的方法 - Google Patents
一种单线程模拟多线程的方法 Download PDFInfo
- Publication number
- CN106909461A CN106909461A CN201710092411.1A CN201710092411A CN106909461A CN 106909461 A CN106909461 A CN 106909461A CN 201710092411 A CN201710092411 A CN 201710092411A CN 106909461 A CN106909461 A CN 106909461A
- Authority
- CN
- China
- Prior art keywords
- thread
- simulation
- simulation thread
- pthread
- multithreading
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种单线程模拟多线程的方法,包括如下步骤:(1)创建并初始化一个模拟线程池,用以存放模拟线程;(2)创建注册若干模拟线程,并将新模拟线程登记到模拟线程池中;(3)遍历模拟线程池中的所有模拟线程,判断各个模拟线程的执行标识thread.flag:若为true,则执行步骤(4),否则继续判断下一个模拟线程的执行标识;(4)进行该模拟线程的运行策略判断,并按照判断得到的运行策略执行该模拟线程;(5)执行完成后跳转回到步骤(3)直至判断完模拟线程池中的所有模拟线程。本发明方法可以更好地利用MCU资源和性能,优化程序处理逻辑。
Description
技术领域
本发明涉及多任务多线程功能实现技术领域,尤其涉及一种单线程模拟多线程的方法。
背景技术
物联网采集控制系统早已渗透到诸如工业生产、智能家居、宇宙开发、海洋探测、环境保护、资源调查、医学诊断、生物工程、甚至文物保护等等极其之泛的领域。数据采集和终端控制器在整个系统中也占据举足轻重的位置。终端控制和采集系统是万物互联中和人与物交流的关键一环,它需要执行人的思想,和反馈物体的当前状态。终端设备往往数量众多分布也广泛,对于成本的要求也苛刻,所以终端控制和采集设备在执行单元上往往选择资源比较有限的单片机芯片,这也就和控制器需要执行的多重复杂的任务形成矛盾。在有的项目中,单片机系统可能需要处理比较复杂的逻辑和任务,由于资源限制,无法安装操作系统,程序逻辑往往过于臃肿复杂,且软件的实时性能大大降低。
发明内容
本发明为克服上述的不足之处,目的在于提供一种单线程模拟多线程的方法,本方法可以更好地利用MCU资源和性能,优化程序处理逻辑。
本发明是通过以下技术方案达到上述目的:一种单线程模拟多线程的方法,包括如下步骤:
(1)创建并初始化一个模拟线程池,用以存放模拟线程;
(2)创建注册若干模拟线程,并将新模拟线程登记到模拟线程池中;
(3)遍历模拟线程池中的所有模拟线程,判断各个模拟线程的执行标识thread.flag:若为true,则执行步骤(4),否则继续判断下一个模拟线程的执行标识;
(4)进行该模拟线程的运行策略判断,并按照判断得到的运行策略执行该模拟线程;
(5)执行完成后跳转回到步骤(3)直至判断完模拟线程池中的所有模拟线程。
作为优选,所述模拟线程池的大小根据MCU资源大小自定义。
作为优选,所述模拟线程登记到模拟线程池中需登记如下属性:
(i)pThread.con:线程执行模式;
(ii)pThread.cnt:线程执行次数;
(iii)pThread.freq:线程执行周期;
(iv)pThread.fun:回调函数;
(v)pThread.flag:可调用标识。
作为优选,所述步骤(4)模拟线程的运行策略如下所示:
(a)策略ONCEDELAY:即延时运行一次,等待延时时间到,并调用模拟线程回调函数一次,调用完后注销模拟线程;
(b)策略MANY:即执行多次,模拟线程按照设定的时间周期调用pThread->cnt次后,注销该模拟线程;pThread->cnt为注册模拟线程时设置;
(c)策略FOREVER:即永久执行,永久周期性调用模拟线程,直到主线程退出消亡;
(d)策略RESULT:即按执行结果执行,按照前一次调用结果判断是否执行下一次;若前一次调用返回错误,则注销模拟线程;否则继续调用。
作为优选,所述步骤(1)-步骤(5)执行过程中,时钟滴答定时器实时计算每个模拟线程的执行频率及延时控制,判断每个模拟线程计时是否到达预设的时间,若到达预设时间,则置该模拟线程的可调用标识pThread.flag为ture。
作为优选,所述在整个方法运行的任意步骤中,允许人为注册或注销模拟线程。
本发明的有益效果在于:本发明方法可以更好地利用MCU资源和性能,优化程序处理逻辑。
附图说明
图1是本发明方法的流程示意图。
具体实施方式
下面结合具体实施例对本发明进行进一步描述,但本发明的保护范围并不仅限于此:
实施例:如图1所示,一种单线程模拟多线程的方法具体包括如下步骤:
(1)创建并初始化一个模拟线程池,并用以存放模拟线程;线程初始化主要是初始化线程池中的模拟线程初始化值(不包含主线程,主线程非模拟线程),初始值为0。线程池能够容纳的最大模拟线程的数目一定,根据MCU内存资源进行确定。每注册一个新的线程,线程池会分配一个新空间给该线程,反之每注销一个线程,则从线程池中删除该线程资源。
(2)创建注册若干模拟线程,并进行线程登记,即把新创建的模拟线程登记到线程池中,模拟线程需要登记如下属性:
pThread.con:线程执行模式
pThread.cnt:线程执行次数
pThread.freq:线程执行周期
pThread.fun:回调函数
pThread.flag:可调用标识;
(3)遍历线程池中的所有线程,并进行第(4)步判断。
(4)判断线程池中各线程的执行标识thread.flag,如果为true,则继续下一步策略判断,否则继续判断下一个模拟线程的执行标识。
(5)判断该模拟线程运行策略,每个模拟线程有以下可运行的策略,具体如下所示:
1、策略ONCEDELAY(延时运行一次):等待延时时间到,并调用模拟线程回调函数一次,调用完后,注销该线程。
2、策略MANY(执行多次):模拟线程按照设定的时间周期,调用pThread->cnt次后,注销该线程。pThread->cnt为注册该线程时设置。
3、策略FOREVER(永久执行):永久的周期性地调用模拟线程,直到主线程退出销亡。
4、策略RESULT(按执行结果执行):按照上一次调用结果判断是否执行下一次。如果前一次调用返回错误,则注销该模拟线程,否则继续调用。
(6)执行模拟线程,按照第(4)步所判断的运行策略执行模拟线程
(7)执行完成后回到步骤(3),当最后一个线程判断或者执行完成后回到(2)继续从头遍历线程池。
在整个(1)-(7)过程中,时钟滴答定时器时刻计算每个模拟线程的执行频率,以及延时控制,判断每个模拟线程计时是否到达设定的时间,如果到达设定时间则置该线程的可调用标识pThread.flag为ture。
其中,时钟滴答定时器即为sysclk内核定时器,时钟滴答回调函数(线程调度程序)以1ms为周期定时执行,时间计数器timer.1ms变量会计数一次,检测各个线程运行状态标识和运行频率,当时间计数到该线程运行的时间节点,打开运行使能标识,之后主线程执行函数判断该使能标识为使能,则执行该线程,否则不执行。
时钟滴答定时器还可完成线程调度室;调度程序每一毫秒check一次当前时间节点,判断是否到达某个模拟线程的执行节点,如果到达,则置位该模拟线程的pThread.flag(可调用标识)为true,等待主线程调用。
在整个程序运行过程中,允许在任意模拟线程中或者主线程中,注册或注销模拟线程。新注册的模拟线程,可以按照设定的时间周期周期性执行,极大方便了任务对时间控制需求。
以上的所述乃是本发明的具体实施例及所运用的技术原理,若依本发明的构想所作的改变,其所产生的功能作用仍未超出说明书及附图所涵盖的精神时,仍应属本发明的保护范围。
Claims (6)
1.一种单线程模拟多线程的方法,其特征在于,包括如下步骤:
(1)创建并初始化一个模拟线程池,用以存放模拟线程;
(2)创建注册若干模拟线程,并将新模拟线程登记到模拟线程池中;
(3)遍历模拟线程池中的所有模拟线程,判断各个模拟线程的执行标识thread.flag:若为true,则执行步骤(4),否则继续判断下一个模拟线程的执行标识;
(4)进行该模拟线程的运行策略判断,并按照判断得到的运行策略执行该模拟线程;
(5)执行完成后跳转回到步骤(3)直至判断完模拟线程池中的所有模拟线程。
2.根据权利要求1所述的一种单线程模拟多线程的方法,其特征在于:所述模拟线程池的大小根据MCU资源大小自定义。
3.根据权利要求1所述的一种单线程模拟多线程的方法,其特征在于:所述模拟线程登记到模拟线程池中需登记如下属性:
(i)pThread.con:线程执行模式;
(ii)pThread.cnt:线程执行次数;
(iii)pThread.freq:线程执行周期;
(iv)pThread.fun:回调函数;
(v)pThread.flag:可调用标识。
4.根据权利要求1所述的一种单线程模拟多线程的方法,其特征在于:所述步骤(4)模拟线程的运行策略如下所示:
(a)策略ONCEDELAY:即延时运行一次,等待延时时间到,并调用模拟线程回调函数一次,调用完后注销模拟线程;
(b)策略MANY:即执行多次,模拟线程按照设定的时间周期调用pThread->cnt次后,注销该模拟线程;pThread->cnt为注册模拟线程时设置;
(c)策略FOREVER:即永久执行,永久周期性调用模拟线程,直到主线程退出消亡;
(d)策略RESULT:即按执行结果执行,按照前一次调用结果判断是否执行下一次;若前一次调用返回错误,则注销模拟线程;否则继续调用。
5.根据权利要求1所述的一种单线程模拟多线程的方法,其特征在于:所述步骤(1)-步骤(5)执行过程中,时钟滴答定时器实时计算每个模拟线程的执行频率及延时控制,判断每个模拟线程计时是否到达预设的时间,若到达预设时间,则置该模拟线程的可调用标识pThread.flag为ture。
6.根据权利要求1所述的一种单线程模拟多线程的方法,其特征在于:所述在整个方法运行的任意步骤中,允许人为注册或注销模拟线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710092411.1A CN106909461A (zh) | 2017-02-21 | 2017-02-21 | 一种单线程模拟多线程的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710092411.1A CN106909461A (zh) | 2017-02-21 | 2017-02-21 | 一种单线程模拟多线程的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106909461A true CN106909461A (zh) | 2017-06-30 |
Family
ID=59208437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710092411.1A Pending CN106909461A (zh) | 2017-02-21 | 2017-02-21 | 一种单线程模拟多线程的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106909461A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109062691A (zh) * | 2018-07-19 | 2018-12-21 | 芯视图(常州)微电子有限公司 | 一种轻量顶点染色线程生成分发的方法及装置 |
CN109660569A (zh) * | 2017-10-10 | 2019-04-19 | 武汉斗鱼网络科技有限公司 | 一种多任务并发执行方法、存储介质、设备及系统 |
CN112235032A (zh) * | 2020-09-17 | 2021-01-15 | 中国科学院西安光学精密机械研究所 | 基于时间服务的高光谱成像仪1553b总线通信方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080184239A1 (en) * | 2007-01-30 | 2008-07-31 | Microsoft Corporation | Multi-threaded detection of a game software debugger |
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN106104481A (zh) * | 2014-02-06 | 2016-11-09 | 优创半导体科技有限公司 | 确定性和机会性多线程 |
CN106325980A (zh) * | 2015-06-30 | 2017-01-11 | 中国石油化工股份有限公司 | 一种多线程并发系统 |
-
2017
- 2017-02-21 CN CN201710092411.1A patent/CN106909461A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080184239A1 (en) * | 2007-01-30 | 2008-07-31 | Microsoft Corporation | Multi-threaded detection of a game software debugger |
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN106104481A (zh) * | 2014-02-06 | 2016-11-09 | 优创半导体科技有限公司 | 确定性和机会性多线程 |
CN106325980A (zh) * | 2015-06-30 | 2017-01-11 | 中国石油化工股份有限公司 | 一种多线程并发系统 |
Non-Patent Citations (1)
Title |
---|
林江宏 等: "多核CPU和GPU加速分子动力学模拟", 《计算机应用》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109660569A (zh) * | 2017-10-10 | 2019-04-19 | 武汉斗鱼网络科技有限公司 | 一种多任务并发执行方法、存储介质、设备及系统 |
CN109660569B (zh) * | 2017-10-10 | 2021-10-15 | 武汉斗鱼网络科技有限公司 | 一种多任务并发执行方法、存储介质、设备及系统 |
CN109062691A (zh) * | 2018-07-19 | 2018-12-21 | 芯视图(常州)微电子有限公司 | 一种轻量顶点染色线程生成分发的方法及装置 |
CN109062691B (zh) * | 2018-07-19 | 2023-07-04 | 南京军微半导体科技有限公司 | 一种轻量顶点染色线程生成分发的方法 |
CN112235032A (zh) * | 2020-09-17 | 2021-01-15 | 中国科学院西安光学精密机械研究所 | 基于时间服务的高光谱成像仪1553b总线通信方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10503549B2 (en) | Time critical tasks scheduling | |
CN106909461A (zh) | 一种单线程模拟多线程的方法 | |
CN103885881B (zh) | 一种基于VxWorks系统多任务机制的高实时并发测试方法 | |
DE102010046825A1 (de) | Verfahren und System für eine automatische Testfallerzeugung für verteilte eingebettete Systeme | |
CN109684060A (zh) | 一种多类型时间关键任务的混合调度方法 | |
DE602004018023D1 (de) | Vorrichtung und verfahren zum automatischen parallelisieren von netzwerkanwendungen durch pipeline-transformation | |
CN107239331B (zh) | 一种并行测试任务的同步触发执行方法 | |
CN105955726A (zh) | 一种控制逻辑及其可视化图形编程方法 | |
CN106095654A (zh) | 性能验证装置、具有性能验证装置的系统以及方法 | |
WO2008050094A1 (en) | Diagnostic apparatus and method | |
CN106709628A (zh) | 一种生产排程方法及系统 | |
CN109783239B (zh) | SystemC仿真调度核的多线程优化方法、系统及介质 | |
CN108985459A (zh) | 训练模型的方法和装置 | |
CN103324469A (zh) | 定时器实现方法及装置 | |
CN109446082B (zh) | 多线程测试流程项目配置系统 | |
CN110471394A (zh) | 任务测试方法及装置、系统、存储介质和处理器 | |
CN104597832B (zh) | 一种基于amba总线的plc程序调度器ip核 | |
Zhu et al. | Refinement of timing constraints for concurrent tasks with scheduling | |
CN104063213B (zh) | 管理自动化系统中的分布式计算的方法和系统 | |
CN102183952A (zh) | 一种在plc中嵌入非致命故障诊断的方法 | |
CN104460334B (zh) | 仿真方法以及仿真系统 | |
Coutts et al. | Model-driven distributed systems | |
CN115600857A (zh) | 一种数字化产品智能制造方法、系统、计算机及存储介质 | |
CN106383694A (zh) | 一种虚拟定时器定时方法 | |
JPH0194432A (ja) | 複数機種対応プログラム自動生成方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170630 |