一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于混合推进的多线程并行作战仿真方法和系统

2022-07-16 23:41:48 来源:中国专利 TAG:


1.本发明属于作战仿真技术领域,具体涉及一种基于混合推进的多线程并行作战仿真方法和系统。


背景技术:

2.仿真是随时间演化实现模型的方法和过程。仿真技术的应用已有很久的历史,计算机的出现极大促进了仿真技术的发展。当前,仿真技术的应用日益广泛,在军事、科研、生产、娱乐等各个领域,正发挥着越来越重要的作用。关于仿真的分类,可以有多种方法。如按照模型的类型,可分为连续仿真、离散时间仿真和离散事件仿真;按逻辑时间与墙钟时间的关系可分为实时仿真、比例实时仿真和尽可能快的仿真;按仿真系统的运行方式可分为串行仿真和并行/分布仿真等。串行仿真是以一个线程或进程,逐个模拟事件链表内各行动过程,计算行动效能和结果,生成态势信息。根据并行的方式不同,并行仿真可以分为分布式并行仿真和共享内存式并行仿真。分布式并行仿真依靠分布式交互技术,在网络内多台计算机上,同时模拟事件队列内各行动过程,计算行动效能和结果,生成态势信息。共享内存式仿真依赖于计算机多核处理器,利用多线程技术,在同一台计算机内实施模拟。
3.离散事件仿真(discrete event simulation, des)是随时间演化实现离散事件系统模型的仿真。离散事件系统的状态改变都是由事件的发生引起的。事件的发生没有持续性,而是在一个时间点,瞬间完成。从仿真推进机制上,可分为时间驱动和事件驱动。在时间驱动的离散事件仿真中,仿真时间分为一串等长的时间步,仿真时间从一个时间步向下一个时间步推进。在事件驱动的离散事件仿真中,仿真时间从一个事件的发生时刻,推进到下一个事件的发生时刻,仿真时间推进具有跳跃性。
4.在作战仿真领域,仿真过程属于离散事件仿真的范畴,当前多数文献采用时间推进机制,如cn111597035a公开的基于多线程的时间推进方法,不足之处是仅使用多线程进行作战仿真推进,在加载作战方案/仿真方案时,没有使用多线程,当作战方案/仿真方案数据量较大时,用于加载的时间成本在整个仿真时间的比重将增加,而且创建的多线程生命周期为整个仿真引擎运行全过程,造成仿真主机的计算和存储资源的不必要开支。cn107193639a公开的一种支持联合作战的多核并行仿真引擎系统,采用分布式并行方式,但依赖一个包括多台仿真主机的计算机网络,仿真效率受到消息传递、时间统一和网络延迟等因素影响,而且仅依靠单台仿真主机不能实现仿真过程。因此,现有的作战仿真存在如下不足:1、当仿真方案数据量较大时,传统的单线程加载与解析仿真方案,耗时较大,延迟现象明显。
5.2、当仿真事件执行时间段的并集没有覆盖所有仿真时间的时候,采用时间推进机制,因每一次都要遍历和判断所有事件,将导致过多的时间和算力开支,降低仿真效率。
6.3、当仿真事件或者仿真方案数量并没有达到大规模的体量时,采用分布式并行,并不一定能够提高太多的仿真效率。


技术实现要素:

7.本发明的目的之一,在于提供一种基于混合推进的多线程并行作战仿真方法,该多线程并行作战仿真方法能够实现时间驱动和事件驱动的混合推进机制,适用大规模的仿真事件,仿真效率高,且不需要考虑网络延迟、时间统一等分布式并行效率的延迟因素。
8.本发明的目的之二,在于提供一种基于混合推进的多线程并行作战仿真系统。
9.为了达到上述目的之一,本发明采用如下技术方案实现:一种基于混合推进的多线程并行作战仿真方法,所述多线程并行作战仿真方法包括如下步骤:步骤一、创建一个引擎服务主线程;步骤二、所述引擎服务主线程获取作战方案中的实体数量;步骤三、所述引擎服务主线程根据仿真主机核心数和实体数量,创建一个第一分线程池;步骤四、所述第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;步骤五、所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;步骤六、所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;步骤七、所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;步骤八、所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;步骤九、所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;其中,所述仿真参数包括仿真时刻和仿真步长;步骤十、所述各个第二分线程根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;步骤十一、所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
10.进一步的,步骤三中,所述第一分线程池中的第一分线程数量为:n
thr1
=min(n
ent
,2n
cpu-1);其中,n
thr1
为第一分线程数量;n
ent
为实体数量;n
cpu
为仿真主机核心数。
11.进一步的,步骤七中,所述第二分线程池中的第二分线程池数量为:n
thr2
=min(n
even
,n
cpu-1);其中,n
thr2
为第二分线程数量;n
even
为实体数量;n
cpu
为仿真主机核心数。
12.进一步的,所述步骤十的具体实现过程包括:步骤1001、所述引擎服务主线程设置历史事件队列初始为空;步骤1002、所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段,进入步骤1003;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,进入步骤1004;步骤1003、所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻,返回步骤1002;步骤1004、所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则进入步骤1005;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,进入步骤1006;步骤1005、所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;步骤1006、所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程,进入步骤1007;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务,返回步骤1005;步骤1007、所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,返回步骤1002;如否,则所述引擎服务主线程等待。
13.进一步的,所述步骤1005还包括:当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
14.进一步的,所述步骤1005还包括:当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;所述各个第二分线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
15.为了达到上述目的之二,本发明采用如下技术方案实现:一种基于混合推进的多线程并行作战仿真系统,所述多线程并行作战仿真系统包括:第一创建模块,用于创建一个引擎服务主线程;第一获取模块,用于所述引擎服务主线程获取作战方案中的实体数量;第二创建模块,用于根据仿真主机核心数和实体数量,创建一个第一分线程池;并行执行加载模块,用于第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;第一销毁释放模块,用于所述引擎服务主线程销毁所述第一分线程池,以释放所
述各个第一分线程;第二获取模块,用于所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;其中,所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;第三创建模块,用于所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;分配模块,用于所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;设置模块,用于所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;其中,所述仿真参数包括仿真时刻和仿真步长;并行执行仿真模块,用于所述各个第二分线程池根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止;第二销毁释放模块,用于所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
16.进一步的,所述并行执行仿真模块包括:第一设置子模块,用于所述引擎服务主线程设置历史事件队列初始为空;第一判断子模块,用于所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段并传输给第二设置子模块;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,并将所述当前仿真时刻传输给第二判断子模块;所述第二设置子模块,用于所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻并传输给所述第一判断子模块;所述第二判断子模块,用于所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则将所述当前仿真作战任务传输给并行调用子模块;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,并所述当前仿真时刻传输给第三判断子模块;所述并行调用子模块,用于所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;所述第三判断子模块,用于所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程并传输给第四判断子模块;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务并传输给所述并行调用子模块;所述第四判断子模块,用于所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,并传输给所述第一判断子模块;如否,则所述引擎服务主线程等待。
17.进一步的,所述并行调用子模块,还用于当在并行执行仿真过程中出现提前完成
的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
18.进一步的,所述并行调用子模块还包括:第五判断子模块,用于当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;第六判断子模块,用于所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;确定子模块,用于所述引擎服务主线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
19.本发明的有益效果:本发明通过引擎服务主线程创建的第一分线程池中的每个第一分线程,对各个实体信息和仿真作战任务并行执行加载,实现了多线程并行加载与解析仿真作战方案,提高了较大数据量的仿真方案加载与解析速度;本发明通过引擎服务主线程仿真参数和时钟跳变时段集,实时生成当前仿真时刻,推进仿真进程,通过引擎服务主线程将所述事件队列中各个仿真作战任务分配给第二分线程池中各个第二分线程,得到各个第二分线程的分事件队列;各个第二分线程根据当前仿真时刻,对各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止,实现了时间和事件的混合推进机制,有效地减少了算力开支,节约了时间成本,提升了离散事件仿真效率,适用大规模事件的仿真,且不需要考虑网络延迟、时间统一等分布式并行效率的延迟因素;本发明通过第一分线程,实现了实体信息和仿真作战任务的灵活加载,避免了所有实体信息和仿真作战任务的一次性加载,提高了作战仿真准备的效率,减少了不必要的内存开支。
附图说明
20.图1为本发明的基于混合推进的多线程并行作战仿真流程示意图。
具体实施方式
21.以下结合附图对本发明的具体实施方式作出详细说明。
22.本实施例给出了一种基于混合推进的多线程并行作战仿真方法,参考图1,该多线程并行作战仿真方法包括如下步骤:步骤一、创建一个引擎服务主线程。
23.开始仿真时,本实施例首先创建一个引擎服务主线程(main thread),以控制整个作战仿真过程的仿真时钟,推进整个作战仿真过程。
24.步骤二、所述引擎服务主线程获取作战方案中的实体数量。
25.本实施例的引擎服务主线程从作战方案中选取待仿真的作战方案并抽取出实体数量。
26.步骤三、所述引擎服务主线程根据仿真主机核心数和实体数量,创建一个第一分线程池。
27.本实施例的引擎服务主线程根据仿真主机核心数以及实体数量,创建一个第一分
线程池。第一分线程池中的第一分线程数量为:n
thr1
=min(n
ent
,2n
cpu-1);其中,n
thr1
为第一分线程数量;nent为实体数量;ncpu为仿真主机核心数。
28.本实施例中的实体包括火炮、飞机、通信电台、雷达、导引头以及各种类型的指挥机构。
29.步骤四、所述第一分线程池中各个第一分线程并行执行加载各个实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列。
30.本实施例的引擎服务主线程将作战方案加载任务,交由第一分线程池中各个第一分线程并行执行,生成仿真实体信息(实体信息)和事件实例(即仿真作战任务),分别存储于实体队列和事件队列。
31.本实施例的实体信息包括位置(经度、纬度和高度)、姿态信息(水平方向、俯仰方向)、雷达截面积、受损状态信息、子实体和父实体等。
32.本实施例的仿真作战任务包括机动、爆炸、光学侦察、电子对抗侦察、通信干扰、雷达干扰和光电干扰以及情报融合、目标选择和任务分配,仿真作战任务信息包括行动开始时间、行动结束时间、行动开始触发模式、行动开始触发参数、行动结束触发模式和行动结束触发模式。
33.步骤五、所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程。
34.当各个第一分线程并行执行加载任务执行完成后,本实施例的引擎服务主线程销毁第一分线程池,释放各个第一分线程和内存资源。
35.步骤六、所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集。
36.本实施例的引擎服务主线程检索事件队列,生成时钟跳变时段集。本实施例的时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务。如作战方案中包括5个实体,红方包括2个实体,1个指挥机构和1个兵力实体,蓝方包括4个实体,2个指挥机构和2个兵力实体。双方指挥机构均无作战行动,双方兵力实体作战行动信息如下:
××
飞机:第一个仿真作战任务为机动,开始时间1000秘,结束时间6000秒;第二个仿真作战任务为雷达干扰,开始时间1200秒,结束时间5800秒。
37.an/fps-117:第一个仿真作战任务为雷达探测:开始时间900秒,结束时间3000秒。
38.ge-592:第一个仿真作战任务为雷达探测:开始时间6500秒,结束时间8000秒。
39.通过上述行动开始、结束时间的并集,仿真任务的时间段为:1000秒-6000秒,6500秒-8000秒,时钟跳变时间段为:0秒-900秒,6000秒-6500秒。
40.步骤七、所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池。
41.本实施例由引擎服务主线控制,根据仿真主机核心数和事件队列的大小,创建一个第二线程池,推进仿真时钟。第二分线程池中的第二分线程池数量为:n
thr2
=min(n
even
,n
cpu-1);
其中,n
thr2
为第二分线程数量;n
even
为实体数量;n
cpu
为仿真主机核心数。
42.步骤八、所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列。
43.引擎服务主线程将事件队列内事件每一个仿真步长的仿真作战任务,交由第二线程池内各个第二分线程执行。
44.步骤九、所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻。
45.本实施例的仿真参数包括仿真时刻和仿真步长。引擎服务主线程根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻和当前仿真步长。
46.步骤十、所述各个第二分线程根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止。
47.本实施例的各个第二分线程并行执行当前仿真步长的仿真作战任务,直至仿真暂停或结束。具体实现过程包括:步骤1001、所述引擎服务主线程设置历史事件队列初始为空;步骤1002、所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段,进入步骤1003;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,进入步骤1004;如走第1步,当前仿真时刻为5秒,处于第1个跳变时间段,则直接将仿真时刻跳变为900秒。
48.步骤1003、所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻,返回步骤1002;步骤1004、所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则进入步骤1005;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,进入步骤1006;步骤1005、所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;步骤1006、所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程,进入步骤1007;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务,返回步骤1005;本实施例的仿真作战任务是否均已执行仿真的判断方式包括结束时间和事件执行情况,如弹道导弹对某机场打击,开始和结束时间分别为100秒和2000秒,但在第1600秒时,弹道导弹已经飞抵机场,并完成轰炸,需要将结束时间和事件相结合来判断。
49.步骤1007、所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,返回步骤1002;如否,则所述引擎服务主线程等待。
50.本实施例中的步骤1005还包括:当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任
务移动到历史事件队列中。
51.在每一步长的仿真过程中,实时更新事件队列和时钟跳变时段。
52.本实施例中,步骤1005还包括:1、当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中。
53.如战斗机挂载的空空导弹不是单独的实体,不在实体队列内,在战斗机将空空导弹发射之后,成为单独的实体,需要补充入实体队列。
54.2、所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中。
55.如战斗机刚开始有机动任务,但由于航程限制或者机动时间限制,到达最大航程或机动结束时间,根据作战方案的设置,可以触发返航事件(即返航任务),返航事件不是时间触发性质,不在事件队列内,被触发之后,将返航任务补充入分事件队列。
56.3、所述各个第二分线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
57.另外,当需要公布态势信息时,引擎服务主线程对外公布仿真过程所产生的仿真态势和控制报文。
58.步骤十一、所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
59.当仿真结束时,销毁第二分线程池,释放各个第二分线程和内存资源。
60.本实施例通过引擎服务主线程创建的第一分线程池中的每个第一分线程,对各个实体信息和仿真作战任务并行执行加载,实现了多线程并行加载与解析仿真作战方案,提高了较大数据量的仿真方案加载与解析速度;本发明通过引擎服务主线程仿真参数和时钟跳变时段集,实时生成当前仿真时刻,推进仿真进程,通过引擎服务主线程将所述事件队列中各个仿真作战任务分配给第二分线程池中各个第二分线程,得到各个第二分线程的分事件队列;各个第二分线程根据当前仿真时刻,对各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止,实现了时间和事件的混合推进机制,有效地减少了算力开支,节约了时间成本,提升了离散事件仿真效率,适用大规模事件的仿真,且不需要考虑网络延迟、时间统一等分布式并行效率的延迟因素;本实施例通过第一分线程,实现了实体信息和仿真作战任务的灵活加载,避免了所有实体信息和仿真作战任务的一次性加载,提高了作战仿真准备的效率,减少了不必要的内存开支。
61.本实施例可以采用下面实施例给出的基于混合推进的多线程并行作战仿真系统实现:另一实施例给出了一种基于混合推进的多线程并行作战仿真系统,该多线程并行作战仿真系统包括:第一创建模块,用于创建一个引擎服务主线程;第一获取模块,用于所述引擎服务主线程获取作战方案中的实体数量;第二创建模块,用于根据仿真主机核心数和实体数量,创建一个第一分线程池;并行执行加载模块,用于第一分线程池中各个第一分线程并行执行加载各个实体
的实体信息和仿真作战任务,并将所述各个实体的实体信息和仿真作战任务分别存储于实体队列和事件队列;第一销毁释放模块,用于所述引擎服务主线程销毁所述第一分线程池,以释放所述各个第一分线程;第二获取模块,用于所述引擎服务主线程获取所述事件队列中各个仿真作战任务的作战时间,以获取时钟跳变时段集;所述时钟跳变时段集中各个时钟跳变时段为在对应的时钟跳变时段内没有仿真作战任务;第三创建模块,用于所述引擎服务主线程根据所述仿真主机核心数和事件队列的大小,创建一个第二分线程池;分配模块,用于所述引擎服务主线程将所述事件队列中各个仿真作战任务分配给所述第二分线程池中各个第二分线程,得到所述各个第二分线程的分事件队列;设置模块,用于所述引擎服务主线程设置仿真参数;并根据所述仿真参数和时钟跳变时段集,确定当前仿真时刻;述仿真参数包括仿真时刻和仿真步长;并行执行仿真模块,用于所述各个第二分线程池根据所述当前仿真时刻,对所述各个第二分线程对应的分事件队列中各个仿真作战任务并行执行仿真,直至所述各个第二分线程执行完对应的分事件队列中各个仿真作战任务为止。并行执行仿真模块包括:第一设置子模块,用于所述引擎服务主线程设置历史事件队列初始为空;第一判断子模块,用于所述引擎服务主线程判断所述当前仿真时刻是否处于所述时钟跳变时段集内,如是,则获取所述当前仿真时刻对应的时钟跳变时段并传输给第二设置子模块;如否,则所述各个第二分线程并行从各自的分事件队列中逐个获取各自在所述当前仿真时刻对应的当前仿真作战任务,并将所述当前仿真时刻传输给第二判断子模块;所述第二设置子模块,用于所述引擎服务主线程将所述当前仿真时刻对应的时钟跳变时段的结束时间设置为当前仿真时刻并传输给所述第一判断子模块;所述第二判断子模块,用于所述各个第二分线程判断所述当前仿真时刻是否小于所述当前仿真作战任务的结束时刻,如是,则将所述当前仿真作战任务传输给并行调用子模块;如否,则将所述当前仿真作战任务移动到所述历史事件队列中,并所述当前仿真时刻传输给第三判断子模块;所述并行调用子模块,用于所述各个第二分线程依次并行调用仿真程序和并行执行仿真,并将并行执行仿真过程和结果缓存;所述第三判断子模块,用于所述各个第二分线程判断各自的分事件队列中所有仿真作战任务是否均已执行仿真,如是,则挂起对应的所述第二分线程并传输给第四判断子模块;如否,则所述各个第二分线程从各自的分事件队列中读取下一个仿真作战任务并传输给所述并行调用子模块;所述第四判断子模块,用于所述引擎服务主线程判断所有第二分线程是否均为挂起状态,如是,则所述引擎服务主线程根据预先设定的仿真步长,计算下一步仿真时刻并赋给所述当前仿真时刻,并传输给所述第一判断子模块;如否,则所述引擎服务主线程等待。
62.所述并行调用子模块,还用于当在并行执行仿真过程中出现提前完成的仿真作战任务时,则将所述仿真作战任务移动到历史事件队列中。
63.所述并行调用子模块还包括:第五判断子模块,用于当在并行执行仿真作战任务时,所述各个第二分线程判断是否产生新实体,并在判断为是时,将所述新实体补入到所述实体队列中;第六判断子模块,用于所述各个第二分线程判断所述新实体是否有需要执行的仿真作战任务,并在判断为是时,将所述新实体对应的仿真作战任务补入到对应的分事件队列中;确定子模块,用于所述引擎服务主线程获取所述新实体对应的仿真作战任务的作战时间,以更新所述时钟跳变时段集。
64.第二销毁释放模块,用于所述引擎服务主线程销毁所述第二分线程池,以释放所述各个第二分线程。
65.上述实施例所涉及到的专业术语和公式均可通用,这里不在赘述。
66.以上实施方式仅用以说明本发明实施例的技术方案而非限制,尽管参照以上较佳实施方式对本发明实施例进行了详细说明,本领域的普通技术人员应当理解,可以对本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献