CN110998521B - 定义线程规范的系统和方法 - Google Patents
定义线程规范的系统和方法 Download PDFInfo
- Publication number
- CN110998521B CN110998521B CN201880052775.XA CN201880052775A CN110998521B CN 110998521 B CN110998521 B CN 110998521B CN 201880052775 A CN201880052775 A CN 201880052775A CN 110998521 B CN110998521 B CN 110998521B
- Authority
- CN
- China
- Prior art keywords
- functions
- function
- subset
- instantiated
- instructions
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 230000006870 function Effects 0.000 claims abstract description 591
- 230000003068 static effect Effects 0.000 claims abstract description 53
- 238000004590 computer program Methods 0.000 claims 1
- 238000012545 processing Methods 0.000 description 54
- 230000008569 process Effects 0.000 description 27
- 230000015654 memory Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 10
- 230000007613 environmental effect Effects 0.000 description 5
- 230000001934 delay Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000004806 packaging method and process Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 101100217298 Mus musculus Aspm gene Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
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/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
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
公开了用于在部分无序执行环境中执行任务的方法和系统。接收指示用于在环境内执行的任务和任务类型的输入。可以选择与任务和任务类型相关联的函数。可以为每个函数生成指示该函数被配置用于静态调度还是动态调度的指令。可以生成用于实例化每个函数的时间表,其中根据函数在列表内的位置来调度被配置用于静态调度的函数以进行实例化,并且基于函数在其中被实例化的环境以及函数集合的子集的函数在列表内的位置来调度被配置用于动态调度的函数以在运行时进行实例化。然后可以使用函数和列表来生成线程规范。线程规范可以被传输到远程设备。
Description
对相关申请的交叉引用
本申请要求于2017年9月29日提交的美国临时申请号62/565,996和于2018年8月20日提交的美国非临时申请号16/105,842的权益和优先权,这两个申请都通过引用整体并入本文,用于所有目的。
本申请明确地通过引用整体并入于2017年1月5日提交的标题为“SYSTEMS ANDMETHODS FOR BUILDING APPLICATIONS USING BUILDING BLOCKS LINKABLE WITHMETADATA”的美国申请序列No.15/399,565;以及于2017年1月5日提交的标题为“SYSTEMSAND METHODS FOR BUILDING APPLICATIONS USING BUILDING BLOCKS LINKABLE WITHMETADATA”的美国申请序列No.15/399,560,用于所有目的。此外,本申请明确地通过引用整体并入于2015年11月5日提交的标题为“SINGLEUNITOFWORK”的美国申请序列No.14/934,061;以及于2007年9月7日提交的标题为“USER INTERFACE FOR HUMAN INVOLVED BUSINESSPROCESSES”的美国申请序列No.11/851,456,用于所有目的。
技术领域
本发明一般而言涉及定义和调度线程以供执行,并且更具体地涉及生成和调度线程以供部分无序执行环境中的一个或多个处理器执行。
背景技术
线程通常被约束为按照严格的时间表执行。当处理系统经历其中在执行特定线程时存在延迟和/或错误的停顿(或气泡)时,后续线程可能也会延迟。例如,需要当前正在被写入的寄存器中的数据的线程可以迫使处理系统使线程停顿,直到该寄存器可用于被加载为止。因此,即使线程中的小延迟可能也会造成延迟每个后续线程的波纹效应,而不管后续线程是否依赖于该被延迟的线程。在各种环境中,尤其是在其中可以为特定线程分配严格的处理时间的时间敏感环境中,这可能会带来问题。
在某些执行环境中,停顿(stall)可能阻止整个任务执行。例如,在时间敏感环境中,无法在分配的阶段内执行可能会迫使中断,该中断阻止其余线程执行。线程的集合可能由于停顿的线程而失败。线程中的停顿或故障可能会具有级联效应,就算不造成系统崩溃,也会减少环境能够在处理窗口内执行的线程的数量。例如,资源耗尽(即,抖动)、无限循环子任务、存储器错误或预取错误可能会阻止线程适当地实例化或终止。因此,线程可能不会终止,并且可能会阻止后续线程实例化,从而造成系统崩溃。
本领域中需要与定义和调度线程以供执行相关的改进的方法和系统。
发明内容
在实施例中,本公开提供了在提供任务的容错执行的部分无序执行环境中调度线程。对于给定的线程,可以定义一个或多个函数来执行线程的一部分。这一个或多个函数可以被动态地调度以在部分无序执行环境中执行,该部分无序执行环境对具有特定依赖性的函数实行严格的调度,同时使得具有很少依赖性或没有依赖性的函数能够进行许可的无序执行。如果函数中发生停顿,那么在迫使停顿的函数等待的同时,具有许可的无序指定的可用函数可以代替停顿的函数来执行。然后,函数可以根据松散的调度继续执行,从而防止停顿的函数使线程崩溃。
本公开的一些实施例提供了一种在部分无序执行环境中调度函数以用于执行任务的方法。该方法包括:接收指示用于在一个或多个环境内执行的任务的输入;接收指示任务的类型的输入,该类型与函数的集合相关联;接收识别该函数集合的子集的输入,该函数集合的子集被配置为执行任务;为该函数集合的子集的每个函数生成指令,该指令指示函数被配置用于静态调度或动态调度;生成指示用于实例化该函数集合的子集的每个函数的时间表的列表,其中基于与该函数集合的子集的每个函数对应的指令来调度函数以进行实例化,使得:根据函数集合的子集的函数在列表内的位置,调度函数集合的子集中被配置用于静态调度的函数以进行实例化;基于函数在其中被实例化的环境和函数集合的子集的函数在列表内的位置,调度函数集合的子集中包括动态调度的函数以在运行时进行实例化;基于列表,将函数集合的子集包装为任务的规范;传输规范,其中规范被配置为基于列表的时间表来实例化每个函数以执行任务。
本公开的一些实施例提供了一种在部分无序执行环境中调度函数以执行任务的系统。该系统包括一个或多个处理器;以及非暂态机器可读存储介质,其包含指令,该指令在由一个或多个处理器执行时使一个或多个处理器执行操作,操作包括:接收指示用于在一个或多个环境内执行的任务的输入;接收指示任务的类型的输入,该类型与函数的集合相关联;接收识别该函数集合的子集的输入,该函数集合的子集被配置为执行任务;为该函数集合的子集的每个函数生成指令,该指令指示函数被配置用于静态调度或动态调度;生成指示用于实例化该函数集合的子集的每个函数的时间表的列表,其中基于与该函数集合的子集的每个函数对应的指令来调度函数以进行实例化,使得:根据函数集合的子集的函数在列表内的位置,调度函数集合的子集中被配置用于静态调度的函数以进行实例化;基于函数在其中被实例化的环境和函数集合的子集的函数在列表内的位置,调度函数集合的子集中包括动态调度的函数以在运行时进行实例化;基于列表,将函数集合的子集包装为任务的规范;传输规范,其中规范被配置为基于列表的时间表来实例化每个函数以执行任务。
本公开的一些实施例提供了一种包含指令的非暂态机器可读存储介质,指令在由一个或多个处理器执行时使一个或多个处理器执行操作,操作包括:接收指示用于在一个或多个环境内执行的任务的输入;接收指示任务的类型的输入,该类型与函数的集合相关联;接收识别该函数集合的子集的输入,该函数集合的子集被配置为执行任务;为该函数集合的子集的每个函数生成指令,该指令指示函数被配置用于静态调度或动态调度;生成指示用于实例化该函数集合的子集的每个函数的时间表的列表,其中基于与该函数集合的子集的每个函数对应的指令来调度函数以进行实例化,使得:根据函数集合的子集的函数在列表内的位置,调度函数集合的子集中被配置用于静态调度的函数以进行实例化;基于函数在其中被实例化的环境和函数集合的子集的函数在列表内的位置,调度函数集合的子集中包括动态调度的函数以在运行时进行实例化;基于列表,将函数集合的子集包装为任务的规范;传输规范,其中规范被配置为基于列表的时间表来实例化每个函数以执行任务。
根据下文提供的详细描述,本公开的进一步应用领域将变得明显。应当理解的是,详细描述和具体示例虽然指示了各种实施例,但是仅意图用于说明的目的,而并非意图必然限制本公开的范围。
附图说明
结合附图描述本公开:
图1图示了用于定义和调度线程的示例性分布式环境。
图2图示了线程编写器的示例性框图。
图3A图示了实现线程集合的示例性流水线。
图3B图示了线程集合的示例性执行次序。
图4A图示了在时间敏感执行环境中实现线程集合的示例性流水线。
图4B图示了由于特定故障而导致的线程集合的示例性执行次序。
图5A图示了在部分无序执行环境中实现线程集合的示例性流水线。
图5B图示了通过部分无序地执行线程来维持容错能力的示例性执行次序。
图6图示了描绘用于生成线程规范的过程的示例性流程图。
图7图示了描绘用于定义用于实现线程的函数的时间表的过程的示例性流程图。
在附图中,相似的部件和/或特征可以具有相同的附图标记。另外,可以通过在附图标记之后加上破折号和在相似部件之间进行区分的第二标记来区分相同类型的各种部件。如果在说明书中仅使用第一附图标记,那么描述适用于具有相同的第一附图标记的相似部件中的任何部件,而与第二附图标记无关。
具体实施方式
随后的描述仅提供(一个或多个)优选的示例性实施例,并且无意于限制本公开的范围、适用性或配置。更确切地说,(一个或多个)优选示例性实施例的随后描述将为本领域技术人员提供用于实现优选示例性实施例的可行描述。应该理解的是,在不脱离所附权利要求书中阐述的精神和范围的情况下,可以对元件的功能和布置进行各种改变。应该理解的是,可以在没有用于提供对本文所述实施例的透彻理解的具体细节的情况下实践实施例。例如,电路可以以框图示出,以免以不必要的细节模糊实施例。在其它情况下,众所周知的电路、处理、算法、结构和技术可以示为没有不必要的细节,以避免模糊实施例。
公开了定义和调度线程以供一个或多个处理器执行的方法和系统。线程可以包括一个或多个在被执行时完成任务的指令。线程可以是离散的执行单元(例如,包括指令、输入、函数和/或执行线程所需的内容)。在一些示例中,线程模板可以使没有技术能力的用户能够定义线程。一旦定义,线程就可以被访问以在一个或多个处理环境内执行。
在一些示例中,可以通过选择与任务相关联的线程模板来定义线程。例如,管理员可以选择线程模板来配置特定任务以供执行。可以选择与线程模板关联的特定函数来实现任务。在一些示例中,可以向函数指派调度指令,该调度指令将函数指定为动态的(例如,该函数不依赖于其它函数)或静态的(例如,该函数依赖于其它函数并且其它函数依赖于该函数)。调度指令可以被用于生成执行时间表,该执行时间表指示可以执行函数以实现任务的次序。
可以在运行时调度与线程相关联的函数,以改进处理资源利用率、容错和/或故障恢复。在一些示例中,在函数执行期间检测到特定事件(例如,故障、意外输入、中断、异常等)可以触发基于与线程相关联的调度指令来重新调度一个或多个函数。例如,特定函数可以挂起,从而等待从被锁定的存储器寄存器中加载数据。在特定函数等待被锁定的寄存器的同时,可以执行被指派了动态调度指令的函数。在函数终止之后,控制权可以返回到特定函数。
可以使用被选择以实现线程的函数和对应的调度指令来生成线程规范。线程规范可以包括函数、执行时间表、元数据和/或其它指令,以使线程规范能够在一个或多个环境中的任何一个环境中执行。例如,线程规范可以(例如,从本地或远程存储器)被访问并在多个不同的处理环境中的任何一个处理环境上执行以提供线程的任务。在一些示例中,线程规范可以与其它线程规范组合以提供复杂性。
图1描绘了实现线程的定义和调度的示例性分布式执行环境100的框图。处理资源调度器104可以提供用于定义执行以提供输出或结果的线程和函数的指令(和/或指南)。处理资源调度器104可以提供实现静态调度(例如,线程/函数可以以预定次序执行)、部分动态调度(例如,一些线程/函数可以以预定次序执行并且其它线程/函数可以在运行时被调度)或动态调度(例如,线程/函数可以以运行时确定的次序执行)的指令。处理资源调度器104可以从包括类别108、函数和图像112以及数据层116的多个数据库和网络中获取输入,以提供数据中的一些或全部以实例化线程和/或函数。
类别108可以包括与任务相关联的模板。在一些示例中,类别108可以包括使得处理资源调度器104能够将线程分解为离散函数的数据。例如,处理资源调度器104可以从类别108获得特定线程模板,以执行两个网络设备之间的握手协议。处理资源调度器104可以使用函数和图像112来定义实现特定握手协议(例如,传输层安全性(TLS))的函数。数据层116可以提供特定的代码、数据和/或其它输入以完成对(一个或多个)TLS握手线程的预配置(provisioning)。
在其它示例中,类别108可以使得能够选择与任务相关联的线程模板。类别108可以被用于识别适用于所选择的线程模板的预定义函数集合,这些预定义函数可以被选择以提供线程的操作。可以选择预定义函数集合中的一个、一些或全部预定义函数。例如,函数集合可以包括函数的可选、冗余和/或替代版本。处理资源调度器104可以选择可以应用于任务的(一个或多个)特定函数。函数可以被修改以提供如处理资源调度器104所指示并使用来自函数和图像112以及数据层116的数据的特定函数。
处理资源调度器104可以由一个或多个设备经由网络120(例如,局域网、广域网、互联网等)访问。处理资源调度器104可以从网页(例如,用户输入、爬虫等)和远程数据存储库128获得资源/数据。线程规范132可以包括已经使用环境100生成的打包的线程。线程规范132可以为处理资源调度器104提供生成新线程和/或线程模板的数据(例如,分析先前生成的线程及其主要组成部分)。例如,处理资源调度器104可以连接到在处理资源调度器104未知的特定密码协议下操作的另一个设备。调度器可以使用线程规范132的先前定义的函数和线程来定义新线程,以使得能够解码使用特定密码协议加密的数据。
终端用户144、管理员140和开发人员136可以各自包括一个或多个计算设备,该一个或多个计算设备连接到网络并向处理资源调度器104提供输入和/或接收来自调度器104的输出。在一些示例中,终端用户144、管理员140和/或开发人员136可以通过网页124、虚拟专用网络或通过直接连接(例如,对等网络等)连接到处理资源调度器104。
开发人员136可以生成新的线程规范132;线程模板、函数等,以使得管理员和/或终端用户能够生成新的线程规范。例如,管理员140可以提供指令给处理资源调度器104,以使用由开发人员136生成的线程模板、函数等来组装新的线程规范,而无需提供附加的编程代码。管理员可以附加地修改线程模板或函数(例如,使用图形用户界面)以设计针对特定终端用户或执行环境的线程规范。
终端用户144可以包括一个或多个计算设备,该一个或多个计算设备提供执行每个函数/线程的环境。例如,一个或多个终端用户144可以获得完整的线程规范以执行线程。在一些示例中,线程规范可以在多个终端用户之间划分,使得一些函数可以由一个终端用户执行,而其它函数可以由其他终端用户执行。在那些示例中,线程级并行化可以进一步被分布式进程利用,以提高线程可以被执行的速度。在一些示例中,终端用户可以由函数指导以提供输入和/或处理细节,作为执行线程的一部分。在其它示例中,线程规范可以是由终端用户执行的工作流。例如,管理员可以定义函数(在这个示例中函数可以包括图形用户界面、指令等),这些函数可以以特定的时间表呈现给终端用户,从而使得终端用户能够执行一系列步骤,其中每个步骤由函数定义。一旦执行了每个函数并完成了任务,输出(如果适用的话)就可以被传输到处理资源调度器104、存储在数据存储库128中和/或传输到管理员140。
图2描绘了线程编写器200的示例性框图。线程编写器200可以包括用于生成线程或线程规范的指令、线程模板/子模板以及任何其它数据和/或软件。在一些示例中,线程编写器可以是处理资源调度器104的一部分或驻留在与处理资源调度器104相同的硬件内。在其它示例中,线程编写器200可以分布在多个设备上。可以使用在选择类别108时检索到的一个或多个线程模板216来生成线程规范132。类别108的选择还可以提供一个或多个函数244,该一个或多个函数244包括用于实现线程的功能的步骤。
数据层116可以包括链接236、技术项目228、以及代码220、数据库查询232和网页224。代码220包括用于生成线程和线程模板、调度线程和函数以供执行以及用于预配置线程和函数的指令。技术项目228可以包括与函数、线程或线程模板相关的数据结构、函数和调度信息。链接236在运行时向线程和函数提供数据。例如,可以间接地提供线程或函数的一些方面(例如,函数可以被声明和/或调用,但是不被实现)。在那些示例中,链接可以嵌入到线程和/或函数的一部分中。在运行时,将解析与链接对应的详细信息以使得函数能够被执行。还可以通过链接间接地提供其它数据(例如,用户或机器输入、变量引用、数据类型、类、对象、函数、图像等)。
数据库查询232可以包括查询、查询模板和/或先前执行的模板的历史。例如,线程可以作为函数的一部分执行查询以获得数据或操纵数据库内的数据。网页224包括到线程规范和线程/函数模板的远程接口。网页224可以被用作远程访问以生成线程规范和/或获得线程规范以供远程执行或在另一个设备上执行。在一些示例中,线程编写器200可以驻留在瘦客户端上,该瘦客户端经由一个或多个网页224托管的web应用而被远程访问。
图3A描绘了图示用于执行线程规范的时间表的示例性流水线300-1。线程规范可以包括被调度为经由流水线执行函数的函数308。可以根据系统的处理阶段(例如,单独的处理单元)304来调度函数以用于执行。线程和/或函数可以将处理阶段用于初始化(诸如312)和终止(诸如316)。此外,线程和/或函数可以将一个或多个处理阶段用于其它任务(例如,从寄存器/高速缓存加载、写入寄存器/高速缓存、接收用户输入、无操作指令(NOP)等)。取决于每个函数可以如何依赖于其它函数,可以有序或无序地处理函数。
流水线300-1描绘了在七个阶段中处理的线程规范。在一些示例中,线程可以由管理员根据线程模板定义。在那些示例中,线程模板可以由管理员选择,并且线程的每个函数由管理员定义和/或修改,使得每个函数的执行完成管理员想要的目标。例如,管理员可以使用用户界面来定义函数的功能和/或用于该函数的用户界面。函数的用户界面可以指导终端用户(例如,可以提供函数的输入和其它数据的对象)执行函数的功能。流水线300-1描绘了通过六个函数的执行而执行的线程,每个函数均按次序执行。流水线300-1使得函数能够在前一函数的终止阶段期间实例化,以避免浪费阶段(例如,防止处理停机时间)。在最后一个函数终止后,线程规范完成并且过程可以终止、执行后续线程或等待另外的线程被分配给调度器。
图3B描绘了图3A中描绘的线程规范的示例性执行次序。这六个函数被标记为FCN(1)(例如,函数1)至FCN(6)。执行规范在阶段1期间开始,其中FCN(1)在阶段1和阶段2之间执行。在阶段2期间FCN(1)终止后,FCN(2)开始继续进行到阶段3,依此类推,直到六个函数终止执行。在这个示例性执行次序中,每个函数可以接收输入并产生输出。输出可以是后续函数的输入,其可以决定(dictate)函数的有序执行。
图4A图示了在时间敏感执行环境内实现线程规范的示例性流水线。一些执行环境限制资源向特定应用的分配。例如,安全应用可以比其它应用具有更高的优先级,这使得系统分配特定资源来执行安全应用并限制其它应用可用的资源。处理资源可以包括时间(阶段)、存储器、处理器、网络带宽等等。所描绘的流水线具有有限数量的阶段404以执行函数408(其可以与图3A中所描绘的函数相同或不同)。第一函数可以在阶段1期间在412处实例化并且在阶段2期间在416处终止。第二函数可以在阶段2期间在函数1在416处终止期间在420处实例化。
在函数2的执行期间可以发生故障424,这可以阻止函数2完成其处理或正确终止。例如,函数2可以被延迟等待解锁对寄存器的访问的信号量(semaphore)。其它类型的错误可能无法恢复,诸如死锁条件(例如,两个函数,每个函数在使寄存器可访问之前都等待另一个函数完成)。响应于故障242,函数2直到阶段4才终止(428),并且函数3不能实例化并代替地在预期的实例化阶段期间抛出实例化失败432。延迟会造成波纹效应,这可以延迟在函数2之后执行的后续函数。在一些示例中,调度器可以通过重新调度后续函数和线程规范来补偿延迟。在其它示例中,可以通过重新调度一个或多个函数来防止延迟(下面结合图5A和图5B更充分地描述)。在还有其它示例中,由故障引起的延迟可以造成线程规范中的严重失败。
例如,在资源受限的环境中,如果线程规范使用比环境分配给线程规范的更多的处理资源(例如,存储器、处理阶段等),那么线程规范可能造成系统崩溃。图4A中描绘的线程规范的阶段限制可以为7以执行规范的每个函数。故障424可以在被阻止在预期阶段期间实例化的每个后续函数(例如,432-444)中引起实例化失败。对于函数6,实例化失败可以阻止函数在线程规范的阶段限制内执行或完成。
在一些示例中,执行环境可以不处置实例化故障,而是允许线程规范失败。例如,在安全执行环境中,与允许添加执行未授权代码的阶段相比,可以允许线程规范失败。在其它示例中,如果可用阶段少于函数执行所需的阶段,那么执行环境可以通过停止函数的执行来部分地处置故障。例如,一旦确定故障424可以阻止函数6完成,故障424就可以使得执行环境停止其余函数的执行。可以重新启动线程规范,或者可以将处理资源分配给其它线程规范,以利用本应分配给未完成的线程规范的函数的阶段。(例如,由于失败或延迟)失败的线程规范可以造成与该线程相关联的应用崩溃(或者如果该线程是系统级线程,那么系统本身可能崩溃)。
图4B描绘了图4A中描绘的线程规范的示例性执行次序400-2。在资源受限的执行环境中执行线程规范可以被限制为7个阶段。函数可以在一个阶段期间实例化,并在后续阶段中终止。函数2可以在阶段2期间实例化,但是遇到故障(例如,读/写错误、高速缓存未命中、锁定的寄存器、处理器中断、异常等),从而使函数2延迟在该阶段期间执行函数的一部分。函数2可以直到阶段4才会终止,而不是按计划的阶段3。
由于处理器等待函数2终止,因此函数2的失败可以造成函数3(即,FCN(3))的实例化失败。该失败可以造成每个相应函数被调度为进行实例化的阶段期间的实例化失败(即,函数4、5和6)。在阶段7,函数5(即,FCN(5))可以终止。虽然可以在阶段7期间实例化函数6,但是可以确定在7个阶段限制期间函数6可能未完成。可以绕过函数6的实例化,并且线程规范可以以失败而终止(由于线程规范的一个或多个函数未能完成)。
图5A图示了在部分无序执行环境中实现线程规范的示例性流水线500-1。通过在故障引起的延迟期间调度一个或多个函数,部分无序执行环境可以提供容错。流水线500-1可以表示被调度为在资源受限的环境中执行的线程规范。可以向线程规范给出7个阶段的限制来执行。调度器(例如,图1的处理资源调度器104)可以分配函数以在特定阶段期间执行。调度器还可以将函数分类为静态(例如,必须在特定阶段中实例化、相对于其它函数以特定次序实例化等)或动态(例如,可以在任何阶段中实例化、可以在两个或更多个识别出的线程中实例化、可以相对于其它函数以任何次序实例化等)。
函数1可以被分类为静态512,指示函数1可以在阶段1期间在516处执行。函数1可以在阶段2期间在520处终止。在528处,实例化失败可以阻止函数2在阶段2期间实例化。函数2可以被分类为动态524(例如,可以在阶段2-7中的任何阶段期间被实例化),从而允许函数在随后的阶段中实例化。调度器可以识别另一个函数在阶段2期间代替函数2实例化。调度器可以将函数6(例如,动态函数580,其可以在阶段2-7的任何一个阶段期间被实例化)识别为能够在阶段2期间被实例化。在一些示例中,两个或更多个函数可以适于代替函数2。在那些示例中,调度器可以基于一个或多个规则、基于指派给函数的优先级值和/或基于选择的用户输入随机地选择函数。
当替换函数终止是可能的时,调度器可以尝试返回到有故障的函数。在一些情况下,由于静态分类的函数(例如,在556处的函数4),流水线500-1、调度器可能无法返回到有故障的函数。可以将函数2变换成无操作(NOP)指令集,直到调度器可以返回到函数2。函数4可以在阶段3期间在560处实例化,并且在阶段4期间在564处终止。在阶段4处,可以确定仍存在延迟函数2的故障条件。响应于确定故障条件仍然存在,函数2可以在536处返回到故障状况,并且调度器可以调度另一个函数以在阶段4期间实例化。
在阶段4处,存在两个被实例化的函数:函数3和函数5。由于将函数5静态地分类为在步骤5处进行实例化,因此无法选择函数5。函数3可以被动态地分类并选择为下一个被实例化。在阶段5处,调度器可以确定,由于函数5被静态分类为在阶段5期间实例化,因此接下来不可以对函数2进行实例化。在540处,函数2可以返回到NOP状况,并且函数5可以实例化。在阶段6处函数5终止后,调度器可以返回到函数2,该函数2可以实例化以完成线程规范。选择性和部分无序的调度方案可以在与图4A的流水线类似的约束下执行线程规范,但是灵活地对一个或多个函数进行重新排序,以防止故障使线程规范崩溃。
图5B描绘了图5A中描绘的线程规范的示例性执行次序500-2。线程规范可以从在阶段1处函数1的实例化开始。函数1的执行可以在阶段2期间终止,其中在实例化函数2时检测到故障。调度器可以提供替代的调度,以防止处理器(或系统)停机。替代调度可以通过在阶段2期间实例化函数6开始。接下来可以实例化函数4,然后是函数3,然后是函数5。调度器可以返回到函数2,以确保实例化函数2并完成线程规范。
在一些示例中,调度器可以为线程规范定义多个可能的时间表。例如,用户(例如,管理员)可以选择可以实例化每个函数的主要和次要次序。在检测到可以延迟函数的故障后,调度器可以切换到次要时间表,并根据次要时间表实例化下一个函数。在其它示例中,可以动态地(例如,在运行时)为线程规范定义替代时间表。在那些示例中,在遇到故障后,调度器(或终端用户)可以审查线程规范并选择要执行的最优函数来代替有故障的函数。在还有其它示例中,调度器(管理员和/或终端用户)可以生成或定义要实例化的新函数以代替有故障的函数。可以在运行时期间(例如,经由线程规范执行中的中断或暂停)定义新函数。可以部分地执行和暂停函数,以利于实例化不同的函数。在那些示例中,暂停的函数可以在稍后的时间完成(例如,以完成线程规范)。
图6描述了描绘用于生成线程规范的过程600的示例性流程图。该过程可以开始于框604,其中接收指示用于在一个或多个环境内执行的任务的输入。例如,一个或多个环境可以包括资源受限环境、安全环境、虚拟机环境、常规(例如,非受限环境)、其组合等。任务可以由一个或多个环境之一的管理员选择,以执行操纵环境内的数据(或与其连接)或操纵环境本身的函数或函数集合。在一些示例中,一个或多个开发人员可以定义任务、线程、线程模板和/或函数以供管理员选择,以使得管理员能够组装一个或多个线程、线程模板和/或函数以在环境内执行任务。
在框608处,可以接收指示任务的类型的输入。任务的类型(例如,建立网络连接、建立密码算法/密钥、工作流任务等)可以与线程模板对应,该线程模板与可以被执行以执行所选择的类型的任务的函数集合相关联。线程模板可以包括可以执行函数的强制性(或选择性)次序。在一些示例中,任务模板可以包括比执行任务所需的函数更多的函数。例如,两个或更多个函数可以以不同的方式导致相似的结果。调度器(或管理员)可以为任务提供两个或更多个函数之一的选择。在一些示例中,线程模板可以不存在。在那些示例中,环境(或管理员)可以通过从预先定义的函数集合中选择与被指派有该类型的任务相关联的一个或多个函数来定义线程模板。
在框616处,可以接收指示函数集合的子集的选择的输入。一种任务类型可以与额外的函数(例如,替代函数、可选函数等)相关联。输入可以指示将包括哪些函数来执行任务,以及哪些函数可能不是必需的。在一些示例中,输入可以指示一个或多个强制性的函数(例如,必须被包括以执行任务)和一个或多个可选的函数(例如,可以由终端用户、管理员或线程调度器来包括)。
在一些示例中,可以(例如,由终端用户、管理员或线程调度器)配置函数集合的子集。配置函数可以包括修改或更改与函数关联的指令,以执行特定的子任务、处理特定的数据类型或以特定的方式、产生特定的输出、生成一个或多个图形用户界面、处置错误(例如,异常/中断处理程序)等。配置可以包括向函数添加附加指令,使得函数的执行完成附加的子任务。可以以任何方式修改函数以提供线程的功能。
在框620处,调度器可以生成指派给函数集合的子集的每个函数的指令。调度器可以生成指令(例如,静态的或动态的)以实行调度策略,诸如函数的有序、无序或部分无序执行。例如,函数子集的一个或多个函数可以具有静态指令,该静态指令指示函数将根据指派的次序(或在指派的时间)执行。初始化环境或产生由另一个函数使用的输出的函数可以接收静态指令,以确保线程规范在使用该输出的函数之前实例化该函数。
函数可以基于函数独立于其它函数而接收动态(例如,无序)指令。例如,可以在线程规范执行期间的任何时间实例化不依赖于其它函数执行的输出或处理的函数。当在函数实例化期间检测到故障时,调度器可以使用被指派了动态指令的函数来在运行时动态地重新排序线程规范的执行。动态地重新排序线程规范的执行可以确保处理器(和/或终端用户)可以继续执行函数/任务,即使一个或多个函数/任务经历故障或延迟。
在一些示例中,函数可以基于函数部分独立于其它函数而接收部分动态指令。具有部分动态指令的函数可以受制于一个或多个约束而无序地被实例化。例如,特定函数可以依赖于第一函数的输出,而不依赖任何其它函数。调度器可以识别针对该特定函数的调度约束。在执行线程规范期间,如果触发了动态重新排序,那么假如来自第一函数的输出可用,则调度器可以无序地实例化该特定函数。如果来自第一函数的输出不可用,那么可以代替地实例化另一个函数。
具有部分动态指令的函数可以具有阻止无序实例化的各方面的多个约束。约束可以指示函数将在特定的时间或时间范围(例如,在3:00AM或星期一至星期五之间)、以特定的松散定义的次序(例如,在一个或多个函数起作用之后并在另一个函数起作用之前)、在处理器的特定执行阶段之间执行。约束可以指示函数所依赖于的其它函数的各方面。例如,函数可以依赖于另一个函数的处理结果、由另一个函数造成的对环境的修改、用户(例如,终端用户或管理员)输入等。
在框624处,可以生成指示用于实例化函数集合的子集的每个函数的次序的列表。调度器可以使用指派给函数子集的每个函数的指令来定义次序。在一些示例中,列表可以包括两个区段,这两个区段具有首先被排序并被包括在第一区段中的包括静态指令的函数以及被包括在列表的第二区段中的包括动态指令的函数。在一些示例中,调度器可以首先对具有静态指令的函数进行排序,然后对具有静态指令的函数周围的具有动态指令的函数进行排序。在其它示例中,可以根据预定义或用户选择的次序来调度函数,其中如果预定义或用户选择的次序违反了静态或动态指令,那么调度器可以改变这个次序。列表可以提供可选的排序,其中:
在框628处,可以调度具有静态指令的函数以在列表内以特定次序实例化;以及
在框632处,可以基于函数在其中被实例化的环境以及该函数在列表内的位置来调度包括动态指令的函数以在运行时实例化。例如,假如在环境内未检测到故障或其它延迟,那么可以以函数在列表内位于的次序来实例化具有动态指令的函数。如果环境内的条件造成函数的实例化或执行的故障或延迟,那么调度器可以调度一个或多个函数以在运行时实例化。环境内的条件可以包括错误/故障、延迟、中断、异常、管理员或终端用户的输入等。
除了被指派静态或动态调度指令之外,还可以向函数指派并行化指令,该并行化指令可以指示函数可以与一个或多个其它函数串行还是并行执行。调度器可以使用并行化指令和与每个函数相关联的约束来调度指令以供并行执行。在一些示例中,基于动态或部分动态函数缺乏对其它函数的依赖性,并行地实例化动态或部分动态函数。执行环境可以启用或禁用并行执行。在一些示例中,可以基于执行环境和/或执行环境可用的处理资源来确定关于要串行还是并行执行的确定。
在一些示例中,函数的时间表可以是部分可选的,从而使得执行环境、终端用户和/或函数本身能够确定在前一函数终止之后应当实例化哪个函数。例如,终止函数可以指示接下来应当实例化的一个或多个函数。在实例化由终止函数指示的一个或多个函数之前,调度器可以确定将不违反函数的时间表(例如,将不会无序实例化静态函数)。在一些示例中,终端用户可以选择要实例化的后续函数,只要所选择的函数不违反时间表即可。
在框636处,可以将函数集合的子集打包到线程规范中。线程规范可以包括指令(例如,调度指令和/或与线程规范相关联的其它指令)、列表、元数据、函数的子集等。线程规范可以包括用于执行任务(例如,所选择的任务604)的离散指令集。打包的线程规范可以在它被打包的环境内执行,或者可以在一个或多个其它环境内执行。例如,第一环境可以生成并打包线程规范以供在其它环境内执行或与其他用户结合执行。在一些示例中,打包的线程规范可以包括要在任何数量的不同环境(例如,Window、iOS、Android、虚拟环境等)中执行而无需进一步的修改或翻译的指令。
在框640处,可以将打包的线程规范传输到远程设备。在一些示例中,远程设备可以执行线程规范。在其它示例中,远程设备可以提供打包的线程规范的储存库。在那些示例中,用户界面可以使得用户(管理员或用户)能够在稍后的时间获得打包的线程规范。线程规范的函数可以完全由一个或多个处理器实例化并执行或者由一个或多个处理器和一个或多个终端用户实例化并执行。例如,函数可以由管理员定义为包括图形用户界面和一个或多个指令,以供终端用户提供与该函数对应的输入、处理和/或其它数据。一旦线程规范被传输(和/或存储),处理就可以终止或可以返回到步骤604,从而使得能够选择新任务并生成新线程规范。
图7图示了描绘用于调度针对线程规范的函数的过程的示例性流程图。该过程开始于框704,其中可以输入任务。可以根据结果(例如,对处理环境内或与处理环境相关的数据的修改)或输出(例如,处理输入以产生数据输出)来表示任务。计算设备或用户可以选择任务以生成一个或多个应用、应用特征、图形用户界面、算法、数据处理和/或计算设备可执行的任何其它功能。例如,可以选择任务以提供对来自远程数据库的数据流的处理。
在框708处,可以检测与任务相关联的任务类型。在一些示例中,任务类型可以基于任务所执行的处理的类型(例如,输出或结果)。在其它示例中,任务类型可以是输出的特定分类或结果的分类的表示。例如,基于数据计算(例如,输出)的任务可以具有一种任务类型,而基于数据聚合/分类(例如,也是输出)的任务可以具有另一种类型。可以在任何粒度级别上生成任务的类型(面向输出或面向结果)。使用上面的示例,数据计算和数据聚合/分类可以被考虑为在相同类型(例如,数据处理)下或基于用户输入或来自计算设备的输入而被分开。类似地,可以在任何粒度级别上对基于结果的任务进行分类,使得可以将执行应用的任务视为与执行离散应用特征的任务具有相同或不同的任务类型。执行应用的任务可以与执行通信协议或密码策略的任务具有不同的任务类型。
在框712处,可以加载与任务类型相关联的函数。过程可以使用函数清单、函数数据库从一个或多个本地或远程存储器等中加载函数集合。每种任务类型可以与函数集合对应。函数集合可以包括执行任务所需的更多函数。例如,密码协议可以包括散列函数(例如,MD5、SHA1、SHA2等)的集合,其中仅一个函数可以被选择来执行任务。函数集合可以是与执行任务的每个步骤相关联的函数,并且包括可以由计算设备或用户选择、省略和/或添加的用于每个步骤的可选的、冗余的或替代函数。
在框716处,可以使用任务输入来定义函数集合的子集。函数集合的子集可以包括由计算设备和/或用户选择以执行任务的函数。函数子集可以包括任务所需的最少的函数、函数的默认选择、一个或多个附加函数的选择(例如,用于冗余或提供附加特征)等。在一些示例中,用户可以基于任务和任务类型和/或与执行任务相关联的环境(或另一个用户)来选择要包括在函数子集中的一个或多个函数。
在框720处,可以将调度指令指派给函数子集的每个函数。调度指令可以指示函数是静态的(例如,在执行任务时必须以特定次序执行)或动态的(例如,可以具有调度方面的一些约束,但是可以以一个或多个不同的次序执行)。可以将静态指令指派给可以依赖于特定环境条件、输入等的函数。动态指令可以指示函数可以受制于一个或多个约束而自由地执行(例如,可以第二个或第三个执行,但不能第一个执行)。
例如,第一函数可以执行并提供用作第二函数的输入的输出。可以为第一和第二函数指派静态指令,因为第一函数必须首先执行,第二函数必须第二执行。将相同的示例应用于同样依赖于第一函数的输入的第三函数:现在,可以为第一函数指派静态指令,因为它必须首先执行,以向其它函数提供输入。可以为第二和第三函数指派动态指令。虽然两个函数都可以被约束为在第一函数之后执行,但是第二和第三函数可以可互换地在第二个或者第三个执行。
在框724处,对于第一函数,确定该函数是否被指派了静态指令。如果函数被指派了静态指令,那么过程继续到框728。如果函数没有被指派静态函数,那么过程移至框736。
在框728处,可以隔离函数子集的每个函数的一个或多个依赖性。隔离依赖性可以包括隔离静态函数依赖性(例如,预期的输入、处理条件、环境状态条件、执行时间、一天中的时间等)和函数子集中的其它函数。例如,如果子集中的所有其它函数都依赖于从特定函数生成的输出,那么可以检测到依赖性。这些依赖性可以仅基于例如预期输出、预期结果、执行的算法、执行后的预期环境状态条件、执行时间等。
在框732处,基于隔离依赖性向第一函数指派执行时间表内的位置。指派有静态指令的函数可以被指派在执行时间表内的单个位置。使用上面的示例,如果所有其它函数都依赖于第一函数的输出,那么可以在执行时间表内为第一函数指派第一位置,以确保第一函数首先执行以提供必要的输出。
在框736处,确定在函数集合的子集中是否存在需要调度的附加函数。如果还有更多的函数要调度,那么过程可以返回到框724,其中可以评估下一个函数以进行调度。
例如,返回到框724,其中,对于指派了动态指令的第二函数,确定它没有被指派静态指令,于是处理可以在框740处继续。
在框740处,可以确定第二函数是否被指派了动态函数。如果没有向函数指派动态指令,那么过程可以返回到步骤724,(例如,错误地)终止,或者向第二函数指派新的调度指令,该新的调度指令可以是静态的或动态的之一。如果第二函数被指派了动态指令,那么过程继续到744。
在框744处,可以确定对第二函数的约束。指派有动态指令的函数可以在执行时间表内的任何位置初始执行。一个或多个约束可以消除执行次序内的特定位置,以防止另一个函数无法执行。如果仅剩余一个位置,那么将调度指令重新指派给静态指令,并且过程转换到框732。约束可以包括被评估以确定依赖性(例如,预期的输入或输出、执行时间、执行次序、数据的时间、预期的环境状态、已经指派了特定位置的静态函数等)的相同或相似的条件。此外,可以评估子集中的其它函数的约束,以确保其它函数可以具有适当的输入/输出、环境状态条件等以便执行。
在框748处,可以将第二函数指派给调度次序内在应用检测约束之后剩余的每个位置。例如,第一函数提供用作第二函数和第三函数的输入的输出,第二和第三函数可以被指派动态指令,该动态指令具有关于在第一位置中执行的约束。第二和第三函数将各自被指派给执行内的位置二和三,以指示第二或第三函数可以在第一位置或第二位置执行。
在框736处,确定在函数集合的子集中是否存在需要调度的附加函数。如果在函数集合的子集中没有更多要调度的函数,那么过程移至框752。
在框752处,可以生成线程规范。线程规范可以包括函数集合的子集和执行时间表。在一些示例中,线程规范可以包括用于在一个或多个环境内执行线程规范的指令、元数据、函数、时间表和/或任何其它代码。在一些示例中,可以生成线程规范以在特定环境内执行。稍后可以修改线程规范以在不同的环境中执行。在一些示例中,一旦生成了线程规范,过程就可以返回到接收任务输入704,其中可以接收另一个任务输入以生成另一个线程规范。
在其它示例中,一旦生成了线程规范,就可以基于估计的执行时间、函数的数量、调度效率、错误代码、生成的异常/中断等来测试线程规范的效率、有效性、错误检测/校正等。如果线程规范未通过测试,那么可以分解线程规范并且处理可以返回到可能发生错误或效率低下的步骤。例如,如果向函数指派了不正确的调度指令,从而造成不正确的执行时间表,那么过程可以返回到720,而不是在704重新开始。如果测试通过(或者如果没有执行测试)并且没有接收到附加的任务输入,那么过程可以等待另外的输入或终止。
随后的描述仅提供(一个或多个)优选示例性实施例,并且无意于限制本公开的范围、适用性或配置。更确切地说,(一个或多个)优选示例性实施例的随后描述将为本领域技术人员提供用于实现优选示例性实施例的可行描述。应该理解的是,在不脱离所附权利要求书所阐述的精神和范围的情况下,可以对元件的功能和布置进行各种改变。
在以上描述中给出了具体细节以提供对实施例的透彻理解。但是,应该理解的是,可以在没有这些具体细节的情况下实践实施例。例如,电路可以以框图示出,以免以不必要的细节模糊实施例。在其它情况下,众所周知的电路、处理、算法、结构和技术可以示为没有不必要的细节,以避免模糊实施例。
可以以各种方式完成上述技术、方框、步骤和手段的实施。例如,这些技术、方框、步骤和手段可以用硬件、软件或其组合来实现。对于硬件实施方式,处理单元可以在一个或多个专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器、被设计用于执行上述功能的其它电子单元和/或其组合中实现。
而且,应该注意的是,实施例可以被描述为被描绘为流程图、流图、泳图、数据流程图、结构图或框图的过程。虽然描绘可以将操作描述为顺序处理,但是许多操作可以并行或并发地执行。此外,可以重新布置操作的次序。过程在其操作完成时终止,但可以具有未包括在图中的其它步骤。过程可以与方法、函数、过程、子例程、子程序等对应。当过程与函数对应时,其终止与函数返回到调用函数或主函数对应。
此外,实施例可以通过硬件、软件、脚本语言、固件、中间件、微代码、硬件描述语言和/或其任何组合来实现。当以软件、固件、中间件、脚本语言和/或微代码实现时,执行任务的程序代码或代码段可以存储在诸如存储介质之类的机器可读介质中。代码段或机器可执行指令可以表示过程、函数、子程序、程序、例程、子例程、模块、软件包、脚本、类、或指令、数据结构和/或程序语句的任何组合。代码段可以通过传递和/或接收信息、数据、自变量、参数和/或存储器内容而耦合到另一个代码段或硬件电路。信息、自变量、参数、数据等可以经由任何合适的手段传递、转发或传输,这些手段包括存储器共享、消息传递、令牌传递、网络传输等。
对于固件和/或软件实施方式,可以用执行本文描述的功能的模块(例如,过程、函数等)来实现方法。有形地实施指令的任何机器可读介质可以用于实现本文描述的方法。例如,软件代码可以存储在存储器中。存储器可以在处理器内或处理器外部实现。如本文所使用的,术语“存储器”是指任何类型的长期、短期、易失性、非易失性或其它存储介质,并且不限于任何特定类型的存储器或任何数量的存储器,或者其上存储存储器的介质的类型。
而且,如本文所公开的,术语“存储介质”可以表示用于存储数据的一个或多个存储器,包括只读存储器(ROM)、随机存取存储器(RAM)、磁RAM、核心存储器、磁盘存储介质、光学存储介质、闪存设备和/或用于存储信息的其它机器可读介质。术语“机器可读介质”包括但不限于便携式或固定存储设备、光学存储设备和/或能够存储包含或携带(一个或多个)指令和/或数据的各种其它存储介质。
虽然以上结合具体装置和方法描述了本公开的原理,但是应该清楚地理解,本描述仅通过示例的方式进行,而不是限制本公开的范围。
Claims (22)
1.一种在部分无序执行环境中调度函数以执行任务的方法,所述方法包括:
接收指示用于在一个或多个环境内执行的任务的输入;
接收指示任务的类型的输入,所述类型与函数集合相关联;
接收识别所述函数集合的子集的输入,所述函数集合的所述子集被配置为执行所述任务;
为所述函数集合的所述子集中的每个函数生成指令,该指令指示函数被配置用于静态调度还是动态调度;
生成指示用于实例化所述函数集合的所述子集中的每个函数的时间表的列表,其中基于与所述函数集合的所述子集中的每个函数对应的指令来调度函数以进行实例化,使得:
根据所述函数集合的所述子集中的函数在列表内的位置,调度所述函数集合的所述子集中被配置用于静态调度的函数以进行实例化;
按照以下方式来调度所述函数集合的所述子集中被配置用于动态调度的函数以进行实例化:
a)当在所述一个或多个环境内未检测到故障或延迟时,基于所述函数集合的所述子集中的函数在列表内的位置,来执行该调度以进行实例化;或者
b)如果所述一个或多个环境内的条件造成函数的实例化或执行中的故障或延迟,则执行该调度以在运行时进行实例化;
基于列表,生成规范,所述规范包括所述函数集合的所述子集;
传输规范,其中所述规范被配置为基于列表的时间表来实例化每个函数以执行所述任务。
2.如权利要求1所述的方法,其中防止包括静态调度指令的函数从由列表规定的时间表中被无序地实例化。
3.如权利要求1所述的方法,其中在满足预定约束之后的任何时间实例化包括动态调度指令的函数。
4.如权利要求1所述的方法,其中具有静态调度指令的特定函数接收输入,所述输入是从先前实例化的函数输出的。
5.如权利要求1所述的方法,其中特定函数输出要在所述特定函数之后实例化的函数的指示。
6.如权利要求1所述的方法,其中与包括动态调度指令的一个或多个函数和/或包括静态调度指令的一个或多个函数并行地实例化包括动态调度指令的函数。
7.如权利要求1所述的方法,其中包括静态调度指令的函数被串行地实例化,并且其中包括动态调度指令的函数以由用户输入确定的次序被实例化。
8.一种系统,包括:
一个或多个处理器;
非暂态机器可读存储介质,所述非暂态机器可读存储介质包含指令,所述指令在所述一个或多个处理器上执行时使所述一个或多个处理器执行操作,所述操作包括:
接收指示用于在一个或多个环境内执行的任务的输入;
接收指示任务的类型的输入,所述类型与函数集合相关联;
接收识别所述函数集合的子集的输入,所述函数集合的所述子集被配置为执行所述任务;
为所述函数集合的所述子集中的每个函数生成指令,该指令指示函数被配置用于静态调度还是动态调度;
生成指示用于实例化所述函数集合的所述子集中的每个函数的时间表的列表,其中基于与所述函数集合的所述子集中的每个函数对应的指令来调度函数以进行实例化,使得:
根据所述函数集合的所述子集中的函数在列表内的位置,调度所述函数集合的所述子集中被配置用于静态调度的函数以进行实例化;
按照以下方式来调度所述函数集合的所述子集中被配置用于动态调度的函数以进行实例化:
a)当在所述一个或多个环境内未检测到故障或延迟时,基于所述函数集合的所述子集中的函数在列表内的位置,
来执行该调度以进行实例化;或者
b)如果所述一个或多个环境内的条件造成函数的实例化或执行中的故障或延迟,则执行该调度以在运行时进行实例化;
基于列表,生成规范,所述规范包括所述函数集合的所述子集;
传输规范,其中所述规范被配置为基于列表的时间表来实例化每个函数以执行所述任务。
9.如权利要求8所述的系统,其中防止包括静态调度指令的函数从由列表规定的次序中被无序地实例化。
10.如权利要求8所述的系统,其中在满足预定约束之后的任何时间实例化包括动态调度指令的函数。
11.如权利要求8所述的系统,其中具有静态调度指令的特定函数接收输入,所述输入是从先前实例化的函数输出的。
12.如权利要求8所述的系统,其中特定函数输出要在所述特定函数之后实例化的函数的指示。
13.如权利要求9所述的系统,其中与包括动态调度指令的一个或多个函数和/或包括静态调度指令的一个或多个函数并行地实例化包括动态调度指令的函数。
14.如权利要求9所述的系统,其中包括静态调度指令的函数被串行地实例化,并且其中包括动态调度指令的函数以由用户输入确定的次序被实例化。
15.一种包含指令的非暂态机器可读存储介质,所述指令在一个或多个处理器上执行时使所述一个或多个处理器执行操作,所述操作包括:
接收指示用于在一个或多个环境内执行的任务的输入;
接收指示任务的类型的输入,所述类型与函数集合相关联;
接收识别所述函数集合的子集的输入,所述函数集合的所述子集被配置为执行所述任务;
为所述函数集合的所述子集中的每个函数生成指令,该指令指示函数被配置用于静态调度还是动态调度;
生成指示用于实例化所述函数集合的所述子集中的每个函数的时间表的列表,其中基于与所述函数集合的所述子集中的每个函数对应的指令来调度函数以进行实例化,使得:
根据所述函数集合的所述子集中的函数在列表内的位置,调度所述函数集合的所述子集中被配置用于静态调度的函数以进行实例化;
按照以下方式来调度所述函数集合的所述子集中被配置用于动态调度的函数以进行实例化:
a)当在所述一个或多个环境内未检测到故障或延迟时,基于所述函数集合的所述子集中的函数在列表内的位置,来执行该调度以进行实例化;或者
b)如果所述一个或多个环境内的条件造成函数的实例化或执行中的故障或延迟,则执行该调度以在运行时进行实例化;
基于列表,生成规范,所述规范包括所述函数集合的所述子集;
传输规范,其中所述规范被配置为基于列表的时间表来实例化每个函数以执行所述任务。
16.如权利要求15所述的非暂态机器可读存储介质,其中防止包括静态调度指令的函数从由列表规定的次序中被无序地实例化。
17.如权利要求15所述的非暂态机器可读存储介质,其中在满足预定约束之后的任何时间实例化包括动态调度指令的函数。
18.如权利要求15所述的非暂态机器可读存储介质,其中具有静态调度指令的特定函数接收输入,所述输入是从先前实例化的函数输出的。
19.如权利要求15所述的非暂态机器可读存储介质,其中特定函数输出要在所述特定函数之后实例化的函数的指示。
20.如权利要求15所述的非暂态机器可读存储介质,其中与包括动态调度指令的一个或多个函数和/或包括静态调度指令的一个或多个函数并行地实例化包括动态调度指令的函数。
21.如权利要求15所述的非暂态机器可读存储介质,其中包括静态调度指令的函数被串行地实例化,并且其中包括动态调度指令的函数以由用户输入确定的次序被实例化。
22.一种计算机程序产品,所述计算机程序产品包括指令,所述指令在由计算机执行时,使得所述计算机执行根据权利要求1-7中任一项所述的方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762565996P | 2017-09-29 | 2017-09-29 | |
US62/565,996 | 2017-09-29 | ||
US16/105,842 US10635487B2 (en) | 2017-09-29 | 2018-08-20 | Systems and methods defining thread specifications |
US16/105,842 | 2018-08-20 | ||
PCT/US2018/050601 WO2019067211A1 (en) | 2017-09-29 | 2018-09-12 | SYSTEMS AND METHODS DEFINING WIRE SPECIFICATIONS |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110998521A CN110998521A (zh) | 2020-04-10 |
CN110998521B true CN110998521B (zh) | 2024-04-26 |
Family
ID=65897277
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880052775.XA Active CN110998521B (zh) | 2017-09-29 | 2018-09-12 | 定义线程规范的系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10635487B2 (zh) |
EP (1) | EP3688578B1 (zh) |
CN (1) | CN110998521B (zh) |
WO (1) | WO2019067211A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112445598B (zh) * | 2020-12-07 | 2022-11-01 | 建信金融科技有限责任公司 | 一种基于quartz的任务调度方法、装置、电子设备以及介质 |
WO2022159519A1 (en) * | 2021-01-19 | 2022-07-28 | Rokfin, Inc. | Surge protection for scheduling minting of cryptographic tokens |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6148323A (en) * | 1995-12-29 | 2000-11-14 | Hewlett-Packard Company | System and method for managing the execution of system management |
CN101706714A (zh) * | 2009-11-23 | 2010-05-12 | 北京龙芯中科技术服务中心有限公司 | 指令发射系统及方法、处理器及其设计方法 |
CN103699432A (zh) * | 2013-12-17 | 2014-04-02 | 华中科技大学 | 一种异构环境下的多任务运行时协同调度系统 |
CN104536803A (zh) * | 2014-12-23 | 2015-04-22 | 西安电子科技大学 | 一种基于组合优化的虚拟机调度方法 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6901055B1 (en) * | 1999-08-19 | 2005-05-31 | Massachusetts Institute Of Technology | Synchronous circuit synthesis using an asynchronous specification |
US7234126B2 (en) * | 2000-08-23 | 2007-06-19 | Interuniversitair Microelektronica Centrum | Task concurrency management design method |
US7640548B1 (en) | 2002-06-21 | 2009-12-29 | Siebel Systems, Inc. | Task based user interface |
US7711694B2 (en) | 2002-12-23 | 2010-05-04 | Sap Ag | System and methods for user-customizable enterprise workflow management |
US7631291B2 (en) | 2004-10-01 | 2009-12-08 | Microsoft Corporation | Declarative representation for an extensible workflow model |
US7496735B2 (en) * | 2004-11-22 | 2009-02-24 | Strandera Corporation | Method and apparatus for incremental commitment to architectural state in a microprocessor |
US7613595B2 (en) * | 2005-03-01 | 2009-11-03 | The Math Works, Inc. | Execution and real-time implementation of a temporary overrun scheduler |
CN101238456A (zh) | 2005-04-18 | 2008-08-06 | 捷讯研究有限公司 | 用于实现应用任务工作流辅助视觉开发的系统和方法 |
US7681133B2 (en) | 2005-10-14 | 2010-03-16 | Oracle International Corporation | Declarative task-based user interfaces |
US9298334B1 (en) | 2011-02-18 | 2016-03-29 | Marvell International Ltd. | Method and apparatus for providing a user interface having a guided task flow among a plurality of devices |
US8589938B2 (en) * | 2011-03-03 | 2013-11-19 | International Business Machines Corporation | Composite contention aware task scheduling |
US8966457B2 (en) * | 2011-11-15 | 2015-02-24 | Global Supercomputing Corporation | Method and system for converting a single-threaded software program into an application-specific supercomputer |
US8959494B2 (en) * | 2012-03-20 | 2015-02-17 | Massively Parallel Technologies Inc. | Parallelism from functional decomposition |
US20150268963A1 (en) * | 2014-03-23 | 2015-09-24 | Technion Research & Development Foundation Ltd. | Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware |
-
2018
- 2018-08-20 US US16/105,842 patent/US10635487B2/en active Active
- 2018-09-12 CN CN201880052775.XA patent/CN110998521B/zh active Active
- 2018-09-12 WO PCT/US2018/050601 patent/WO2019067211A1/en unknown
- 2018-09-12 EP EP18862652.7A patent/EP3688578B1/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6148323A (en) * | 1995-12-29 | 2000-11-14 | Hewlett-Packard Company | System and method for managing the execution of system management |
CN101706714A (zh) * | 2009-11-23 | 2010-05-12 | 北京龙芯中科技术服务中心有限公司 | 指令发射系统及方法、处理器及其设计方法 |
CN103699432A (zh) * | 2013-12-17 | 2014-04-02 | 华中科技大学 | 一种异构环境下的多任务运行时协同调度系统 |
CN104536803A (zh) * | 2014-12-23 | 2015-04-22 | 西安电子科技大学 | 一种基于组合优化的虚拟机调度方法 |
Non-Patent Citations (1)
Title |
---|
Hadoop平台下的动态调度算法;高燕飞;陈俊杰;强彦;;计算机科学(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
WO2019067211A1 (en) | 2019-04-04 |
EP3688578B1 (en) | 2022-11-16 |
US10635487B2 (en) | 2020-04-28 |
CN110998521A (zh) | 2020-04-10 |
EP3688578A4 (en) | 2021-06-23 |
US20190102222A1 (en) | 2019-04-04 |
EP3688578A1 (en) | 2020-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6886081B2 (en) | Method and tool for determining ownership of a multiple owner lock in multithreading environments | |
US9477576B2 (en) | Using application state data and additional code to resolve deadlocks | |
CN102609296A (zh) | 虚拟机分支和并行执行 | |
US9146829B1 (en) | Analysis and verification of distributed applications | |
US9448820B1 (en) | Constraint verification for distributed applications | |
US10372908B2 (en) | System and method for detecting malware in a stream of bytes | |
Dietrich et al. | Global optimization of fixed-priority real-time systems by RTOS-aware control-flow analysis | |
Dietrich et al. | Cross-Kernel Control-Flow--Graph Analysis for Event-Driven Real-Time Systems | |
CN110998521B (zh) | 定义线程规范的系统和方法 | |
Jayaram et al. | FfDL: A flexible multi-tenant deep learning platform | |
Tigori et al. | Formal model-based synthesis of application-specific static RTOS | |
KR20150130298A (ko) | 컨트랙트에 대한 운영 체제 지원 기법 | |
Schneider et al. | Low-synchronization, mostly lock-free, elastic scheduling for streaming runtimes | |
Hahm et al. | Reliable real-time operating system for IoT devices | |
US9804945B1 (en) | Determinism for distributed applications | |
Pagano et al. | A model based safety critical flow for the aurix multi-core platform | |
Abdi et al. | Restart-based fault-tolerance: System design and schedulability analysis | |
Tan et al. | Review on firmware | |
Molyakov | Token scanning as a new scientific approach in the creation of protected systems: A new generation OS MICROTEK | |
Lencioni et al. | A Methodology for customization of a real-time operating system for embedded systems | |
Gadia et al. | Verifying nested lock priority inheritance in RTEMS with java pathfinder | |
Miedema et al. | Strategy Switching: Smart Fault-Tolerance for Weakly-Hard Resource-Constrained Real-Time Applications | |
Wahler et al. | Real-time multi-core components for cyber-physical systems | |
Lemerre et al. | A model of parallel deterministic real-time computation | |
Madzar et al. | Formal analysis of predictable data flow in fault-tolerant multicore systems |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |