一种指令调度方法、装置、设备及存储介质与流程

文档序号:21722623发布日期:2020-08-05 01:13阅读:130来源:国知局
一种指令调度方法、装置、设备及存储介质与流程

本发明涉及指令调度领域,特别是涉及一种适用于lora网络中的下行消息的指令调度方法、装置、设备及存储介质。



背景技术:

lora网络中有三种工作模式:classa、classb和classc。不同模式对于下行消息的触发时机要求不同,因此需要缓存下行给设备的消息,然后在合适的时机,将其下发给设备。

classb模式的终端为了获得服务端发起的下行消息,终端必须按要求开启一个固定间隔的接收窗口。如果ns(网络服务器)调度指令下行到网关后,此时节点classa模式的上行数据触发了下行,可能导致下行帧计数乱序。为了解决这个问题,需要尽量保证ns的调度间隔与节点的开窗间隔一致,或者提前一点点。classb的ping时隙周期最短为0.960s,所以对调度精度的要求也非常高。在下行消息的调度精度要求较高(例如毫秒级别)的情况下,极短时间间隔内高并发的下行消息调度,会由于频繁的网络请求延时导致精度不断降低。

因此,需要一种能够满足高精度调度需求的下行消息调度方案。



技术实现要素:

本发明的一个目的在于提供一种能够满足高精度调度需求的下行消息调度方案。

根据本发明的第一个方面,提出了一种指令调度方法,包括:从至少一个第二队列分别取出至少一个指令,所述第二队列包括一个或多个已执行指令及其执行次数,所述第二队列中的指令为需要应答的消息类型,同一第二队列中的指令对应于相同范围的接收端,不同第二队列中的指令对应于不同范围的接收端;根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,每个桶对应于一个调度时间区间,每个所述调度时间区间的长度不大于所述时长精度,不同桶对应的调度时间区间不重叠;对所述多个桶内的指令进行并行处理。

可选地,每个桶对应一个桶号,所述桶号是基于桶内指令的调度时间和所述时长精度得到的,所述对所述多个桶内的指令进行并行处理的步骤包括:设定第一数量个线程;按照桶号的大小顺序将所述多个桶分为至少一批,每批中的桶的数量小于或等于所述第一数量;将每批中的桶分配给所述第一数量个线程。

可选地,所述将每批中的桶分配给所述第一数量个线程的步骤包括:将每批中的第i个桶分配给第i个线程,i为小于或等于所述第一数量的自然数。

可选地,该方法还包括:在所述指令的执行次数小于所述第一预定阈值并且未接收到针对所述指令的应答的情况下,所述指令的执行次数加一,并将所述指令重新放回所述第二队列;以及/或者在所述指令的执行次数大于第一预定阈值,或者接收到针对所述指令的应答的情况下,将所述指令放入历史执行表中。

可选地,该方法还包括:在所述第二队列中不存在指令的情况下,从与所述第二队列对应的第一队列中取出至少一个指令,所述第一队列包括一个或多个未执行指令。

可选地,该方法还包括:在从所述第一队列取出的指令为不需要应答的消息类型的情况下,在取出该指令后,将该指令放入历史执行表中;以及/或者在从所述第一队列取出的指令为需要应答的消息类型的情况下,在取出该指令后,将该指令放入所述第二队列,该指令的执行次数加一。

可选地,所述指令分为业务指令和mac指令,与第二队列对应的第一队列包括业务指令队列和mac指令队列,所述从至少一个第二队列分别取出至少一个指令的步骤包括:从至少一个第二队列分别取出一个业务指令,该方法还包括:在所述第二队列中不存在业务指令的情况下,从与所述第二队列对应的业务指令队列中取出一个业务指令。

可选地,从至少一个第二队列分别取出至少一个指令的步骤还包括:在从所述第二队列或所述第二队列对应的业务指令队列取出一个业务指令后,继续从所述第二队列和/或与所述第二队列对应的mac指令队列取出一个或多个mac指令;以及/或者在所述第二队列且与所述第二队列对应的业务指令队列均不存在业务指令的情况下,从所述第二队列和/或与所述第二队列对应的mac指令队列取出一个或多个mac指令。

可选地,响应于取出的mac指令的总字节数大于或等于第二预定阈值,停止从所述第二队列和/或与所述第二队列对应的mac指令队列取出mac指令。

根据本发明的第二个方面,还提出了一种指令调度方法,包括:从至少一个第一队列分别取出至少一个指令,所述第一队列包括一个或多个未执行指令;根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,每个桶对应于一个调度时间区间,每个所述调度时间区间的长度不大于所述时长精度,不同桶对应的调度时间区间不重叠;对所述多个桶内的指令进行并行处理。

可选地,每个桶对应一个桶号,所述桶号是基于桶内指令的调度时间和所述时长精度得到的,所述对所述多个桶内的指令进行并行处理的步骤包括:设定第一数量个线程;按照桶号的大小顺序将所述多个桶分为至少一批,每批中的桶的数量小于或等于所述第一数量;将每批中的桶分配给所述第一数量个线程。

可选地,所述将每批中的桶分配给所述第一数量个线程的步骤包括:将每批中的第i个桶分配给第i个线程,i为小于或等于所述第一数量的自然数。

可选地,该方法还包括:在所述指令为不需要应答的消息类型的情况下,在取出所述指令后,将所述指令放入历史执行表。

可选地,该方法还包括:在所述指令为需要应答的消息类型的情况下,在取出所述指令后,将所述指令放入与所述第一队列对应的第二队列,所述指令的执行次数加一。

可选地,该方法还包括:在所述指令的执行次数大于第一预定阈值,或者接收到针对所述指令的应答的情况下,将所述指令放入历史执行表。

可选地,所述从至少一个第一队列分别取出至少一个指令的步骤包括:从至少一个第二队列分别取出至少一个指令,在所述第二队列中不存在所述指令的情况下,从与所述第二队列对应的第一队列取出至少一个指令。

可选地,所述指令分为业务指令和mac指令,所述第一队列包括业务指令队列和mac指令队列,从至少一个第二队列分别取出至少一个指令,在所述第二队列中不存在所述指令的情况下,从与所述第二队列对应的第一队列取出至少一个指令的步骤包括:从至少一个第二队列分别取出一个业务指令,在所述第二队列中不存在业务指令的情况下,从与所述第二队列对应的业务指令队列取出一个业务指令。

可选地,从至少一个第二队列分别取出至少一个指令,在所述第二队列中不存在所述指令的情况下,从与所述第二队列对应的第一队列取出至少一个指令的步骤还包括:在从所述第二队列或所述第二队列对应的业务指令队列取出一个业务指令后,继续从所述第二队列和/或与所述第二队列对应的mac指令队列取出一个或多个mac指令;以及/或者

在所述第二队列且与所述第二队列对应的业务指令队列均不存在业务指令的情况下,从所述第二队列和/或与所述第二队列对应的mac指令队列取出一个或多个mac指令。

可选地,响应于取出的mac指令的总字节数大于或等于第二预定阈值,停止从所述第二队列和/或与所述第二队列对应的mac指令队列取出mac指令。

可选地,同一第一队列中的指令对应于相同范围的接收端,不同第一队列中的指令对应于不同范围的接收端,并且/或者所述第一队列分为单播指令队列和多播指令队列,单播指令队列中的指令对应于单个终端,多播指令队列中的指令对应于多个终端。

根据本发明的第三个方面,还提出了一种指令调度方法,包括:根据指令对应的接收端,将生成的待执行的指令存储到对应的第一队列中,其中,同一第一队列中的指令对应于相同范围的接收端,不同第一队列中的指令对应于不同范围的接收端;从至少一个第一队列分别取出至少一个指令进行处理,其中,在取出的指令为不需要应答的消息类型的情况下,将取出的指令放入历史执行表,并且/或者,在取出的指令为需要应答的消息类型的情况下,将取出的指令放入第二队列且该指令的执行次数加一。

根据本发明的第四个方面,还提出了一种指令调度装置,包括:第一取出模块,用于从至少一个第二队列分别取出至少一个指令,所述第二队列包括一个或多个已执行指令及其执行次数,所述第二队列中的指令为需要应答的消息类型,同一第二队列中的指令对应于相同范围的接收端,不同第二队列中的指令对应于不同范围的接收端;第一划分模块,用于根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,每个桶对应于一个调度时间区间,每个所述调度时间区间的长度不大于所述时长精度,不同桶对应的调度时间区间不重叠;第一处理模块,用于对所述多个桶内的指令进行并行处理。

根据本发明的第五个方面,还提出了一种指令调度装置,包括:第二取出模块,用于从至少一个第一队列分别取出至少一个指令,所述第一队列包括一个或多个未执行指令;第二划分模块,用于根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,每个桶对应于一个调度时间区间,每个所述调度时间区间的长度不大于所述时长精度,不同桶对应的调度时间区间不重叠;第二处理模块,用于对所述多个桶内的指令进行并行处理。

根据本发明的第六个方面,还提出了一种指令调度装置,包括:指令存入模块,用于根据指令对应的接收端,将生成的待执行的指令存储到对应的第一队列中,其中,同一第一队列中的指令对应于相同范围的接收端,不同第一队列中的指令对应于不同范围的接收端;指令取出模块,用于从至少一个第一队列分别取出至少一个指令;以及指令处理模块,用于对取出的指令进行处理,其中,在取出的指令为不需要应答的消息类型的情况下,所述指令存入模块将取出的指令放入历史执行表,并且/或者,在取出的指令为需要应答的消息类型的情况下,所述指令存入模块将取出的指令放入第二队列且该指令的执行次数加一。

根据本发明的第七个方面,还提出了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如本发明第一个方面至第三个方面中任一个方面述及的方法。

根据本发明的第八个方面,还提出了一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如本发明第一个方面至第三个方面中任一个方面述及的方法。

本发明通过对需要待执行的指令进行有序存取,并且在本发明示例性实施例中通过对取出的指令通过分桶的方式进行并行处理,可以提高调度周期,满足高精度的调度需求。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1示出了根据本发明一实施例的指令存储方式的示意图。

图2示出了根据本发明一实施例的指令状态转移的示意图。

图3示出了根据本发明一实施例的指令划分到桶内的示意图。

图4示出了根据本发明一实施例的利用多个线程实现多个桶的并行处理的示意图。

图5示出了根据本发明一实施例的指令调度方法的示意性流程图。

图6示出了根据本发明另一实施例的指令调度方法的示意性流程图。

图7示出了根据本发明另一实施例的指令调度方法的示意性流程图。

图8示出了根据本发明一实施例的指令调度装置的结构的示意性方框图。

图9示出了根据本发明另一实施例的指令调度装置的结构的示意性方框图。

图10示出了根据本发明另一实施例的指令调度装置的结构的示意性方框图。

图11示出了根据本发明一实施例可用于实现上述指令调度方法的计算设备的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

【术语解释】

指令:延时任务。

指令池:缓存指令,并维护指令的状态,并提供历史指令的查询。

桶:同一调度时间区间内的指令集合。

时钟同步:集群内不同服务器的系统时间的同步,如可以同步为utc时间(世界统一时间)。

并发抢占:同一时间间隔有两个或多个事件发生,但只有一个成功。

redis:一个使用ansic编写的开源、支持网络、基于内存、可选持久性(英语:durability_(database_systems))的键值对存储数据库(英语:key-valuedatabase)。

lora:lora为英文longrange的缩写,为低功耗广域网路(lowpowerwideareanetwork,lpwan)通信技术的一种。以往,在lpwan产生之前,似乎只能在远距离以及低功耗两者之间做取舍。而lora无线技术的出现,改变了关于传输距离与功耗的折衷考虑方式,不仅可以实现远距离传输,并且同时兼具低功耗、低成本的优点。

lorawan:lorawan是用来定义网路的通讯协议和系统架构,是由lora联盟推出的低功耗广域网标准,可以有效实现lora物理层支持远距离通信。此协议和架构对于终端的电池寿命、网路容量、服务质量、安全性以及适合的应用场景,都有深远的影响。简而言之,lorawan其实就是一种网路(wan=wideareanetwork)。

deveui:终端设备的唯一编号,是一个类似ieeeeui64的全球唯一id,相当于是终端设备的mac地址。

【方案概述】

本发明提出了一种满足高精度调度需求的指令调度方案。本发明的指令调度方案可以用于对lora网络中的下行报文进行调度,以保障lorawan下行质量。也即本发明述及的指令可以是指网络服务器(ns)端存储的需要向lora节点延时发送的下行报文。

本发明的指令调度方案包括两部分:指令存取和指令调度。指令存取是指可以维护一个指令池,指令池中可以缓存需要下行给设备(如lora节点)的所有指令,可以基于预定的指令存取规则、状态转移规则,对指令池中指令的状态、有序性进行维护。指令调度主要是指通过分桶的方式提高调度周期,满足高精度的调度需求。

下面就本发明涉及的各方面作进一步描述。

【指令存取】

可以在服务器端维护一个指令池。指令池中可以存储所有需要执行(即下发)的指令,并且可以维护指令的状态,提供历史指令的查询功能。指令池中可以包括未执行指令队列(即本发明述及的第一队列)、执行中队列(即本发明述及的第二队列)以及历史执行表。

新生成的待执行(即待下发)的指令可以首先放入未执行指令队列。未执行指令队列中的指令均为待执行指令。本发明述及的指令可以分为单播指令和多播指令,单播指令是指对应于单个接收端的指令,多播指令是指对应于多个接收端的指令。相应地,未执行指令队列也可以分为单播指令队列和多播指令队列,单播指令队列中的指令对应于单个终端,多播指令队列中的指令对应于多个终端。

同一未执行指令队列中的指令对应于相同范围的接收端,不同未执行指令队列中的指令对应于不同范围的接收端。此处述及的范围是指需要将指令下发给哪些接收端。以指令是单播指令为例,可以根据单播指令所针对的设备标识符(deveui),将针对同一设备标识符的单播指令划分到同一未执行指令队列中。以指令是多播指令为例,可以根据多播指令所针对的多个接收端的组播地址(multicastaddress),将针对同一组播地址的多播指令划分到同一未执行指令队列中。

也就是说,可以根据单播指令所针对的设备标识符(deveui),针对每个设备(deveui)维护一个未执行指令队列。也可以根据多播指令所针对的多个接收端的组播地址(multicastaddress),针对每个组播地址维护一个未执行指令队列。新生成的指令可以添加到对应的队列队尾。由此,服务器端维护的指令池中可以包括多个未执行队列,每个未执行队列可以对应一个设备标识符,或对应一个组播地址。

本发明述及的指令可以分为业务指令(custom)和mac指令。可选地,可以根据指令类型,将未执行指令队列划分为业务指令队列和mac指令队列,业务指令队列中存储着未执行的业务指令,mac指令队列中存储着未执行的mac指令。如图1所示,以单播指令为例,针对设备标识符(deveui)维护的未执行指令队列可以按照指令类型分为业务指令队列和mac指令队列,新生成的指令可以添加到对应的队列队尾。其中,未执行队列中的指令可以是根据指令的调度时间进行排序的。

图2示出了根据本发明一实施例的指令状态转移的示意图。

根据是否需要接收端反馈确认消息,指令可以分为需要应答的消息类型和不需要应答的消息类型。如图2所示,无需应答(unconfirmed)类型的指令从未执行指令队列取出来之后就会放入历史执行表,历史执行表中的指令的状态为已处理。对于需要应答(confirmed)类型的指令(mac指令/业务指令),可以设置重试次数(即本发明述及的第一预定阈值)。需要应答(confirmed)类型的指令从未执行指令队列取出来之后会放入执行中队列,并记录其执行次数。在执行中队列中的指令的执行次数达到最大重试次数,或者收到针对该指令的应答后,该指令会被放入历史执行表。

在本发明的一个实施例中,可以先从执行中队列取出指令进行处理,此时该指令的执行次数加一,并将其重新放入执行中队列,直到该指令的执行次数大于第一预定阈值,或者接收到针对该指令的应答,才将该指令放入历史执行表。在执行中队列不存在指令的情况下,可以从未执行指令队列取出指令进行处理,在取出的指令为不需要应答类型的指令的情况下,可以将其放入历史执行表,在取出的指令为需要应答类型的指令的情况下,可以将其放入执行中队列,并记录该指令的执行次数。

以指令分为业务指令和mac指令为例,可以先从执行中队列获取业务指令:

如果执行中队列不存在业务指令,则从业务指令队列获取头指令(即第一个业务指令)。如果头指令存在,则将头指令取出进行处理,在该头指令是需要应答的消息类型的情况下,将该头指令放入执行中队列,并循环从执行中队列取出该指令进行处理,直至该指令的当前重试次数已经达到了最大重试次数,或者接收到针对该指令的应答,才将该指令放入历史执行表。在取出一个业务指令后,可以继续从执行中队列和/或mac指令队列中取出一个或多个mac指令。取出的业务指令和mac指令可以封装到一个下行报文中,通过执行本公开的调度方案发送给网关。换言之,取出的mac指令和业务指令可以作为整体(也即作为一个待调度的指令),通过执行本公开的调度方案发送给网关,其中,可以以业务指令的调度时间为准。由此,通过优先处理业务指令,可以减少网络下行次数,降低网络拥塞。例如,假设有20个mac指令(总字节为20字节)和2个业务指令待下行,通过优先调度业务指令则只需要两次下行(第1次下行:1个业务指令+15字节mac指令;第2次下行:1个业务指令+5字节mac指令),否则需要三次下行(第1次下行:20字节mac指令;第2次下行:1个业务指令;第3次下行:1个业务指令)。

如果头指令不存在,表明当前只剩下mac指令,则可以从执行中队列和/或mac指令队列中取出一个或多个mac指令进行处理。其中,取出的mac指令可以封装到一个下行报文中发送给网关。也即取出的mac指令可以作为一个待调度的指令,通过执行本公开的调度方案发送给网关。举例来说,对于lorawan协议而言,如果下行报文中只有mac指令,则报文中可以传输的mac指令的大小受限制于空口传输最大字节数。因此,可以从执行中队列和/或mac指令队列中取出多个mac指令进行处理。例如,可以首先从执行中队列取出多个不同类型的mac指令,如果取出的mac指令小于空口传输最大字节数,则可以继续从mac指令队列取出mac指令,直到取出的mac指令大于或等于空口传输最大字节数,停止取出mac指令。在从执行中队列取出的mac指令的当前重试次数已经达到了最大重试次数,或者接收到针对该mac指令的应答的情况下,可以将该mac指令放入历史执行表。对于从mac指令队列中取出的mac指令,在该mac指令是需应答的消息类型的情况下,可以将其放入执行中队列,并计数。

如果执行中队列存在业务指令,则循环从执行中队列获取业务指令进行处理,直至该指令的当前重试次数已经达到了最大重试次数,或者接收到针对该指令的应答,才将该指令放入历史执行表。其中,在取出业务指令后,可以继续从执行中队列和/或mac指令队列中取出一个或多个mac指令,并且取出的mac指令可以与取出的业务指令一同处理,即可以封装到一个下行报文中发送给网关。可以响应于取出的mac指令的总字节数大于或等于第二预定阈值,停止从第二队列和/或与第二队列对应的mac指令队列取出mac指令。其中,第二预定阈值可以根据实际情况确定。

以lorawan协议为例,在能够从执行中队列或业务指令队列取出一个业务指令的情况下,在继续从执行中队列和/或业务指令队列取出mac指令时,可以将取出的mac指令的字节数与foptslen(一般是15)进行比较,在取出的mac指令的字节数大于或等于15的情况下,可以停止取出mac的操作,反之可以继续取出mac指令。在无法从执行中队列和业务指令队列取出一个业务指令的情况下,在从执行中队列和/或业务指令队列取出mac指令时,可以将取出的mac指令的字节数与空口传输最大字节数进行比较,如果取出的mac指令的字节数大于或等于空口传输最大字节数,则可以停止取出mac的操作,反之可以继续取出mac指令。

在本发明中,指令池中的指令存在六种状态:待执行、执行中(包括重试)、已确认、重试达到最大次数、指令被取消和已处理(针对unconfirmed类型的指令)。其中,未执行指令队列中的指令的状态均为待执行,执行中队列中的指令的状态均为执行中,历史执行表中的指令的状态均为已处理。

对于属于需要应答的消息类型的指令,可以根据是否接收到针对该指令的应答,来确定该指令的状态是已确认还是未确认。作为本发明的一个示例,对于业务指令,可以通过当前上行帧计数器(ackfcntup)和指令池中元素的业务属性fcntup进行比较。理论情况下ackfcntup=fcntup+diff,其中diff为1。实际情况中,diff可以设置在可允许的误差范围内。对于mac指令,则可以根据节点上行的相应类型的mac指令来确定其状态是已确认还是未确认。例如,对于ns下行的devstatusreq指令,节点会响应devstatusans指令。

基于上述指令存取方案可以实现指令存储有序化,在应用于lorawan网络中时,还可以实现多种重复指令类型的存储,并且调度时可以优先读取业务指令。

【指令的调度】

本发明述及的指令具有一个对应的调度时间(即指令处理时间,也即指令下发时间),该调度时间可以由生成该指令的服务器确定。以本发明述及的指令是用于向lora节点发送的下行报文为例,网络服务器(ns)可以根据lora节点的下行报文接收窗口参数,为指令配置一个合适的调度时间。关于指令的调度时间的配置过程,可以参见服务器的现有下发逻辑,此处不再赘述。

为了满足高精度的调度需求,本发明在结合上述指令存取机制的基础上,提出了一种新的指令调度方案。可以根据时长精度和指令的调度时间,将从未执行队列和/或执行中队列取出的指令划分到多个桶内,每个桶对应一个调度时间区间,每个调度时间区间的长度不大于时长精度,不同桶对应的调度时间区间不重叠。

时长精度可以是根据实际精度需求设置的一个时长范围,如可以是10ms。关于未执行队列、执行中队列以及指令的取出方式可以参见上文相关描述,此处不再赘述。调度时间区间可以是根据桶内的指令的调度时间确定的一个时间区间,例如,对于桶a来说,调度时间区间可以是指桶a内所包括的指令的最小调度时间与最大调度时间之间的时间区间。另外,调度时间区间也可以是基于定义的方式规定的一个时间区间。以时长精度为10ms为例,可以定义第一个桶的调度时间区间为0-10(ms),第二个桶的调度时间区间为10-20(ms),以此类推。

作为本发明的一个示例,每个桶对应一个桶号,桶号可以是基于桶内指令的调度时间和时长精度得到的,例如可以将指令的调度时间除以时长精度,所得到的商就是指令所属的桶的桶号,属于同一桶号的指令就被划分到同一个桶中。如图3所示,“1000”、“1001”、“1100”就是桶号。

为了保证高精度的调度需求,可以对多个桶内的指令进行并行处理。其中,每个桶对应的调度时间区间的长度不大于时长精度,而时长精度可以是根据精度需求设置的一个长度,一般较小(如10ms)。因此,单个桶内的指令可以一次性取出(因为单个桶内的指令一般较少),同时执行。

在将取出的指令划分到多个桶内后,如果以时长精度作为调度周期进行单线程操作,一旦前一个指令执行时长超过调度周期,将导致后续的指令延迟。在测试中,调度的耗时平均在8~12ms(内网环境下耗时会更低),如果设置精度为10ms,很大概率导致任务处理延时,使得调度精度不断降低。

针对这种情况,本发明提出,可以通过并发抢占来提高调度周期,以避免这个问题,如可以设置多个线程进行并行处理。作为示例,可以设定第一数量个线程,并按照桶号的大小顺序将多个桶分为至少一批,每批中的桶的数量小于或等于第一数量,然后每批中的桶分配给第一数量个线程。例如,可以将每批中的第i个桶分配给第i个线程,i为小于或等于第一数量的自然数。由此,调度周期=线程数量*精度,通过增加调度周期,使得出现极短时间间隔内高并发的指令调度需求时,也不会由于网络请求延时而造成精度的降低。

如图4所示,可以设置5个线程并行处理。对于多个桶,可以按照桶号的大小顺序分配给这5个线程。可以看到,在5个并发条件下,thread1仅调度bucket:1000、bucket:1005和bucket:1010等任务桶。此时调度周期为50ms,已经足够避免调度周期过短导致后续任务推迟的问题。

在本发明的一个实施例中,可以用于对集群内的所有服务器提交的指令进行调度。其中,服务器提交的指令也可以视为延迟任务。在集群环境下,需要所有的服务器时间必须同步,以将不同服务器提交的指令的调度时间统一起来,保证调度的准确性。例如,可以将所有服务器的时间同步为utc时间,在所有服务器的时间同步后,对于在t1时刻提交的延时10s处理的指令和在t1+6s时刻提交的延时4s处理的指令,这两个指令都在t1+10s时刻执行调度,显然在同一个桶内。对于不恰好在同一时刻调度的指令,本发明通过设置时长精度,使得相邻时刻的指令也允许同时调度。例如假设时长精度为10ms,那么延时200ms和延时209ms的指令也能划分到同一桶内。

作为本发明的一个示例,可以将提交的指令的当前utc时间+延时时间作为该指令的调度时间,调度时间/精度获得的商就是该指令所对应的桶的位置(也即桶号)。如可以通过下式计算得到指令所属的桶:

index=(system.currenttimemillis()+delaymillis)/precision。其中,index为索引号,也即桶号,system.currenttimemillis表示当前utc时间,delaymillis表示延时时间,precision表示时长精度。

可选地,可以利用redis或者其他高效分布式存储服务对桶的数据结构进行存储。其中,桶号可以作为key(键),桶内的指令可以作为value(值)进行存储。在集群环境下,每一台应用服务器都会执行同一个任务桶的调度,为了避免任务桶被执行多次,可以在redis中执行lua脚本来实现原子操作,具体实现过程不再赘述。

至此,结合图1至图4就指令存取和指令调度两方面做了详细说明。如下将结合附图5-7就本发明的指令调度方法的实现流程进行说明。

【指令调度方法】

图5示出了根据本发明一实施例的指令调度方法的示意性流程图。其中,图5所示的方法可以由服务器执行,服务器可以与多个终端设备连接,向多个终端设备发送指令。例如,服务器可以是lora网络中的网络服务器(ns),ns可以通过基站与多个lora节点通信。网络服务器可以将需要向lora节点发送的指令(即下行报文)按照上文述及的指令存取方式进行缓存。

如图5所示,在步骤s510,从至少一个第二队列分别取出至少一个指令。

关于第二队列可以参见上文相关描述,此处不再赘述。作为示例,可以从每个第二队列中分别取出一个指令。在取出的指令的执行次数小于第一预定阈值并且未接收到针对指令的应答的情况下,指令的执行次数加一,并将指令重新放回第二队列。在取出的指令的执行次数大于第一预定阈值,或者接收到针对指令的应答的情况下,将指令放入历史执行表中。

在第二队列中不存在指令的情况下,可以从与第二队列对应的第一队列中取出至少一个指令。关于第一队列可以参见上文相关描述,此处不再赘述。其中,在从第一队列取出的指令的总字节大于第二预定阈值的情况下,可以将指令的状态设置为取消调度。

在从第一队列取出的指令为不需要应答的消息类型的情况下,在取出该指令后,将该指令放入历史执行表中。并且/或者,在从第一队列取出的指令为需要应答的消息类型的情况下,在取出该指令后,将该指令放入第二队列,该指令的执行次数加一。

在本发明的一个实施例中,指令可以分为业务指令和mac指令,第一队列可以包括业务指令队列和mac指令队列。可以首先从至少一个第二队列分别取出一个业务指令,在第二队列中不存在业务指令的情况下,再从与第二队列对应的业务指令队列中取出一个业务指令。

在从第二队列或第二队列对应的业务指令队列取出一个业务指令后,可以继续从第二队列和/或与第二队列对应的mac指令队列取出一个或多个mac指令,并且所取出的mac指令和业务指令可以封装到一个下行报文中,通过执行本公开的调度方案,下发给网关。

在第二队列且与第二队列对应的业务指令队列均不存在业务指令的情况下,可以从第二队列和/或与第二队列对应的mac指令队列取出一个或多个mac指令,并且所取出的mac指令可以封装到一个下行报文中,通过执行本公开的调度方案,下发给网关。

关于指令取出涉及的细节可以参见上文相关描述,此处不再赘述。

在步骤s520,根据指令的调度时间和时长精度,将取出的指令划分到多个桶内。关于将取出的指令划分到多个桶内的实现过程,可以参见上文相关描述,此处不再赘述。

在步骤s530,对多个桶内的指令进行并行处理。

关于并行处理的具体实现可以参见上文相关描述,此处不再赘述。

图6示出了根据本发明另一实施例的指令调度方法的示意性流程图。其中,图6所示的方法可以由服务器执行,服务器可以与多个终端设备连接,向多个终端设备发送指令。例如,服务器可以是lora网络中的网络服务器(ns),ns可以通过基站与多个lora节点通信。网络服务器可以将需要向lora节点发送的指令按照上文述及的指令缓存方式进行缓存。

参见图6,在步骤s610,从至少一个第一队列分别取出至少一个指令。

在从第一队列取出的指令为不需要应答的消息类型的情况下,可以在取出指令后,将指令放入历史执行表。在从第一队列取出的指令为需要应答的消息类型的情况下,可以在取出指令后,将指令放入与第一队列对应的第二队列,指令的执行次数加一。

作为本发明的一个示例,可以首先从至少一个第二队列分别取出至少一个指令,对于不存在指令的第二队列,再从与该第二队列对应的第一队列中取出至少一个指令。

关于第一队列、第二队列以及与指令取出相关的细节可以参见上文相关描述,此处不再赘述。

在步骤s620,根据指令的调度时间和时长精度,将取出的指令划分到多个桶内。关于将取出的指令划分到多个桶内的实现过程,可以参见上文相关描述,此处不再赘述。

在步骤s630,对多个桶内的指令进行并行处理。

关于并行处理的具体实现可以参见上文相关描述,此处不再赘述。

图7示出了根据本发明另一实施例的指令调度方法的示意性流程图。其中,图7所示的方法可以由服务器执行,服务器可以与多个终端设备连接,向多个终端设备发送指令。例如,服务器可以是lora网络中的网络服务器(ns),ns可以通过基站与多个lora节点通信。网络服务器可以将需要向lora节点发送的指令按照上文述及的指令缓存方式进行缓存。

参见图7,在步骤s710,根据指令对应的接收端,将生成的待执行的指令存储到对应的第一队列中。

与指令的存储相关的细节可以参见上文相关描述,此处不再赘述。

在步骤s720,从至少一个第一队列分别取出至少一个指令进行处理。

在从第一队列取出的指令为不需要应答的消息类型的情况下,可以在取出指令后,将指令放入历史执行表。在从第一队列取出的指令为需要应答的消息类型的情况下,可以在取出指令后,将指令放入与第一队列对应的第二队列,指令的执行次数加一。

作为本发明的一个示例,可以首先从至少一个第二队列分别取出至少一个指令,对于不存在指令的第二队列,再从与该第二队列对应的第一队列中取出至少一个指令。

关于第一队列、第二队列以及与指令取出相关的细节可以参见上文相关描述,此处不再赘述。

对于取出后的指令,可以根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,并对多个桶内的指令进行并行处理。具体处理过程可以参见上文相关描述,此处不再赘述。

需要说明的是,对于从第二队列中取出的指令,在指令的执行次数小于第一预定阈值并且未接收到针对该指令的应答的情况下,可以循环将其取出、处理,例如可以循环将其取出并划分到桶内进行处理。而后续循环取出进行桶的划分时,该指令的调度时间可以由服务器重新设定,也可以使用之前的调度时间,对此本发明不做限定。

本发明述及的指令可以是由单个服务器生成的,也可以是由集群环境中的多个服务器生成的,在指令包括由集群环境中的多个服务器生成的指令的情况下,可以首先将多个服务器的时间进行同步,如可以同步为utc时间。可以将服务器提交指令的时间+指令的延时时间所得到的结果作为指令的调度时间。例如,对于在t1时刻(已同步后的时间)提交的延时10s处理的指令(也即延时任务),其调度时间为“t1+10s”。

并且在指令包括由集群环境中的多个服务器生成的指令的情况下,在对多个桶内的指令进行并行处理时,可以将不同的服务器视为不同的线程,将多个桶分配给多个服务器进行并行处理,单个桶交由同一服务器处理。具体分配过程可以参见上文相关描述,此处不再赘述。

【指令调度装置】

本发明还可以实现为一种指令调度装置。

图8示出了根据本发明一实施例的指令调度装置的结构的示意性方框图。其中,指令调度装置的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图8所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

指令调度装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。

参见图8,指令调度装置800包括第一取出模块810、第一划分模块820以及第一处理模块830。

第一取出模块810用于从至少一个第二队列分别取出至少一个指令,第二队列包括一个或多个已执行指令及其执行次数,第二队列中的指令为需要应答的消息类型,同一第二队列中的指令对应于相同范围的接收端,不同第二队列中的指令对应于不同范围的接收端。

关于第二队列可以参见上文相关描述,此处不再赘述。作为示例,第一取出模块810可以从每个第二队列中分别取出一个指令。在取出的指令的执行次数小于第一预定阈值并且未接收到针对指令的应答的情况下,指令的执行次数加一,并将指令重新放回第二队列。在取出的指令的执行次数大于第一预定阈值,或者接收到针对指令的应答的情况下,将指令放入历史执行表中。

在第二队列中不存在指令的情况下,第一取出模块810可以从与第二队列对应的第一队列中取出至少一个指令。关于第一队列可以参见上文相关描述,此处不再赘述。其中,在从第一队列取出的指令的总字节大于第二预定阈值的情况下,可以将指令的状态设置为取消调度。

在从第一队列取出的指令为不需要应答的消息类型的情况下,在取出该指令后,将该指令放入历史执行表中。并且/或者,在从第一队列取出的指令为需要应答的消息类型的情况下,在取出该指令后,将该指令放入第二队列,该指令的执行次数加一。

在本发明的一个实施例中,指令可以分为业务指令和mac指令,第一队列可以包括业务指令队列和mac指令队列。可以首先从至少一个第二队列分别取出一个业务指令,在第二队列中不存在业务指令的情况下,再从与第二队列对应的业务指令队列中取出一个业务指令。

在从第二队列或第二队列对应的业务指令队列取出一个业务指令后,可以继续从第二队列和/或与第二队列对应的mac指令队列取出一个或多个mac指令,并且所取出的mac指令和业务指令可以封装到一个下行报文中,通过执行本公开的调度方案,下发给网关。

在第二队列且与第二队列对应的业务指令队列均不存在业务指令的情况下,可以从第二队列和/或与第二队列对应的mac指令队列取出一个或多个mac指令,并且所取出的mac指令可以封装到一个下行报文中,通过执行本公开的调度方案,下发给网关。

关于指令取出涉及的细节可以参见上文相关描述,此处不再赘述。

第一划分模块820用于根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,每个桶对应于一个调度时间区间,每个调度时间区间的长度不大于时长精度,不同桶对应的调度时间区间不重叠。第一处理模块830用于对多个桶内的指令进行并行处理。关于并行处理的具体实现可以参见上文相关描述,此处不再赘述。

图9示出了根据本发明另一实施例的指令调度装置的结构的示意性方框图。其中,指令调度装置的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图9所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

指令调度装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。

参见图9,指令调度装置900包括第二取出模块910、第二划分模块920以及第二处理模块930。

第二取出模块910用于从至少一个第一队列分别取出至少一个指令,第一队列包括一个或多个未执行指令。

在从第一队列取出的指令为不需要应答的消息类型的情况下,可以在取出指令后,将指令放入历史执行表。在从第一队列取出的指令为需要应答的消息类型的情况下,可以在取出指令后,将指令放入与第一队列对应的第二队列,指令的执行次数加一。

作为本发明的一个示例,第二取出模块910可以首先从至少一个第二队列分别取出至少一个指令,对于不存在指令的第二队列,再从与该第二队列对应的第一队列中取出至少一个指令。

关于第一队列、第二队列以及与指令取出相关的细节可以参见上文相关描述,此处不再赘述。

第二划分模块920用于根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,每个桶对应于一个调度时间区间,每个调度时间区间的长度不大于时长精度,不同桶对应的调度时间区间不重叠。

第二处理模块930用于对多个桶内的指令进行并行处理。关于将取出的指令划分到多个桶内的实现过程,可以参见上文相关描述,此处不再赘述。

图10示出了根据本发明另一实施例的指令调度装置的结构的示意性方框图。其中,指令调度装置的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图10所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

指令调度装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。

参见图10,指令调度装置1000包括指令存入模块1010和指令取出模块1020以及指令处理模块1030。

指令存入模块1010用于根据指令对应的接收端,将生成的待执行的指令存储到对应的第一队列中,其中,同一第一队列中的指令对应于相同范围的接收端,不同第一队列中的指令对应于不同范围的接收端。与指令的存储相关的细节可以参见上文相关描述,此处不再赘述。

指令取出模块1020用于从至少一个第一队列分别取出至少一个指令。在从第一队列取出的指令为不需要应答的消息类型的情况下,可以在取出指令后,将指令放入历史执行表。在从第一队列取出的指令为需要应答的消息类型的情况下,可以在取出指令后,将指令放入与第一队列对应的第二队列,指令的执行次数加一。

作为本发明的一个示例,指令取出模块1020可以首先从至少一个第二队列分别取出至少一个指令,对于不存在指令的第二队列,再从与该第二队列对应的第一队列中取出至少一个指令。

关于第一队列、第二队列以及与指令取出相关的细节可以参见上文相关描述,此处不再赘述。

在取出的指令为不需要应答的消息类型的情况下,指令存入模块1010将取出的指令放入历史执行表,并且/或者,在取出的指令为需要应答的消息类型的情况下,指令存入模块1010将取出的指令放入第二队列且该指令的执行次数加一。

指令处理模块1030用于对取出的指令进行处理。对于取出后的指令,可以根据指令的调度时间和时长精度,将取出的指令划分到多个桶内,并对多个桶内的指令进行并行处理。具体处理过程可以参见上文相关描述,此处不再赘述。

【计算设备】

图11示出了根据本发明一实施例可用于实现上述指令调度方法的计算设备的结构示意图。

参见图11,计算设备1100包括存储器1110和处理器1120。

处理器1120可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器1120可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、数字信号处理器(dsp)等等。在一些实施例中,处理器1120可以使用定制的电路实现,例如特定用途集成电路(asic,applicationspecificintegratedcircuit)或者现场可编程逻辑门阵列(fpga,fieldprogrammablegatearrays)。

存储器1110可以包括各种类型的存储单元,例如系统内存、只读存储器(rom),和永久存储装置。其中,rom可以存储处理器1120或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器1110可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(dram,sram,sdram,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器1110可以包括可读和/或写的可移除的存储设备,例如激光唱片(cd)、只读数字多功能光盘(例如dvd-rom,双层dvd-rom)、只读蓝光光盘、超密度光盘、闪存卡(例如sd卡、minsd卡、micro-sd卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。

存储器1110上存储有可执行代码,当可执行代码被处理器1120处理时,可以使处理器1120执行上文述及的指令调度方法。

上文中已经参考附图详细描述了根据本发明的指令调度方法、指令调度装置及计算设备。

此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。

或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。

附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1