CN109478138A - 具有隐式并发控制的高性能服务的编程模型和解释运行时环境 - Google Patents
具有隐式并发控制的高性能服务的编程模型和解释运行时环境 Download PDFInfo
- Publication number
- CN109478138A CN109478138A CN201780043436.0A CN201780043436A CN109478138A CN 109478138 A CN109478138 A CN 109478138A CN 201780043436 A CN201780043436 A CN 201780043436A CN 109478138 A CN109478138 A CN 109478138A
- Authority
- CN
- China
- Prior art keywords
- user
- program unit
- task
- execution
- implicit
- 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
- 230000006870 function Effects 0.000 claims description 179
- 238000000034 method Methods 0.000 claims description 117
- 230000006399 behavior Effects 0.000 claims description 82
- 230000008569 process Effects 0.000 claims description 39
- 238000011084 recovery Methods 0.000 claims description 14
- 230000007246 mechanism Effects 0.000 claims description 13
- 230000007717 exclusion Effects 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 10
- 230000000903 blocking effect Effects 0.000 claims description 7
- 230000008859 change Effects 0.000 claims description 6
- 230000037430 deletion Effects 0.000 claims description 4
- 238000012217 deletion Methods 0.000 claims description 3
- 238000004364 calculation method Methods 0.000 claims description 2
- 239000008186 active pharmaceutical agent Substances 0.000 claims 3
- 238000004590 computer program Methods 0.000 description 51
- 238000003860 storage Methods 0.000 description 28
- 230000002776 aggregation Effects 0.000 description 25
- 238000004220 aggregation Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 18
- 238000010276 construction Methods 0.000 description 8
- 238000004519 manufacturing process Methods 0.000 description 8
- 238000005304 joining Methods 0.000 description 7
- 239000004744 fabric Substances 0.000 description 6
- 238000002955 isolation Methods 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 4
- 230000007613 environmental effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000036541 health Effects 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 235000010425 Sorbus domestica Nutrition 0.000 description 1
- 240000005332 Sorbus domestica Species 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 239000003595 mist Substances 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000032696 parturition Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000002618 waking 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- 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/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
- G06F9/4831—Task transfer initiation or dispatching by interrupt, e.g. masked with variable priority
-
- 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/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Stored Programmes (AREA)
Abstract
公开了一种用于定义要在具有大量责任的大数据集上操作的服务的编程模型,该编程模型包括树拓扑中的用于高性能和隐式并发控制的程序单元,其中,每个程序单元定义包括在行为和配置中定义的责任。运行时环境可用于为在程序单元实例上执行的操作提供隐式并发、并行化和并发控制。
Description
交叉引用相关申请
本申请要求2016年5月12日提交的美国临时专利申请序列号62/335,508和2017年5月10日提交的美国申请号15/592,061的权益,并通过引用结合于此。
背景技术
在现实世界中,任何时候,许多事情都是同时发生的。随着越来越多的企业和其他组织转变成数字形式,并且越来越多的计算机(包括嵌入日常电器和装置(例如,汽车、自行车、衣服、咖啡机等)中的计算机)连接到互联网或专用网络,变得更加难以构建高性能软件服务来解决事件同时发生的日益增长的趋势,包括事件应按特定顺序发生。以“错误”顺序发生的事件或不考虑底层逻辑或结构系统的事件可能会造成与并发相关的危险,例如,如果一个人同时在两个不同的地方预约。通常需要额外的编程专业知识和更长的开发时间来处理计算机程序中与并发相关的危险。
历史上,解释语言一直是构建软件服务的选择。与编译的实现相比,解释语言给实现带来了一定的灵活性,并且经常使实现程序更加容易。构建和执行解释程序可能需要解释运行时环境(在本文中也称为运行时环境)。运行时环境包括解释器,并且可以另外包括编程框架、网络和其他模块。计算机程序解释器(在本文中也称为“程序解释器”或“解释器”)是一种计算机程序,该计算机程序执行以解释语言(例如,Java或ECMAScript)编写的指令而无需事先将其编译成机器语言程序。编程框架为解释程序提供了各种功能,例如,访问存储或数据加密。网络模块向解释程序提供网络客户端和网络服务功能,以支持通过网络的可互操作的机器对机器交互;具有网络模块的运行时环境使解释程序能够共享数据和资源、展示功能和分发工作。运行时环境提供网络功能,以解决互联世界的问题。
构建不同时运行的程序越来越容易、越来越快;换言之,更容易构建具有执行步骤的程序,这些步骤只是顺序运行。然而,顺序程序产生较低的吞吐量和高延迟,特别是当涉及IO操作(例如,经由网络向或从计算机传输数据或向或从磁盘驱动器传输数据的操作等)时。在并发计算中,通过在单个处理器核上交错执行步骤或者在多个处理器核上并行运行计算,可以在重叠的时间段期间并发地而不是顺序地执行几个计算和IO操作。另一方面,并行计算同时使用多个处理器内核来执行程序,以用于更好的性能和硬件利用。并行和并发计算需要额外的专业知识和使用显式编程技术,以使程序正确工作,在没有并发相关危险的情况下工作,并以高吞吐量和低延迟的方式执行。
一些并发编程语言、现有编程语言的一些与并发相关的扩展以及由一些运行时环境启用的一些编程范例(例如,事件驱动编程范例)可以利用额外的专业知识减少延迟并增加程序执行的吞吐量;然而,这些不能提供由执行大量同时计算的需求引起的问题的简单解决方案。这些程序通常仍会产生低吞吐量、高延迟和未充分利用的硬件。此外,由于程序对共享资源的同时访问,与并发相关的问题仍然会出现。
额外的专业知识可能有助于解决并发相关问题;然而,对于不断构建和扩展的软件系统来说,额外的专业知识可能不会为并发相关问题带来简单的解决方案。解决并发相关问题可能会带来其他问题,包括但不限于瓶颈、低吞吐量、高延迟和处理器未充分利用。
附图说明
图1是根据所要求保护的主题的编程模型方面的作为解释的计算机程序单元定义的递归组合的服务定义的统一建模语言(“UML”)格式图的示例。
图2是根据所要求保护的主题的编程模型方面的作为主程序单元单例定义的递归组合的服务定义的UML格式化图的示例,主程序单元单例定义进一步是具有集合级并发性的辅助程序单元单例定义和多例定义的递归组合。
图3是根据所要求保护的主题的编程模型方面的图2的示例性主程序单元单例定义树。
图4是根据所要求保护的主题的编程模型方面的图3的示例性主编程单元单例实例树。
图5是根据所要求保护的主题的编程模型方面的图2的主程序单元单例定义的示例性辅助后代程序单元定义树。
图6是根据所要求保护的主题的编程模型方面的图5的主程序单元单例实例的示例性后代辅助程序单元单例实例树。
图7是根据所要求保护的主题的编程模型方面的图5的主程序单元单例实例的示例性后代辅助程序单元多例实例树。
图8是根据所要求保护的主题的编程模型方面的图5的示例性程序单元实例树,该实例树示出了由辅助程序单元单例实例向其辅助程序单元多例实例集合提供的集合级并发控制。
图9是示出根据所要求保护的主题的运行时环境方面的运行时环境的适当操作环境的示意方框图的示例。
图10是根据所要求保护的主题的运行时环境方面的结构线程的示例的方框图。
图11是示出根据所要求保护的主题的运行时环境方面的专用多生产者单消费者任务队列的示例的方框图。
图12是示出根据所要求保护的主题的运行时环境方面的共享多生产者多消费者任务队列的示例的方框图。
图13是根据所要求保护的主题的运行时环境方面的任务流的链表的示例。
图14是根据所要求保护的主题的运行时环境方面的结构线程优先级队列的示例的方框图。
图15是根据所要求保护的主题的运行时环境方面的连续传递样式编程范例的隐式并发控制的示例性控制流程图。
图16是根据所要求保护的主题的运行时环境方面的直接样式编程范例的隐式并发控制的示例性控制流程图。
图17是根据所要求保护的主题的运行时环境方面的网络请求的示例性数据流图。
图18是根据所要求保护的主题的运行时环境方面的执行结构线程子例程的方法的示例的流程图。
图19是根据所要求保护的主题的运行时环境方面的在执行结构线程中执行用户任务的方法的示例的流程图。
图20是根据所要求保护的主题的运行时环境方面的在执行结构线程中执行连续系统任务的方法的示例的流程图。
图21是根据所要求保护的主题的运行时环境方面的在执行结构线程中执行承诺系统任务的方法的示例的流程图。
图22是根据所要求保护的主题的运行时环境方面的执行连续性的方法的示例的流程图。
图23是示出根据所要求保护的主题的运行时环境方面的在协同程序执行上下文中执行连续解释程序的方法的示例的流程图。
图24是根据所要求保护的主题的运行时环境方面的通用多生产者单消费者队列的空生产者链表结构和空消费者链表结构的示例的方框图。
图25是根据所要求保护的主题的运行时环境方面的通用多生产者单消费者队列的非空生产者链表结构和空消费者链表结构的示例的方框图。
图26是根据所要求保护的主题的运行时环境方面的生产者链表与空消费者链表结构交换之后的通用多生产者单消费者队列的示例的方框图。
图27是根据所要求保护的主题的运行时环境方面的通用多生产者单消费者队列的初始化的示例的流程图。
图28是根据所要求保护的主题的运行时环境方面的将队列节点入队到通用多生产者单消费者队列中的示例的流程图。
图29是根据所要求保护的主题的运行时环境方面的将队列节点从通用多生产者单消费者队列中出队的示例的流程图。
图30是根据所要求保护的主题的运行时环境方面的将队列节点从通用多生产者单消费者队列的消费者链表中出队的示例的流程图。
具体实施方式
在本文中公开了可用于构建高性能服务的编程模型的示例,当被解释运行时环境执行时,这些高性能服务提供隐式并发控制。
根据所要求保护的主题的一个方面,编程模型可用于定义要在具有大量职责的大数据集上操作的服务,包括树拓扑中用于高性能和隐式并发控制的程序单元,其中,每个程序单元定义包括在行为和配置中定义的责任。根据另一方面,运行时环境可用于为在程序单元实例上执行的操作提供隐式并发、并行化和并发控制。程序单元实例可以包括程序单元实例创建、程序单元实例删除和程序单元实例行为执行,其中,每个程序单元实例对单独的数据集进行操作。
现在参考附图描述本主题公开的各个方面,其中,相同的标号始终表示相同或相应的元件。然而,应当理解,附图和与其相关的详细描述并不旨在将所要求保护的主题限制于所公开的特定形式。相反,本发明旨在覆盖落入所要求保护的主题的精神和范围内的所有修改、等同物和替代物。
编程模型
程序单元定义
首先参考图1,示出了根据所要求保护的主题的编程模型方面的服务定义的实施方式,该服务定义包括以组合100的UML符号表示的树结构中的程序单元定义。根级程序单元定义是主程序单元定义,并且主程序单元定义的后代是辅助程序单元定义。解释计算机程序单元定义110(在本文中也称为程序单元定义或解释程序单元定义)的实施方式用唯一的定义密钥来标识,并且包括名称、行为、配置、呈现和数据模式定义。行为定义是以直接样式(DS)和连续传递样式(CPS)编程范例的解释语言编写的计算机程序。配置定义是提供给程序的信息,该程序控制在运行时的操作方面,包括但不限于安全设置(例如,角色、权限等)、并发控制类型(例如,互斥、信号量、读取器-写入器并发控制等)、并发控制设置(例如,初始信号量计数)和默认操作值等。呈现定义包括关于程序单元如何呈现的定义,并且可以包括HTML文件、CSS文件、客户端侧JavaScript文件、图片、视频等。数据模式定义是表示程序单元的操作状态的逻辑视图的骨架结构。程序单元定义密钥可以由程序员预先分配,或者通过对每个程序定义使用集成开发环境来分配。由程序员或者通过使用集成开发环境为每个服务定义来创建程序单元定义拓扑。程序单元定义拓扑是一种树拓扑,其中,每个树节点包括单元名称和单元定义密钥;单元名称在同胞节点中是唯一的。程序单元定义和程序单元定义拓扑存储在存储介质中。程序定义被使得可以通过使用用于操作目的的它们的唯一定义密钥来访问运行时环境。
程序单元实例
解释程序单元实例公开了其行为,并以持久的形式封装了其专用操作数据(在本文中也称为操作数据)。
可以通过符合程序单元定义、程序单元定义拓扑和程序单元的创建模式,通过使用设置有运行时环境的编程框架,经由来自在同一计算节点上运行的其他进程的远程调用、经由通过网络的远程调用(例如,HTTP调用)并且经由来自解释程序单元实例的调用,来实例化新程序单元。
运行时环境为每个创建的实例分配了唯一的实例密钥。
可以通过使用设置有运行时环境的编程框架,经由来自在同一计算节点上运行的其他进程的远程调用、经由通过网络的远程调用(例如,HTTP调用)并且经由来自解释程序单元实例的调用,来删除现有的程序单元实例。
一旦程序单元实例化,就可以执行其行为直到它被删除。可以通过使用设置有运行时环境的编程框架,经由来自在同一计算节点上运行的其他进程的远程调用、经由通过网络的远程调用(例如,HTTP调用)并且经由来自解释程序单元实例的调用,来执行实例行为。
程序单元实例的操作数据在系统存储器中处理,并保存在存储介质上。程序单元实例的操作数据包括在实例创建期间分配给实例以唯一识别程序单元实例的实例密钥、指向在所有实例之间共享的程序单元定义的定义密钥、保存从根级实例到直接父级实例的程序单元实例的祖先实例的实例密钥值列表的程序单元实例拓扑、包括安全属性的系统相关信息、以及密钥为字符串的密钥/值对的无序集合和零或更多值的有序列表,其中每个值可以是任何类型的自定义操作数据。在程序单元实例创建、程序单元实例删除和程序单元实例行为执行等过程中,程序单元实例可以导航、读取和操纵自定义操作数据。程序单元实例的操作数据可以保存在执行解释的计算机程序单元实例的同一计算节点上,或者可以位于另一计算节点上。此外,出于例如冗余的目的,程序单元实例的操作数据可以复制到多个计算节点上。运行时环境使能基于程序单元实例的操作数据查询程序单元实例。
除了可能需要隐式并发控制的程序单元实例的操作数据之外,程序单元实例还可以保持其他状态,例如,存储在通过网络的远程调用访问的另一服务或计算机系统中的远程状态、或者通过装置IO读取和操纵的电气开关的状态(例如,开/关)的状态、或者通过装置IO读取和操纵的电动机的状态(例如,其旋转速度和方向)、或者经由各种方式访问的复杂机械或系统的状态等。
单例和多例实施方式
在图2中以用于组合和继承200的UML符号示出包含具有更高级隐式并发控制的所要求保护的主题的编程模型方面的程序单元定义的实施方式。服务可以由递归地201形成服务树的多个主程序单元组成。类似地,每个主程序单元的辅助程序单元也可以由多个辅助程序单元202递归地组成。运行时环境可以托管多个主程序单元。编程模型的优选实施方式使用单例和多例创建模式来实例化程序单元。主程序单元201只能是单例;然而,辅助程序单元202可以具有单例实例和多个多例实例。辅助程序单元单例实例和辅助程序单元多例实例与其定义密钥相关联。同一辅助程序单元的辅助程序单元单例实例和辅助程序单元多例实例具有相同的程序单元定义密钥。单例实例只能访问单例定义203,并且多例实例只能访问多例定义204。辅助程序单元的多例实例集合可以依赖于205集合级隐式并发控制的相同辅助程序单元的单一实例定义。服务实例的辅助程序单元单例实例和辅助程序单元多例实例在不同的树拓扑中被结构化,在树拓扑中每个不同的树都是主程序单元单例实例的后代子树。
图3是根据所要求保护的主题的编程模型方面的图2的示例性主程序单元单例定义树;服务由多个主程序单元组成,递归地符合树结构。
图4示出了作为图3所示的多个主程序单元400的服务定义的示例组合的示例实例化。树结构中的多个主程序单元对于构建在树层级结构中提供子服务的网络服务特别有用。例如,其中,域名表示主服务(例如,example.com 401),并且子域表示子服务(例如,travel.example.com 402),并且寻址后代主程序单元单例实例。例如:
图5是根据所要求保护的主题的编程模型方面的图2的主程序单元单例定义的示例性辅助后代程序单元定义树。主程序单元单例定义501的辅助后代程序单元定义502可以具有单例和多例定义。子树的辅助程序单元多例定义的网络服务示例可以是:
图6示出了用于图5所示的一个主程序单元组合的服务定义的示例组合的辅助程序单元单例的示例实例化。主程序单元实例"R"[2]601可以由网络服务的域名“health.example.com”寻址,并且辅助程序单元单例和多例实例可以在URL中寻址。URL形式的以下实施方式可以用于寻址单例实例,例如:
i)Instance A[8]:"/Units/Doctors"602
ii)Instance D[ll]:"/Units/Doctors/Units/Reviews"603
iii)Instance E[12]:"/Units/Doctors/Units/Reservations"604
iv)Instance G[14]:"/Units/Doctors/Units/Reservations/Units/Tests"605
图7示出了用于一个主程序单元组合的服务定义的示例组合的辅助程序单元多例的示例实例化。URL形式的以下实施方式可用于寻址多例实例,例如:
i)Instance A[18]:"/Units/Doctors/18"701
ii)Instance D[25]:"/Units/Doctors/Units/Reviews/25"702
iii)Instance E[28]:"/Units/Doctors/Units/Reservations/28"703
iv)Instance G[35]:"/Units/Doctors/Units/Reservations/Units/Tests/35"704
可以使用HTTP调用来操作程序单元。例如,“Doctors”辅助程序单元多例可以通过向
i)"/Units/Doctors"发出POST请求来实例化
URL具有额外的有效载荷,该有效载荷可以通过在“Doctors”程序单元单例上定义的默认行为来执行。或者,可以通过向
i)"/Units/Doctors/18/SendMessage"发出POST请求而针对已经利用先前的POST调用实例化的特定实例(例如18)来调用在“Doctors”辅助程序单元多例上定义的自定义“SendMessage”行为
URL具有包含该消息的额外有效载荷。
也可以通过调用设置有运行时环境的编程框架来操作程序单元。例如,“Doctors”辅助程序单元多例可以通过以下框架调用来实例化:
i)"Units.Doctors.Add(input);"
其可以由在“Doctors”程序单元单例上定义的行为来执行。或者,可以针对已经用先前的框架调用:
i)"Units.Doctors.Get(18).SendMessage(message)"实例化的特定实例(例如,18)来调用在“Doctors”辅助程序单元多例上定义的自定义“SendMessage”行为
并发
主题的运行时环境方面为在程序单元实例上执行的操作提供隐式并发控制机制,包括但不限于程序单元实例创建、程序单元实例删除和程序单元实例行为执行。
为每个程序单元实例管理单独的隐式并发控制实例;在同一程序单元实例上的操作的执行受到同一并发控制实例的影响;在不同程序单元实例上的操作的执行均受到不同的并发控制实例的影响。例如,在同一程序单元实例上同时执行操作决不会重叠,其中,每个操作都更新程序单元实例的操作状态。不同程序单元实例上的操作的执行经受同时执行。
利用在于多个程序单元实例上操作的各个程序单元实例上执行的程序单元行为,可以增强为各个程序单元实例提供的隐式并发控制,以向多个程序单元实例提供隐式并发控制。
父级并发
程序单元实例的隐式并发控制实例可以利用在程序单元实例树上操作的程序单元行为扩展到其后代程序单元实例,其中,程序单元实例本身位于该树的根。
例如,可以定义父程序单元中的行为,以确保基于后代程序单元实例的特定状态,仅可以存在零个或一个后代程序单元实例。类似地,可以定义父程序单元中的行为,以确保后代程序单元实例的数量不超过某个数量。从父程序单元实例向其后代程序单元实例提供隐式并发控制机制不限于直接后代实例,隐式并发控制机制可以提供给父程序单元实例的整个后代树或后代树的一部分。
通过利用程序单元实例拓扑,实现了从父程序单元实例提供隐式并发控制机制的实施方式。程序单元实例拓扑是程序单元实例的操作数据,该操作数据包括使父程序单元实例能够查询其直接后代程序单元、其整个后代程序单元、或在父程序单元实例中的或者在与父程序单元实例相距特定距离内的其后代程序单元的信息。用于图7所示的辅助程序单元多例实例G[35]704的程序单元实例拓扑的实施方式可以用JSON如下表示:
“Topology”JSON对象的成员的密钥值是表示程序单元实例与根级主程序单元实例之间的距离的数字。
例如,使用程序单元实例的程序单元实例拓扑属性,主程序单元实例R[2]可以为其“G”类型的后代提供隐式并发控制(即,定义密钥值路径为“R/A/E/G”),或者可以为其后代提供直到级别2的隐式并发控制(即,“Topology”JSON对象的成员的密钥值为“2”),或者可以为其所有后代提供隐式并发控制。
每个程序单元实例的实例拓扑属性是在运行时环境创建期间设置的。在创建程序单元实例期间,运行时环境读取正在被创建的程序单元实例的父程序单元实例的实例拓扑属性JSON对象,用包含父程序单元实例的“DefinitionKey”和“InstanceKey”值的新成员对其进行扩展,并将其保存为正在创建的实例的实例拓扑属性。新条目的密钥值表示父程序单元实例与根级主程序单元实例之间的距离。
单例/多例并发
辅助程序单元单例实例的隐式并发控制实例可以利用在辅助程序单元多例实例上操作的辅助程序单元单例实例的行为,来扩展到同一辅助程序单元的辅助程序单元多例实例的集合。
在图8所示的示例中,辅助程序单元多例实例K[39]802可以向其后代辅助程序单元多例L实例L[42]803、L[43]804和L[44]805提供隐式并发控制,类似地,辅助程序单元多例实例K[40]806可以向其后代辅助程序单元多例L实例L[45]807、L[46]808和L[47]809提供隐式并发控制。然而,这些多例实例都不能为整个L集合810提供隐式并发控制;例如,K[39]802或K[40]806都不能确保在所有L集合实例810中,只有零个或一个辅助程序单元多例L实例能够以某个操作状态(例如,颜色值)存在。主程序单元单例实例801可以向辅助程序单元多例L集合810提供隐式并发控制,然而,为主单元单例实例801处的每个辅助程序单元多例实例集合提供隐式并发控制,引入了严重的性能瓶颈。辅助程序单元单例实例被用来为其辅助程序单元的多例实例集合提供隐式并发控制。这样,多例集合的单点并发控制可以从主单元单例实例分发到辅助程序单元单例实例。例如,辅助程序单元单例实例L[41]811可以向整个辅助程序单元多例集合L 810提供隐式并发控制,并且辅助程序单元单例实例K[38]812可以在单独的并发控制实例中向整个辅助程序单元多例集合K 813提供隐式并发控制。尽管如此,L[41]811和K[38]812也可以分别向其实例L[41]811和K[38]812提供隐式并发控制。
例如,对于上面给出的“health.example.com”示例,在“Doctors”辅助程序单元多例上定义的行为可以为每个“Doctors”辅助程序单元多例实例的“Reservations”辅助程序单元多例实例的创建提供并发控制,以防止每个医生在同一日期和时间的双重预约。该行为可以查询给定日期和时间的“Doctors”辅助程序单元多例实例的“Reservations”辅助程序单元多例实例,以便创建新的“Reservations”辅助程序单元多例实例,只要没有已经针对“Doctors”辅助程序单元多例实例的给定日期和时间创建“Reservations”辅助程序单元多例实例。如果发生多个患者同时多次请求在同一日期和时间向同一个医生预约,则由“Doctors”辅助程序单元多例实例提供的并发控制将以串行方式处理创建请求,如果第一个请求针对给定的日期和时间创建预约,则第二个请求将无法防止向医生在同一日期和时间创建多个预约。
在“Doctors”辅助程序单元多例上定义的行为只能为针对每个“Doctors”辅助程序单元多例实例单独地创建后代“Reservations”辅助程序单元多例实例提供并发控制。尽管如此,在“Doctors”辅助程序单元单例上定义的行为可以为创建“Reservations”程序单元多例实例提供并发控制,以防止对由任何医生的患者id识别的给定患者在同一日期和时间进行双重预约。如果没有为给定患者在给定日期和时间创建“Reservations”辅助程序单元多例实例,则在“Doctors”辅助程序单元单例上定义的行为可以针对给定患者id、数据和时间查询整个“Reservations”辅助程序单元多例实例,以仅创建新的“Reservations”辅助程序单元多例实例。如果发生同一患者同时多次请求在同一日期和时间向不同的医生预约,则“Doctors”辅助程序单元单例实例提供的并发控制将以串行方式处理请求,如果第一次请求为给定患者、日期和时间创建预约,则第二次请求将无法防止在同一日期和时间向不同医生为给定患者多次预约。
运行时环境
图9是示出根据所要求保护的主题的运行时环境方面的运行时环境的适当操作环境的示意方框图。运行时环境910作为进程在计算节点920上运行。计算节点920可以是物理机、虚拟机或容器。计算节点920运行操作系统930,例如,Linux或Windows,并具有存储介质940。运行时环境910可以提供网络功能、存储功能和解释程序执行功能等。网络功能可以提供例如网络协议中的通信,网络协议包括但不限于TCP/IP、HTTP、HTTPS和环境协议(例如,蓝牙、ZigBee等)。运行时环境910可以部署在多台单个计算机上以构建和操作应用程序,这些应用程序以联网和协作的方式为近边缘或雾计算目的提供环境服务,或者可以使用无共享架构将运行时环境分布在数据中心环境中的计算节点上,在无共享架构中,没有一个节点共享存储介质或存储器,以实现可扩展性。
结构
结构是一组线程,其中,每个结构线程并行提供相同的结构功能。结构不共享线程。运行时环境的结构线程通过使用存储器绑定任务对象异步地通信来相互协作。任何结构中的最小线程数量为一根。运行时环境通过在其结构中分配更多数量的线程,而在具有更多硬件资源(例如,处理核的数量、存储器、存储空间)的计算节点上垂直地扩展。
在主题的实施方式中,运行时环境包括执行结构、网络结构和存储结构。执行结构运行运行时环境的主要功能,包括解释程序(例如,ECMAScript)执行和维护运行时环境的其他功能。网络结构运行运行时环境的网络功能,并且可以在多种协议中进行通信。存储结构运行运行时环境的存储功能,以实现系统和用户定义的存储要求。
运行时环境的实施方式可以包括收集环境传感器读数、控制步进电机、机械臂或其他机械的IO结构。
结构线程
图10是根据所要求保护的主题的运行时环境方面的结构线程和任务1000的方框图。结构线程1010(在本文中也称为线程)的主要职责是执行通过其高性能任务队列接收的传入任务1020。结构线程的高性能任务队列是共享的多生产者多消费者高性能任务队列1030(在本文中也称为共享任务队列)和专用的多生产者单消费者高性能任务队列1040(在本文中也称为专用任务队列)。结构线程包括至少一个高性能任务队列。每个结构线程包括任务执行器1050。执行结构线程另外包括线程本地程序解释器管理器1060。根据结构类型,结构线程还可以包括优先级队列1070。线程本地程序解释器管理器1060负责向任务提供隔离的解释程序执行上下文。隔离执行上下文使每个解释程序能够在其专用执行环境中执行。在解释程序的执行期间,执行控制可以在解释程序和任务执行器1050之间来回传递,以便向解释程序提供运行时环境系统级功能,包括但不限于产生执行、调度输出任务1080以便在结构线程上并行执行、调用编译成机器语言的框架功能。通过分配线程以在单独的处理核上运行来提供并行化。
任务
任务是存储器绑定对象,该对象根据所要求保护的主题的运行时环境方面传送要执行的行为和要由结构线程处理的一组属性。
任务行为是本地行为或者本地行为和管理行为的混合。本地行为被编译成机器语言,并与运行时环境一起提供。管理行为是以解释语言定义的解释程序。如果任务的管理行为是以解释语言作为源代码给出的,则任务在执行之前会将其编译成解释的计算机程序。每个任务具有至少一个行为定义,并且可以同时具有本地行为和管理行为。任务行为在结构线程中执行。任务行为执行在本文中也称为任务执行。
任务属性可以是原语数据类型或复合数据类型。任务属性包括任务密钥、任务优先级、任务执行参数等。
任务密钥是唯一标识任务的字符串值。主题的运行时环境方面使用任务密钥值将任务路由到执行结构的结构线程;具有相同任务密钥值的任务总是在每个运行时环境的相同执行结构线程中执行,然而,具有不同密钥值的任务可以在不同的执行结构线程中执行,这些线程为任务执行提供并发性和并行性。在程序单元实例上执行操作的任务从程序单元实例的实例密钥值中导出其密钥值。程序单元实例密钥值由运行时环境唯一生成。
任务优先级是代表任务优先级的自然数。基于其在执行结构中的任务优先级值来执行任务。例如,较小的值可能优先于较大的值;例如,0可能是最高的任务优先级值。
有两种类型的任务优先级;系统级优先级和用户级优先级。系统级优先级优先于用户级优先级。具有从0开始的预定义的有限数量的系统级优先级值。用户级优先级值在系统级优先级值之后开始,并且对于在执行结构中分配了用户级优先级值的每个任务,如果不是严格增加的话,可以单调增加。如果不是严格增加时钟值的话,执行结构保持单调增加的时钟值,以分配用户级优先级值。任务需要重新安排优先级。
系统任务
具有系统级优先级值的任务是系统任务。系统任务与运行时环境通信,以访问运行时环境资源,例如,存储和网络。系统任务的示例用途是执行IO操作、关闭结构线程等。
用户任务
具有用户级优先级值的任务是用户任务。用户任务在程序单元实例上执行操作,包括但不限于程序单元实例创建、程序单元实例删除和程序单元实例行为执行。运行时环境为用户任务提供必要的引擎功能,以执行管理行为,包括但不限于读取、预处理和转换(源代码到源代码编译)以解释语言提供的源代码,将源代码编译成解释的计算机程序,以及执行解释。执行用户任务可能需要从本地模式转换到管理模式并且从管理模式转换到本地模式。这个转换过程也由运行时环境提供。
专用队列
图11是示出根据所要求保护的主题的运行时环境方面的专用多生产者单消费者任务队列1100的方框图。专用任务队列是多生产者单消费者任务队列,用于将来自多生产者线程1101的任务同时入队并且将其同时从单消费者线程1102中出队。生产者结构线程1101在将任务入队到专用任务队列中时寻址特定的结构线程。同时入队的任务以先进先出的方式存储在链表数据结构1103中,该结构由单消费者结构线程专门拥有。消费者结构线程将入队的任务从其专用任务队列中同时出队以供执行。
共享队列
图12是示出根据所要求保护的主题的运行时环境方面的共享多生产者多消费者任务队列1200的方框图。共享任务队列是多生产者多消费者任务队列,用于将来自多生产者线程1201的任务同时入队并且将其同时从多消费者线程1202中出队。共享任务队列为结构的线程提供负载平衡。生产者结构线程在将其任务入队到共享任务队列中时寻址特定结构;生产者结构线程不能寻址特定的结构线程。同时入队的任务以在结构的线程之间共享的先进先出的方式存储在链表数据结构1203中。结构的消费者线程从共享任务队列中同时一次使一个任务出队以供执行。
任务时钟分配
任务优先级值用于定义执行结构中的任务执行的顺序(即,优先级)。执行结构包括用于区分用户任务的优先级的时钟。时钟在内部保存整数值。每次时钟增加时,保证对于每个执行结构,其输出单调增加,并且对于每个执行结构线程,其输出严格增加。每个执行结构线程增加时钟值,并在用户任务从专用任务队列中出队后立即将其当前值作为优先级值分配给用户任务,只要用户任务在之前没有被分配优先级值。
原子时钟
在一个实施方式中,运行时环境的执行结构维护原子整数值,以严格增加时钟值。原子整数在内部使用取得和添加或比较和交换(CAS)CPU指令以在多个线程上安全地并行执行时钟更新。
协作时钟分配
原子操作中使用的LOCK CPU指令前缀如果被频繁使用,可能会导致CPU争用。在运行时环境的执行结构的一个实施方式中,每个执行结构线程维护一个单独的整数值,对于每个出队的用户任务,该整数值严格地增加1,并且每个执行结构线程使用所有执行结构线程的各个整数值之和作为当前时钟值,以将其作为优先级值分配给用户任务。
任务需要在结构间行进。只要不需要重新优先级排序,行进的任务就必须以原始优先级值继续执行;如果没有发生重新优先级排序,则任务在结构线程之间行进期间保持其优先级值,以便在优先级排序很重要的结构线程中提供任务执行的正确排序。
任务流
从高性能任务队列中出队的任务在每个结构线程处组织成任务流。任务流是存储器绑定任务对象的先进先出(FIFO)队列(即,链表数据结构),如图13所示。
任务流具有以下属性:
i)S是任务流的大小(对于图13所示的任务流,S=n)。
ii)Ti是任务流中的第i个任务;i是任务与任务流的头部相距的距离。
iii)T0是在任务流的头部的任务。
iv)当T0出队时,Ti变成Ti-1,其中,1≤i<S。
v)Ki是Ti的密钥值,其中,0≤i<S。
vi)Pi是Ti的优先级值,其中,0≤i<S。
vii)P是等于T0的优先级值的任务流的优先级值。
(a)P=P0
用户任务在用户任务流中排队,系统任务在系统任务流中排队。
用户任务流具有以下属性:
i)用户任务流中的每个用户任务具有相同的密钥值,
(a)Ki=Ki+1,其中,0≤i<S-1
(b)K是等于其任务的密钥值的用户任务流的密钥值。
(c)K=Ki,其中,0≤i<S
ii)PUB是小于或等于在用户任务流的头部的用户任务的优先级值的用户级基本优先级值
(a)PUB=P0,其中,0≤i<S
iii)用户任务在用户任务流中按照严格增加的优先级顺序排队;只要不发生重新优先级排序,则不存在优先级冲突。
(a)Pi<Pi+1,其中,0≤i<S-1;没有重新优先级排序
iv)重新优先级排序可能导致用户任务流中的优先级冲突。
(a)Pi≤Pi+1,其中,0≤i<S-1;具有重新优先级排序
v)P是等于P0的优先级值的用户任务流的优先级值。
(a)P=P0
系统任务流具有以下属性:
i)系统任务流中的每个系统任务具有相同的优先级值
(a)Pi=Pi+1,其中,0≤i<S-1
ii)P是等于其任务的优先级值的系统任务流的优先级值。
(a)P=Pi,其中,0≤i<S
iii)PUB是大于系统任务流的优先级值的用户级基本优先级值。
(a)P<PUB,其中,0≤i<S
优先级顺序
任务调度是一种将任务入队到结构的专用或共享任务队列中的方法。在结构线程中调度的任务按优先级顺序执行。当线程中同时存在专用任务队列和共享任务队列时,专用任务队列中任务执行的优先级优先于共享任务队列中任务执行的优先级。
只要结构线程配置不包括优先级队列,则从专用任务队列出队的任务的优先级顺序才是其出队顺序。具有专用任务队列但没有优先级队列的结构线程可以用于某些IO结构或其他结构配置中。
优先级队列
在执行结构线程时并且在同时存在专用任务队列和优先级队列的结构线程中,从专用任务队列出队的任务的优先级排序是通过使用优先级队列来完成的;结构线程从其专用任务队列中一个接一个地将所有现有的任务出队,并且如果出队的任务之前没有被分配优先级值,则使用其时钟为每个出队的任务分配优先级值,并且将每个出队的任务入队到其优先级队列中,然后将优先级最高的任务从优先级队列中出队以供执行。
图14是根据所要求保护的主题的运行时环境方面的结构线程优先级队列的方框图。优先级队列包括系统任务优先级队列1420、用户任务优先级队列1430和最终任务优先级排序器1410。在如图14所示的优先级队列的实施方式中,系统任务在系统任务优先级队列1420中被优先化,并且用户任务在用户任务优先级队列1430中被优先化。在优先级排序中使用任务流,而不是单个任务。任务流的优先级值是该流的头任务的优先级值。
在系统任务优先级队列1420的优选实施方式中,系统任务流1440的向量用于系统任务的优先级排序。向量的大小等于系统级优先级的数量。从专用任务队列中出队的每个系统任务被入队到位于系统任务流向量1440的索引处的系统任务流中,该索引等于系统任务的优先级值。只要其系统任务流向量1440的所有系统任务流都为空,系统任务优先级队列1420就为空。
在用户任务优先级队列1430的实施方式中,斐波纳契堆1450用于用户任务流的优先级排序,然而,使用二进制堆、或二项式堆或实现优先级排序的另一数据结构不会改变结果。斐波纳契堆1450存储任务流。斐波纳契堆1450由用户任务优先级队列1420中的任务流字典1460辅助。在如图14所示的实施方式中,红黑树数据结构可用于实现任务流字典,然而,使用散列表或实现字典功能的另一数据结构不会改变结果。任务流字典1460存储指向任务流的指针,并为给定的任务密钥提供对任务流的快速访问。从专用任务队列中出队的每个用户任务都被入队到与其密钥值匹配的用户任务流中。任务流字典1460用于查找与出队的用户任务的密钥值匹配的匹配用户任务流。
在一实施方式中,结构线程利用最终任务优先级排序器1410将最高优先级的任务从优先级队列中出队。在优先级排序过程中,最终任务优先级排序器给予系统任务优先级队列1420比用户任务优先级队列1430更高的优先级。如果系统任务优先级队列不是空的,则最高优先级的系统任务(即,优先级值最低的系统任务)从系统任务优先级队列中出队;最终任务优先级排序器1410从开始到结束线性地搜索系统任务流向量1440,以找到不为空的第一个任务流,并将系统任务从该系统任务流中出队。如果系统任务优先级队列为空,则将最高优先级的用户任务(即,优先级值最低的用户任务)从用户任务优先级队列中出队;最终任务优先级排序器利用斐波纳契堆等来查找具有最高优先级的任务流,并将用户任务从该任务流中出队。每当用户任务从用户任务流中出队时,该用户任务流的优先级会随着用户任务流头部的变化而变化。要求斐波纳契堆1440重新排列任务流的优先级,以补偿该任务流中的这种变化。
出于并发控制和其他任务编排的目的,阻塞和解除阻塞用户任务流。通过将其标记为阻塞,来完成阻塞任务流。图14中示出了示例的已阻塞的任务流K1 1470和Ki+1 1480。在任务流解除阻塞(即,标记为未阻塞)之前,没有任务从阻塞的任务流中出队。只要阻塞了用户任务优先级队列的所有现有的用户任务流,用户任务优先级队列就为空。只要系统任务优先级队列和用户任务优先级队列都为空,优先级队列就为空。换言之,阻塞的任务流从任务优先级排序过程中移除,并且在已阻塞的任务流解除阻塞之前,不会从已阻塞的任务流执行任务。
如果不存在专用任务队列,或者存在专用任务队列但为空,或者结构的专用任务队列和优先级队列都为空,则结构线程将任务从共享任务队列中出队以供执行。从共享任务队列出队的任务的优先级顺序是其出队顺序。
任务执行器
每个执行结构包括任务执行器和用于执行任务的程序解释器(例如,LLVM引擎或ECMAScript引擎)。任务执行器执行本地行为和管理行为。任务执行器利用程序解释器来执行管理行为。任务执行器在隔离的解释程序执行上下文中执行解释程序。任务执行器还利用程序解释器提供的接口和回调机制来处理从解释程序(即,管理的)执行上下文到本地执行上下文的转换,反之亦然。
任务并行化
不同程序单元实例的行为执行的隐式并行化是通过任务执行的并行化来实现的。单个任务执行的并行化是通过在并行运行的独立结构线程上调度具有不同密钥值的任务的同时执行来实现的(即,被分配以在独立的处理核上运行)。尽管如此,程序单元实例行为的执行可以通过调度并行运行的结构线程上的其IO操作和子行为执行的新任务来进一步并行化。
协同程序
运行时环境将执行结构线程的执行上下文划分为多个执行上下文,用于由同一执行结构线程内的用户任务执行的解释程序的高性能协作多任务处理。将执行结构线程的执行上下文划分为多个执行上下文是通过在协同程序执行上下文(在本文中也称为协同程序)中执行每个用户任务来实现的。在协同程序中执行用户任务,使用户任务能够对执行结构线程的主要子例程产生执行,从而执行结构线程的主要子例程可以按优先级顺序继续执行其他任务。例如,当以直接样式编程范例编写并由协同程序中的用户任务执行的程序单元实例行为的执行不能继续其执行,并且必须等待先前调度的IO操作的结果时,它产生对执行结构线程的主要子例程的执行,使得其他任务可以按优先级顺序执行。通过在产生用户任务的结构线程处执行系统任务,来实现先前产生的用户任务的恢复;系统任务指示执行结构线程恢复在其执行时先前产生的任务的协同程序,并且还可以提供IO操作的结果。所产生的任务的协同程序可以缓存在用户任务中,并且对应的系统任务可以缓存用户任务。
连续
运行时环境通过执行连续解释程序,以连续传递方式(CPS)对以解释语言定义的程序单元实例执行操作。每个程序单元行为执行都是作为连续解释程序(在本文中也称为连续)的执行开始的,不管其是否调度了其他连续。每个连续执行可以调度零个、一个或多个连续执行,形成以CPS中编写的解释程序定义的连续执行树。连续树的每个连续都是由同一个结构线程上的协同进程中的用户任务执行的。用户任务在其第一次在执行结构线程上执行时,执行根级连续。针对在由用户任务执行的连续解释程序中进行的每个连续传递样式函数调用,调度系统任务,以便调度由用户任务进行的后代连续的执行。用于调度由用户任务进行的后代连续的执行的系统任务在本文中被称为连续系统任务。连续系统任务引用用户任务和执行连续所需的其他状态。连续系统任务可以被调度,以在其最终执行之前在一系列线程上执行。连续系统任务的最终执行总是在执行结构线程上进行,在执行结构线程处调度连续系统任务的原始用户任务正被执行。因此,在连续系统任务的最终执行之后,执行结构线程执行用户任务,以执行调度的后代连续。连续系统任务在其最终执行完成时完成。例如,为了完成利用IO结果的连续的执行,连续系统任务可以被调度,以在IO结构线程上执行,以用于IO操作的异步执行。当IO操作的执行完成时,连续系统任务可以返回到执行结构线程,以进行最终执行。然后,用户任务在执行结构线程处利用IO结果执行连续。每一个连续都可以在其执行期间中被产生和恢复。
每个用户任务维护连续参考计数,以计数未完成的调度连续的数量;在创建每个用户任务时,连续参考计数初始化为零。用户任务的连续参考计数对于每个调度的连续增加,并且在每个调度的连续的执行完成时减少,每个调度的连续包括由用户任务执行的根级连续。只要在连续的执行完成后连续参考计数减少到0,用户任务的执行就被视为完成。
隐式并发控制
并发控制间隔覆盖了从第一连续的执行开始到最后一个连续的执行结束的对程序单元实例的操作的执行,这是由用户任务的连续参考计数跟踪的。
运行时环境经由用户任务分两步为程序单元实例上的操作执行提供隐式并发控制。
在第一步,运行时环境确保具有相同密钥值的用户任务总是在相同的执行结构线程中执行。换言之,确保在多个结构线程上不存在关于同一程序单元实例的操作的重叠执行。通过使用散列函数,具有相同密钥值的用户任务可以路由到相同的线程以执行。例如,可以使用散列函数对每个用户任务密钥值进行散列,以生成64位合成整数,并且在合成整数除以结构的当前大小(即,结构线程的数量)之后的余数可以生成目标结构线程的索引。当索引已知时,可以从执行结构获得目标结构线程的专用任务队列,以将用户任务入队到目标结构线程的专用任务队列中以供执行。
在第二步,当具有相同任务密钥值的用户任务从专用任务队列中出队并入队到优先级队列中时,这些用户任务入队到执行结构线程的相同用户任务流中。通过使用用户任务的密钥值,从执行结构线程的任务流字典中获得与用户任务的密钥值匹配的用户任务流。如果不存在与用户任务具有相同任务密钥值的用户任务流,则执行结构线程创建在其中包含用户任务的新用户任务流、将其插入斐波纳契堆中、对斐波纳契堆进行优先级排序、并将其指针插入任务流字典中。为了防止与正在执行的用户任务具有相同密钥值的用户任务流中的另一用户任务的重叠执行,在用户任务的第一连续的执行开始之前,阻塞用户任务流,并且在用户任务的最后一个连续的执行完成之后,解除阻塞。如果直到用户任务流被解除阻塞之前正在被执行的用户任务产生其执行或通过多个连续执行,则阻塞用户任务流防止执行同一用户任务流中的另一用户任务。
并发控制机制
程序单元的并发控制类型和并发控制设置作为程序单元配置定义的一部分由程序员指定。由运行时环境提供的并发控制类型包括互斥并发控制、信号量并发控制和读取器-写入器并发控制。
运行时环境通过在执行期间保持阻塞每个用户任务的用户任务流,来提供隐式互斥并发控制。
运行时环境通过使用并发控制计数整数来提供隐式信号量并发控制,对于需要信号量并发控制的用户任务流,该整数被初始化为给定的初始信号量计数。每次来自用户任务流的用户任务的执行开始之前该用户任务流的并发控制计数减少,并且每次来自用户任务流的用户任务的执行完成时该用户任务流的并发控制计数增加。只要并发控制计数降至0,就阻塞用户任务流,并且只要并发控制计数大于零,就保持用户任务流不被阻塞。
运行时环境通过对需要读取器-写入器控制的用户任务流使用初始化为0的并发控制计数整数来提供隐式读取器-写入器并发控制。
在提供隐式读取器-写入器并发控制的运行时环境的实施方式中,在执行每个出队的用户任务之前,可以对于每个出队的用户任务使用以下算法:
i)如果用户任务将要执行读操作
(a)增加并发控制计数
(b)开始执行用户任务
ii)结束判断
iii)如果用户任务将要执行写操作
(a)阻塞用户任务流
(b)如果并发控制计数为零
1.开始执行用户任务
(c)否则
1.不要执行用户任务,将其放在的头部
2.其任务流
(d)结束判断
iv)结束判断
在提供隐式读取器-写入器并发控制的运行时环境的实施方式中,可以对于每个完成的用户任务使用以下算法:
i)如果用户任务完成了写操作的执行
(a)解除阻塞用户任务流
ii)结束判断
iii)如果用户任务完成了读操作的执行
(a)减少并发控制计数
(b)如果并发控制计数为0
1.如果用户任务流被阻塞
i.解除阻塞用户任务流
2.结束判断
(c)结束判断
iv)结束判断
同一任务流的并发执行的用户任务缓存在系统任务中。
未来的直接样式
运行时环境允许在解释程序中混合连续传递样式和直接样式编程。运行时环境利用隐式未来变量和隐式承诺函数,以便为以直接样式编写的解释程序的每次执行的隐式并发提供隐式并发控制。
在以直接样式编写的解释程序中,调用隐式承诺函数来执行并发IO操作或者行为调度系统任务,以便在结构线程上并发地执行隐式承诺函数,并将相关联的隐式未来变量(在本文中也称为未来或隐式未来)返回给调用方。为执行承诺函数而调度的系统任务在本文中也称为承诺系统任务。承诺系统任务可以被调度以在其最终执行之前在一系列线程上执行。承诺系统任务的最终执行始终在执行结构线程上完成,在执行结构线程处调度承诺系统任务的原始用户任务正被执行。隐式未来的值进一步在执行时间上由执行结构线程中所调度的承诺系统任务在其最终执行时解析,在执行结构线程上解释程序正经由用户任务被执行。承诺系统任务引用了用户任务和完成承诺的执行所需的其他状态。
经由异步IO操作或行为执行调用调度承诺系统任务,不会导致执行连续,以产生执行;因此,连续的执行和多个承诺的执行可以并行地运行。当连续解释程序的执行访问未解析未来的值时,执行连续的协同程序将对执行结构线程子例程产生执行。如果存在未完成的调度的连续,则将推迟其执行,直到恢复和完成了所产生的连续的执行为止。当用承诺系统任务调度的异步IO操作或并发行为执行完成时,承诺系统任务用IO或执行结果更新,并被调度以在执行用户任务的执行结构线程上执行。对应的执行结构线程子例程然后出队并执行承诺系统任务。在执行结构线程中执行承诺系统任务解析相关联的未来的值,并恢复执行由于访问未解析的未来的值而产生的连续的协同程序。当产生的连续恢复时,从产生其的指令开始继续其执行。
用于连续传递样式的隐式并发控制
根据主题的运行时环境方面,在图15中描述了以连续传递样式(CPS)编写的以下样本ECMAScript代码的隐式并发控制。
执行结构线程使用户任务出队,并在附图标记1501处执行用户任务。用户任务的执行从将用户任务的连续参考计数设置为0开始。针对调度的每个连续增加连续参考计数,因此在执行用户任务时连续参考计数增加到1,以覆盖用户任务对根级连续的调度执行。然后,阻塞用户任务流,以防止从与正在执行的用户任务具有相同密钥值的用户任务流中执行另一用户任务。为了执行连续解释程序,用户任务获取协同程序,并向获取的协同程序产生执行。
在附图标记1502处,连续解释程序的执行在隔离的解释程序执行上下文中开始。
在附图标记1503处,用“someParameter”值和“someContinuation”连续函数调用“somIOCallWithContinuation”函数,并且因此,是引用了用户任务的新连续系统任务,并且在某种IO结构线程上调度“someParameter”的值以执行某种IO操作。然后,连续参考计数增加到2。
在附图标记1504处,开始执行IO操作;此时,根级连续解释程序的执行和调度的IO操作的执行重叠。
在附图标记1505处,根级连续解释程序退出,对执行用户任务的执行结构线程产生执行。用户任务将连续参考计数减少到1。因此,用户任务的执行返回到执行服务结构的主要子例程。执行服务结构线程按优先级顺序执行来自未阻塞的任务流中的其他任务。同时,IO操作继续其并行执行。
在附图标记1506处,调度的IO操作完成,并且用IO结果更新连续系统任务,然后,调度连续系统任务以在执行结构线程上执行。执行结构线程继续执行其他任务,直到将携带“SomeIOResult”的值的连续系统任务从其优先级队列中出队。在附图标记1507处执行出队的连续系统任务。
在附图标记1508处,在隔离的解释程序执行上下文中执行“SomeContinuation”函数,IO结果的值作为“SomeIOresult”参数传递到“SomeContinuation”函数的执行。
在附图标记1509处,“SomeContinuation”退出。对执行用户任务的执行结构线程产生执行。用户任务将连续参考计数减少到0。用户任务释放协同程序,并且与用户任务具有相同密钥值的用户任务流被解除阻塞,以允许执行共享相同密钥值的其他任务。
直接样式的隐式并发控制
根据主题的运行时环境方面,在图16中描述了以直接样式(DS)编写的以下样本ECMAScript代码的隐式并发控制。
执行结构线程使用户任务出队,并在附图标记1601处执行用户任务。用户任务的执行从将用户任务的连续参考计数设置为0开始。对于调度的每个连续增加连续参考计数,因此在执行用户任务时连续参考计数增加到1,以覆盖用户任务对根级连续的调度执行。然后,阻塞用户任务流,以防止从与正在执行的用户任务具有相同密钥值的用户任务流中执行另一用户任务。为了执行连续解释程序,用户任务获取协同程序,并对获取的协同程序产生执行。
在附图标记1602处,连续解释程序的执行在隔离的解释程序执行上下文中开始。
在附图标记1603处,用“someParameter”值调用“someImplicitlOPromise”函数,并且因此,是引用了用户任务的新承诺系统任务,并且在某种IO结构线程上调度“someParameter”的值以执行某种IO操作。
在附图标记1604处,IO操作的执行开始;此时,根级连续解释程序的执行和调度的IO承诺的执行重叠。
在附图标记1605处,主要行为继续执行访问未解析的“未来”变量的值。由于“未来”变量的值还没有解析,所以在协同程序中运行的连续对执行结构线程子例程产生执行。执行服务结构线程按优先级顺序执行来自未阻塞的任务流中的其他任务。同时,IO操作继续其并行执行。
在附图标记1606处,调度的IO操作完成,并且用IO结果更新承诺系统任务,然后,调度承诺系统任务以在执行结构线程上执行。执行结构线程继续执行其他任务,直到将携带值“SomeIOResult”的值的承诺系统任务从其优先级队列中出队。
在附图标记1607处,执行出队的连续系统任务,因此解析了未来变量的值并恢复了执行所产生的连续解释程序的协同程序。
在恢复协同程序之后,在1608处,所产生的解释程序从使其产生的指令继续执行。
在附图标记1609处,恢复的连续退出。对执行用户任务的执行结构线程产生执行。用户任务将连续参考计数减少到0。用户任务释放协同程序,并且与用户任务具有相同密钥值的用户任务流被解除阻塞,以允许执行共享相同密钥值的其他任务。
整体数据流示例
图17是根据所要求保护的主题的运行时环境方面的网络请求的示例性数据流图。在这个示例中,HTTP客户端1701向运行时环境发出请求,该运行时环境包括网络结构1702、执行结构1703和具有本地存储装置1705的存储结构1704。运行时环境的其他实施方式不改变这个示例中概述的主要原理。
在这个示例中,运行时环境托管包括程序单元的服务。HTTP客户端1701发出连接请求,并向网络结构1702发送关于其HTTP请求的网络包1706。运行时环境使用网络结构1702与HTTP客户端1701进行反向通信1707。如果连接是安全连接(例如,TLSv1.2),则HTTP客户端1701和网络结构1702来回通信,以建立安全连接。在建立连接之后,HTTP客户端1701和网络结构1702来回通信,以便运行时环境接收HTTP请求的所有比特。如果由于运行时环境中发生的客户端错误、损坏的请求或内部错误而无法创建HTTP请求,则将错误响应发送回HTTP客户端1701。
在这个示例中,创建并调度代表HTTP请求的任务,以在执行服务1703上执行该任务。在这个示例中,HTTP请求有关于执行程序单元实例的互斥行为,因此,任务从执行结构1703继续1708到存储结构1704,以从存储装置1705读取行为。存储结构1704调度IO操作1709,以从存储装置1705读取可能已经被编译的行为。
当读取行为完成1710时,用户任务被调度1711(即,入队)以在特定执行结构1703线程上执行,通过利用散列函数和从HTTP请求获得的任务密钥(即,程序单元实例密钥)值来识别该执行结构线程。作为解释程序的程序单元行为经由用户任务在执行结构1703线程上执行。
在任务执行期间,连续或承诺系统任务可以被调度以在存储结构1704上执行1708以用于存储操作,或者被调度以在网络结构1702上执行1712以用于进行输出网络调用(例如,对其他结构的HTTP请求),并且不允许在同一程序单元实例上的任何操作的其他执行。最后,系统任务被调度以在网络结构1702上执行1712,用于使网络结构1702将执行响应响应1707回HTTP客户端1701。
鉴于上述示例性系统,参照图18至图23中呈现的流程图,将更好地理解根据所公开的主题可以实现的方法。尽管为了解释简单起见,这些方法被示出和描述为一系列方框,但是应当了解和理解,所要求保护的主题不受方框的顺序限制,因为一些方框可以以不同的顺序出现和/或与本文中描绘和描述的其它方框同时出现。此外,并非所有示出的方框都需要实现下文描述的方法。
图18是示出根据所要求保护的主题的运行时环境方面的由执行结构线程子例程1800执行的方法的示例的流程图。在这个示例中,存在专用任务队列、优先级队列和共享任务队列(例如,参见图10)。执行结构线程子例程可以包括循环1801以经由任务队列处理接收的任务。
在判定框1802,确定执行结构线程中存在的每个队列是否为空。如果在判定框1802,每个队列都是空的(或等同的),则该方法前进到方框1803等待,直到任务到达结构线程的任何队列。
如果在判定框1802,至少一个任务队列不是空的,则该方法按优先级顺序将任务出队。该方法前进到判定框1804,以确定专用任务队列是否为空。如果在1804,专用任务队列不是空的(或等效的),则该方法前进到方框1805,以将专用任务队列内容移动到优先级队列中。
如果在判定框1804,专用任务队列为空,则该方法前进到判定框1806,以确定优先级队列是否为空。
如果在判定框1806,优先级队列不是空的,则该方法前进到方框1807,以将最高优先级任务从优先级队列中出队,然后前进到方框1810,以执行出队任务(其可以作为子例程执行)。
如果在判定框1804,专用任务队列为空,并且在判定框1806,优先级队列为空,则该方法前进到判定框1808,以确定共享任务队列是否为空。
如果在判定框1808,共享任务队列不是空的,则该方法前进到方框1809,以将任务从共享任务队列中出队,并且前进到方框1810,以执行出队的任务(其可以作为子例程执行)。例如,在图19中描绘了执行用户任务1900的方法,在图20中描绘了执行连续系统任务2000的方法,并且在图21中描绘了执行承诺系统任务2100的方法。
每次在方框1810执行出队任务时,该方法前进到判定框1811,以确定是否返回关闭任务执行状态。如果在判定框1811,确定“关闭”执行状态,则该方法终止执行结构子例程循环。
如果在判定框1808,共享任务队列为空,则该方法返回到判定框1802,以继续执行结构子例程循环1801。
图19是根据所要求保护的主题的运行时环境方面的由执行结构线程1900中的用户任务执行模块执行的方法的示例的流程图。
在方框1901,用户任务执行模块将任务的连续参考计数整数的值设置为0。
在方框1902,用户任务执行模块增加连续参考计数,以覆盖用户任务对根级连续的调度执行。
在方框1903,用户任务执行模块阻塞与正在被执行的用户任务具有相同密钥值的用户任务流,以防止从该用户任务流执行其他任务。
在方框1904,用户任务执行模块获取协同程序,以便在协同程序上下文中执行连续解释程序,以便在同一执行结构线程内进行协作多任务处理。可以通过创建新的用户任务连续解释程序或者从高速缓存中检索先前创建的用户任务连续解释程序来实现协同程序的获取。
在可以作为子例程执行的方框1905,用户任务执行模块继续执行用户任务连续解释程序。在图22中描绘了连续2200的执行方法的示例。
图20是根据所要求保护的主题的运行时环境方面的由执行结构线程2000中的连续系统任务模块执行的方法的示例的流程图。
在判定框2001,确定属于同一连续树的另一系统任务连续是否正在进行中。连续系统任务或在连续系统任务执行之前已产生其执行但是没有恢复的连续用户任务解释程序的执行,导致连续处于进行中,并且必须在执行其他连续之前完成正在进行的连续的执行。
如果在判定框2001处,属于同一连续树的另一连续正在进行中,则连续系统任务模块在方框2002处继续,以将用于延迟执行的连续入队到在用于延迟连续的用户任务中维护的先进先出队列中。如果属于相同连续树的另一连续在判定框2001中没有正在进行,则连续系统任务模块在方框2003继续以执行连续,连续可以作为子例程来执行。图22中描绘了连续2200的执行方法的示例。
图21是示出根据所要求保护的主题的运行时环境方面的由执行结构线程2100中的承诺系统任务执行模块执行的方法的示例的流程图。
在方框2101,承诺系统任务执行模块解析隐式未来变量的值。
在方框2102,恢复所产生任务的协同程序。所产生的任务的协同程序可以缓存在用户任务中,用户任务可以缓存在承诺系统任务中。一旦恢复了协同程序,先前产生的连续解释程序就从其产生的指令开始继续执行。
图22是示出根据所要求保护的主题的运行时环境方面的由连续执行模块2200执行的方法的示例的流程图。
在可以作为子例程执行的方框2201,在协同程序执行上下文中执行连续解释程序。结合图23的协同程序执行上下文模块2300,示出并讨论了在协同程序执行上下文中执行连续解释程序的方法的示例。
在判定框2202,确定在协同程序执行上下文中执行的连续解释程序是完成了还是已经产生了其执行。
如果连续在判定框2202处完成,则连续执行模块在方框2203处继续,以减少连续参考计数(例如,在用户任务执行模块1900中可能已增加了)。
如果在判定框2202产生连续,则连续执行模块2200可以返回到例如执行结构线程子例程1800的主要子例程,以便从未阻塞的任务流中按优先级顺序执行其他任务。
在判定框2204,可以确定连续参考计数是否为0。
如果在判定框2204,连续参考计数为0,则连续执行模块2200在方框2205继续,以释放协同程序执行上下文。释放协同程序可以通过处置协同程序执行上下文来实现,或者可以通过将协同程序执行上下文存储到高速缓存中来实现。
在方框2206,连续执行模块2200对与正在执行的用户任务具有相同的任务密钥值的用户任务流解除阻塞。
如果在判定框2204,连续参考计数不是0,则连续执行模块2200在判定框2207继续。在判定框2207,可以确定是否存在任何延迟的连续解释程序。
如果在判定框2207,存在任何延迟的连续解释程序,则连续执行模块2200在方框2208继续,以使连续解释程序从延迟的连续先进先出链表中出队(其示例关于图11和图12被示出和讨论)。
连续执行模块2200可以继续循环回到方框2201,以执行出队的连续解释程序。
图23是示出根据所要求保护的主题的运行时环境方面的由协同程序执行上下文模块2300执行以执行连续解释程序的方法的示例的流程图。
在方框标号2301处,协同程序执行上下文模块2300对获取的协同程序产生执行,以开始执行连续解释程序。在方框2302,协同程序执行上下文模块2300在隔离的解释程序执行上下文中执行连续解释程序,并为在程序执行时所调度的每个连续解释程序增加连续参考计数。
在方框2303,协同程序执行上下文模块2300继续对执行结构线程的主要子例程产生执行。
主题的运行时环境方面实现了通用多生产者单消费者队列,并将其用作专用任务队列的实施方式。通用多生产者单消费者队列维护2个链表;生产者链表和消费者链表。生产者链表在多个生产者之间共享;多个生产者同时将生产节点入队到生产者链表中。消费者链表仅由消费者访问;消费者将节点从其中出队。
当创建通用多生产者单消费者队列时,生产者和消费者链表都是空的。随着生产者推动节点,生产者链表增长。当消费者将节点出队时,空的消费者链表和生产者链表交换。新的生产者链表不断增长,并且消费者线程访问消费者队列仅仅是为了将现有节点从其中出队。当消费者链表再次变为空时,空的消费者链表和生产者链表再次交换。这样,只有一个原子指令用于将生产者链表与空的消费者链表交换,生产者链表包含交换之间产生的所有节点。其余的消费者出队操作不需要原子CPU操作。这种方法大大减少了消耗产生的节点所需的原子CPU指令,尤其是当存在快速生产者时,这大大减少了并发队列操作期间的CPU争用。
通用多生产者单消费者队列的实施方式包括头部指针、尾部指针,并且还可以包括队列节点。通用多生产者单消费者队列中的每个节点都包括指向下一节点的指针。头部指针指向消费者链表的开头,并且用于所产生的节点从消费者链表中出队,而不使用任何同步机制。尾部指针指向生产者链表的端部,并且用于将新节点与原子操作并发地入队到生产者链表中。汇聚节点的下一指针指向生产者链表的开始,并且用来原子地交换生产者链表的开始和消费者链表的开始。也标志着消费者链表的结束。
图24是根据所要求保护的主题的运行时环境方面的通用多生产者单消费者队列的空生产者链表结构和空消费者链表结构的方框图。生产者链表的端部由终止符2404标记。指向终止符2404的汇聚节点2403的下一指针指示空生产者链表。消费者链表的端部通过指向汇聚节点2403来标记。指向汇聚节点2403的头部指针2401指示空的消费者链表。当初始化通用多生产者单消费者队列时,生产者链表为空,消费者链表为空,尾部指针2402指向汇聚节点。
图25是根据所要求保护的主题的运行时环境方面的通用多生产者单消费者队列的非空生产者链表结构和空消费者链表结构的方框图。汇聚节点2502的下一指针指向生产者链表的第一队列节点2503。尾部指针2505指向终止2506的生产者链表中的最后一个队列节点2504。头部指针2501指向汇聚节点2502,指示空的消费者链表。
图26是根据所要求保护的主题的运行时环境方面的在生产者链表与空消费者链表结构2600交换之后的通用多生产者单消费者队列的方框图。头部指针2601指向消费者链表的第一队列节点。尾部指针2605指向汇聚节点2603,以增加新的生产者链表。汇聚节点2603的下一指针指向终止符,以指示空的生产者链表。
图27是根据所要求保护的主题的运行时环境方面的初始化通用多生产者单消费者队列2700的示例的流程图。在附图标记2701,汇聚节点终止。在附图标记2702,头部指针指向汇聚节点。在附图标记2703,尾部指针指向汇聚节点。在附图标记2704,初始化唯一锁(互斥锁)和队列的条件变量。只要没有任何消耗,唯一锁和条件变量用于阻塞消费者线程,并用于在消耗至少一个节点时唤醒消费者线程。在附图标记2705,注册通知对象,以便当通用多生产者单消费者队列变得非空时通知。通知对象被发信号以通知注册商在消耗至少一个节点时通知。
图28是根据所要求保护的主题的运行时环境方面的将队列节点入队到通用多生产者单消费者队列2800的示例的流程图。在附图标记2801,入队的节点的下一指针被设置为终止符。该方法在标记2802处继续,将尾部指针与入队的节点的存储器地址原子地交换,并将尾部指针指向的前一存储器地址分配给在程序线程执行的堆栈中创建的ex_tail指针。在附图标记2803,ex_tail变量的下一指针被设置为入队的节点的存储器地址。在标记2804,确定ex_tail是否指向汇聚节点。在标记2804处如果ex_tail指向汇聚节点,则该方法在标记2805处获取队列的唯一锁。在标记2804处如果ex_tail没有指向汇聚节点,则该方法返回。在标记2806,通知队列的条件变量一次。然后,在附图标记2807,通知所有注册的通知对象。在附图标记2808,释放队列的唯一锁。
图29是根据所要求保护的主题的运行时环境方面的将队列节点从通用多生产者单消费者队列2900出队的示例的流程图。在附图标记2901,确定头部指针是否指向汇聚节点。如果头部指针指向标记2901处的汇聚节点,这意味着消费者链表是空的,并且需要与生产者链表交换,则该方法在标记2902处获取队列的唯一锁,以阻塞消费者队列。在标记2903,确定汇聚节点是否终止。在标记2903处如果汇聚节点终止,则该方法在标记2904处等待通知条件变量。然后,该方法继续循环回到参考标记2903,其中,确定汇聚节点是否终止。在标记2903处如果汇聚节点没有终止,则该方法在标记2905处继续,以释放队列的唯一锁。在标记2906,该方法将头部指针指向由汇聚节点的下一指针指向的节点。该方法在标记2907处继续,以将汇聚节点的下一指针设置为终止符。在标记2908,该方法原子地将尾部指针与汇聚节点的地址交换,并将尾部节点的前一存储器地址分配给ex_tail变量。该方法在标记2909处继续,以将ex_tail变量的下一指针设置为汇聚节点的存储器地址。在标记2910,该方法将节点从消费者链表中出队。在标记2901处如果头部节点没有指向汇聚节点,则该方法将节点从消费者链表中出队。在图30中描述了将节点从消费者链表3000中出队的方法。
图30是根据所要求保护的主题的运行时环境方面的将节点从通用多生产者单消费者队列3000的消费者链表中出队的示例的流程图。在标记3001,堆栈中创建的yield_thread标志的值被设置为假。在标记3002,next_ptr变量的值被设置为由头部指针所指向的节点的下一指针指向的节点的存储器地址。在标记3003,确定next_ptr是否指向终止符。在标记3003处如果next_ptr指向终止符,则该方法在标记3004处继续,以确定yield_thread标志的值是否为真。在标记3004处,如果yield_thread标志的值为真,则该方法在标记3005处向另一线程产生执行,并继续循环回到标记3003。在标记3004处,如果yield_thread标志的值为假,则该方法前进到标记3006,以将yield_thread标志的值设置为真,并继续循环回到标记3003。在标记3003处,如果next_ptr没有指向终止符,则该方法在标记3007处继续,以将head_to_dequeue变量的值设置为头部节点的存储器地址。在标记3008,该方法将头部指针指向由头部指针所指向的节点的下一指针值。在附图标记3009,head_to_dequeue的下一指针被设置为终止符。在附图标记3010处,返回head_to_dequeue的值,其中head_to_dequeue是要出队的节点。
词语“示例性”或其各种形式在本文中用于表示用作示例、实例或说明。在本文中描述为“示例性”的任何方面或设计不一定被解释为比其他方面或设计更优选或更有利。此外,提供示例,仅仅是为了清楚和理解,并不意味着以任何方式限制或约束所要求保护的主题或本公开的相关部分。应当理解,可以呈现各种范围的大量额外或替代示例,但是为了简洁起见,省略了这些示例。
以下是本文公开的实施方式的示例:
在下面的第一组示例中,子示例分层排列,分层层级按照以下结构排列:示例1.A.1)a)i)aa)。
在下面列出的第一组示例中,每个子级别可以是根据高于该子级别的任何级别的示例的示例;可以组合来自不同子级别和示例上的实例。
以下是关于具有隐式并发控制的高性能服务的编程模型和解释运行时环境的系统、方法、设备和计算机可读介质的第一组示例,包括:
示例1.一种编程模型,包括计算机程序服务定义;解释的语言;并发控制配置;以及行为定义。
A.其中,并发控制配置包括并发控制类型和初始信号量计数;
1)其中,并发控制类型是无并发控制、互斥并发控制、信号量并发控制或读取器-写入器并发控制;
B.其中,行为定义包括连续函数;以及操作类型,
1)其中,连续函数包括以连续传递样式(CPS)或直接样式(DS)编写的至少一个程序指令,
2)其中,操作类型是读或写,
C.其中,计算机程序服务定义包括服务名称;计算机程序单元定义;服务配置;以及行为定义,
1)其中,在计算机程序服务定义的服务名称中,服务名称是唯一的,
2)其中,计算机程序单元定义形成计算机程序单元定义的树,
3)其中,计算机程序单元定义包括单元名称;单元定义密钥;单元结构;以及行为定义,
a)其中,单元名称在计算机程序单元定义的定义树中的计算机程序单元定义的同胞单元名称中是唯一的,
b)其中,单元定义密钥是全局唯一的,
c)其中,单元配置包括并发控制配置;以及多例标志,
4)其中,服务配置包括计算机程序单元定义的树的树信息;以及并发控制配置;
a)其中,树信息的每个树节点包括计算机程序单元定义的单元名称和单元定义密钥。
D.其中,每个计算机程序服务定义都存储在可以用服务名称访问的存储介质上;
1)其中,每个计算机程序单元定义都可以通过单元定义密钥访问。
示例2.一种运行时环境的系统、方法、装置和计算机可读介质,包括:计算机程序服务实例;任务;隐式承诺函数;隐式未来变量;以及运行时环境进程,
A.其中,计算机程序服务实例是计算机程序服务定义的实例,
B.其中,计算机程序服务实例包括服务实例数据,该数据在计算机系统存储器中处理并存储在计算机存储介质中;以及计算机程序单元实例,
1)其中,服务实例数据包括服务名称;以及服务实例操作数据,
a)其中,服务实例操作数据包括键/值对的无序集合,其中,密钥是字符串;以及零或更多值的有序列表,每个值可以是任何数据类型。
2)其中,计算机程序单元实例是计算机程序单元定义的实例,
3)其中,当设置了计算机程序单元定义的单元配置的多例标志时,允许计算机程序单元定义具有多于一个相应的计算机程序单元实例,
4)其中,计算机程序单元实例形成计算机程序单元实例的树,
5)其中,计算机程序单元实例包括单元实例数据,该数据在计算机系统存储器中处理并存储在计算机存储介质,
a)其中,单元实例数据包括服务名称;单元定义密钥;单元实例密钥;上升计算机程序单元实例的列表拓扑;以及单元实例操作数据,
i)其中,单元实例密钥是全局唯一的,
ii)其中,单元实例操作数据包括键/值对的无序集合,其中,密钥是字符串;以及零或更多值的有序列表,每个值可以是任何数据类型。
iii)其中,上行计算机程序单元实例的列表拓扑的每个节点包括单元定义密钥;以及单元实例密钥,
C.其中,该任务包括任务操作;任务优先级;任务密钥;争论;连续参考计数;以及协同程序执行上下文中的至少一个,
1)其中,任务操作包括以下中的至少一项:创建对应于服务名称的计算机程序服务实例;为运行时环境进程生成的单元实例密钥创建计算机程序单元实例;删除由服务名称指示的计算机程序服务实例;删除由单元实例密钥指示的计算机程序单元实例;执行由服务名称指示的计算机程序服务定义的连续函数;在由单元实例密钥指示的计算机程序单元实例上执行计算机程序单元定义的连续函数;执行隐式承诺函数;解析未来变量的值;以及恢复协同程序执行上下文;
2)其中,用任务的协同程序执行上下文中的参数来执行任务操作,
3)其中,在任务操作的执行期间,操纵服务实例操作数据和单元实例操作数据,
4)其中,任务密钥是在计算机程序服务实例上执行的任务操作的服务名称,并且任务密钥是在计算机程序单元实例上执行的任务操作的单元实例密钥,
5)其中,在每个连续函数的执行期间作为参数传递给CPS样式函数的每个连续函数的执行与另一任务一起调用,该另一任务入队到与在其上执行顶层连续函数相同的线程的相同任务队列中,
6)其中,连续参考计数用于计数未完成连续的数量,该数量在任务创建时初始化为0,
a)其中,连续参考计数对于每个创建的任务增加,以调用包括顶层连续函数的连续函数,
b)其中,连续参考计数在每个连续函数完成时减少,
7)其中,任务优先级是系统级优先级或自然数中的一个,该自然数从最大系统级优先级之后开始,并由运行时环境进程对每个任务单调增加,其中,较小的数字优先,
D.其中,运行时环境进程包括结构;程序解释器,
1)其中,程序解释器编译并执行连续函数,
2)其中,结构包括线程,
a)其中,线程包括线程索引;任务队列;任务流;优先级队列;散列函数;以及子例程,
i)其中,每个线程由线程索引识别,该线程索引从0开始并且对于每个结构中的每个线程增加。
ii)其中,任务队列是任务的多生产者和单消费者先进先出队列,以从至少一个线程同时将每个任务入队,并且从拥有线程同时将每个任务出队,
iii)其中,任务流包括任务的链表;以及任务流优先级、任务流密钥和并发计数中的至少一个;
aa)其中,任务流优先级是位于任务链表的头部的任务的任务优先级,
ab)其中,任务流的每个任务具有与任务流密钥相同的任务密钥。
ac)其中,任务流还包括阻塞标志,
bb)其中,具有阻塞标志集的任务流从任务优先级中移除,并且在阻塞标志未设置之前,不从任务流执行任务,
iv)其中,优先级队列是任务流的优先级队列,其中,基于任务流优先级对其进行优先级排序,
v)其中,子例程包括任务执行进程;以及任务执行进程的任务执行进程循环,
vi)其中,协同程序执行上下文允许任务操作向任务执行进程产生执行,以便任务执行进程继续其执行进程,
vii)其中,恢复协同程序执行上下文,允许任务操作从其产生的指令继续执行,
3)其中,散列函数每次用相同的任务密钥对相同的结构执行时返回相同的线程索引,
F.其中,隐式承诺函数和隐式未来变量为以DS解释语言编写的连续函数的执行提供隐式并发性,
1)其中,每次调用隐式承诺函数时,创建新任务,以执行承诺函数,并与作为隐式承诺函数调用的返回值创建的新隐式未来变量相关联,
2)其中,每次连续函数访问未解析的未来变量的值时,在协同程序执行上下文中执行的连续函数隐式地产生子例程的执行,
3)其中,新创建的用于执行承诺函数的任务在线程上同时执行承诺函数,然后,最终执行该任务,以解析未来变量的值,并执行所产生的协同程序执行上下文的恢复,以从其为连续函数在执行连续函数的线程上产生的指令继续,
示例3.如示例2和/或本文的任何其他示例中所述的运行时环境,其中,运行时环境进程还包括隐式并发控制方法,用于在计算机程序单元实例和计算机程序服务实例上执行任务的任务操作,
A.如示例3和/或本文中的任何其他示例所述的方法,其中,每个任务入队到线程的任务队列中,通过利用结构的任务密钥执行散列函数来计算该线程的线程索引,
B.如示例3和/或本文中的任何其他示例所述的方法,其中,所述任务执行进程包括第一并发控制决策进程,所述第一并发控制决策进程利用任务、任务流、并发控制配置、操作类型、连续参考计数和并发控制计数中的至少一个,来确定是否阻塞在所述计算机服务实例或所述计算机程序单元实例上执行进一步的任务操作并且执行任务操作;以及第二并发控制决策进程,所述第二并发控制决策进程利用并发控制配置、任务操作、连续参考计数和并发控制计数,来确定是否允许在计算机程序服务实例或计算机程序单元实例上执行进一步的任务操作,
C.如示例3和/或本文中的任何其他示例所述的方法,其中,任务执行进程包括以下步骤
1)将每个现有任务从任务队列中出队,并将每个出队的任务入队到优先级队列的任务流中,其中,任务密钥等于任务流密钥,
2)在优先级队列中找到最高优先级的任务流,
3)采用第一并发控制决策进程,
a)如果第一并发控制决策进程确定阻塞在计算机服务实例或计算机程序单元实例上执行进一步的任务操作,则设置最高优先级任务流的阻塞标志,
b)如果第一并发控制决策进程确定执行从最高优先级任务流中引导任务的任务操作,则从最高优先级任务流中引导任务出队并执行其任务操作,
4)采用第二并发控制决策进程,
a)如果并发控制决策进程确定解除阻塞在计算机程序单元实例上执行进一步的任务操作,则重置最高优先级任务流的阻塞标志,
5)重复任务执行进程循环。
以下是第二组示例:
示例1.一种针对程序单元实例的用户操作提供隐式并发控制的计算方法,该方法包括:利用运行时环境进程,基于第一优先级在线程上执行系统操作并且基于第二优先级在线程上执行程序单元实例的用户操作;其中,用户操作包括线程的标识符和程序单元实例的标识符,其中,线程的标识符从程序单元实例的标识符导出,并且其中,用户操作在由线程的标识符指示的线程上执行;其中,线程包括用户操作流,并且其中,用户操作流包括用户操作并且仅包括包含程序单元实例的标识符的用户操作;确定在用户操作的执行期间是否至少阻塞程序单元实例的第二用户操作和用户操作流;当阻塞用户操作流时,基于系统操作和其他用户操作的优先级,执行系统操作和来自未阻塞的用户操作流的其他用户操作中的至少一者。
示例2.根据示例1所述的方法,其中,程序单元实例是程序单元定义的实例,其中,程序单元定义包括在连续函数中以连续传递样式(CPS)或直接样式(DS)中的至少一种的解释语言指定的行为。
示例3.根据示例1所述的方法,其中,运行时环境包括解释器,并且利用解释器执行程序单元实例的行为的连续函数。
示例4.根据示例3所述的方法,其中,连续函数是第一连续函数,并且其中,进行程序单元实例的行为的连续函数的执行包括执行第一连续函数和执行第一连续函数及第一连续函数的至少第二连续函数中的一者。
示例5.根据示例1所述的方法,其中,在线程上执行程序单元实例的用户操作处于协同程序执行上下文中,其中,协同程序执行上下文允许执行用户操作以产生执行线程的子例程,并且其中,子例程基于优先级执行系统操作和来自未阻塞的用户操作流的程序单元实例的用户操作,其中,协同程序执行上下文恢复程序单元实例的先前产生的用户操作,以完成执行用户操作。
示例6.根据示例2所述的方法,其中,程序单元实例的用户操作包括创建程序单元实例、删除程序单元实例、执行行为中的至少一个,并且其中,执行行为包括执行连续函数,并且其中,系统操作包括隐式承诺函数的执行、隐式未来变量的值的解析以及协同程序执行上下文的恢复中的至少一项。
示例7.根据示例6所述的方法,其中,隐式承诺函数和隐式承诺未来变量为连续函数的执行提供隐式并发,其中,响应于隐式承诺函数调用,隐式承诺函数作为任何线程上的系统操作被并发地执行并且与隐式未来变量相关联,其中,隐式未来变量作为值返回给隐式承诺函数调用,其中,在未解析隐式未来变量的值时每当连续函数访问隐式未来变量的值,连续函数就产生子例程的执行,其中,隐式未来变量的值被解析并且协同程序执行上下文被恢复以通过执行系统操作而继续执行连续函数,结果是在执行连续函数的线程上执行隐式承诺函数。
示例8.根据示例1至示例7中的至少一项所述的方法,其中,确定是否至少阻塞程序单元实例的第二用户操作包括:确定并发控制定义是指定互斥、具有信号量计数的信号量、还是读取器-写入器锁定,并且在执行程序单元实例的用户操作之前和之后使用对应的并发控制机制。
示例9.一种针对程序单元实例的用户操作提供隐式并发控制的计算机设备,该设备包括计算机处理器和存储器,存储器包括指令,该指令在被执行时为计算机设备配置运行时环境,其中,运行时环境用于:基于第一优先级在线程上执行系统操作,并且基于第二优先级在线程上执行程序单元实例的用户操作;其中,用户操作包括线程的标识符和程序单元实例的标识符,其中,线程的标识符从程序单元实例的标识符导出,并且其中,用户操作在由线程的标识符指示的线程上执行;其中,线程包括用户操作流,并且其中,用户操作流包括用户操作并且仅包括包含程序单元实例的标识符的用户操作;确定在用户操作的执行期间是否至少阻塞程序单元实例的第二用户操作和用户操作流;当阻塞用户操作流时,基于系统操作和其他用户操作的优先级,执行系统操作和来自未阻塞的用户操作流的其他用户操作中的至少一者。
示例10.根据示例9所述的设备,其中,程序单元实例是程序单元定义的实例,其中,程序单元定义包括在连续函数中以连续传递样式(CPS)或直接样式(DS)中的至少一种的解释语言指定的行为。
示例11.根据示例9所述的设备,其中,运行时环境还包括解释器,并且其中,解释器用于进行程序单元实例的行为的连续函数的执行。
示例12.根据示例11所述的设备,其中,连续函数是第一连续函数,并且其中,进行程序单元实例的行为的连续函数的执行包括进行第一连续函数的执行和进行第一连续函数及第一连续函数的至少第二连续函数的执行中的一者。
示例13.根据示例9所述的设备,其中,在线程上执行程序单元实例的用户操作包括在协同程序执行上下文中执行程序单元实例的用户操作,其中,协同程序执行上下文允许执行用户操作以产生执行线程的子例程,并且其中,子例程基于优先级执行系统操作和来自未阻塞的用户操作流的程序单元实例的用户操作,其中,协同程序执行上下文用于恢复程序单元实例的先前产生的用户操作,以完成执行用户操作。
示例14.根据示例10所述的设备,其中,程序单元实例的用户操作包括创建程序单元实例、删除程序单元实例、执行行为中的至少一项,并且其中,执行行为包括执行连续函数,并且其中,系统操作包括隐式承诺函数的执行、隐式未来变量的值的解析以及协同程序执行上下文的恢复中的至少一项。
示例15.根据示例14所述的设备,其中,隐式承诺函数和隐式承诺未来变量为连续函数的执行提供隐式并发,其中,响应于隐式承诺函数调用,隐式承诺函数作为任何线程上的系统操作被并发地执行并且与隐式未来变量相关联,其中,隐式未来变量作为值返回给隐式承诺函数调用,其中,在未解析隐式未来变量的值时每当连续函数访问隐式未来变量的值,连续函数产生子例程的执行,其中,隐式未来变量的值被解析并且协同程序执行上下文被恢复以通过执行系统操作而继续执行连续函数,结果是在执行连续函数的线程上执行隐式承诺函数。
示例16.根据示例9至15中的至少一项所述的设备,其中,确定是否至少阻塞程序单元实例的第二用户操作包括:确定并发控制定义是指定互斥、具有信号量计数的信号量、还是读取器-写入器锁定,并且在执行程序单元实例的用户操作之前和之后使用对应的并发控制机制。
示例17.一个或多个包括指令的计算机可读介质,响应于由计算机设备的处理器执行指令,该指令使计算机设备:利用运行时环境进程,基于第一优先级在线程上执行系统操作,并且基于第二优先级在线程上执行程序单元实例的用户操作;其中,用户操作包括线程的标识符和程序单元实例的标识符,其中,线程的标识符从程序单元实例的标识符导出,并且其中,用户操作在由线程的标识符指示的线程上执行;其中,线程包括用户操作流,并且其中,用户操作流包括用户操作并且仅包括包含程序单元实例的标识符的用户操作;确定在用户操作的执行期间是否至少阻塞程序单元实例的第二用户操作和用户操作流;当阻塞用户操作流时,基于系统操作和其他用户操作的优先级,执行系统操作和来自未阻塞的用户操作流的其他用户操作中的至少一者。
示例18.根据示例17所述的计算机可读介质,其中,程序单元实例是程序单元定义的实例,其中,程序单元定义包括在连续函数中以连续传递样式(CPS)或直接样式(DS)中的至少一种的解释语言指定的行为。
示例19.根据示例17所述的计算机可读介质,其中,运行时环境还包括解释器,并且其中,解释器用于进行程序单元实例的行为的连续函数的执行。
示例20.根据示例19所述的计算机可读介质,其中,连续函数是第一连续函数,并且其中,进行程序单元实例的行为的连续函数的执行包括进行第一连续函数的执行和进行第一连续函数及第一连续函数的至少第二连续函数的执行中的一者。
示例21.根据示例17所述的计算机可读介质,其中,在线程上执行程序单元实例的用户操作包括在协同程序执行上下文中执行程序单元实例的用户操作,其中,协同程序执行上下文允许执行用户操作以产生执行线程的子例程,并且其中,子例程基于优先级执行系统操作和来自未阻塞的用户操作流的程序单元实例的用户操作,其中,协同程序执行上下文用于恢复程序单元实例的先前产生的用户操作,以完成执行用户操作。
示例22.根据示例18所述的计算机可读介质,其中,程序单元实例的用户操作包括创建程序单元实例、删除程序单元实例、执行行为中的至少一项,并且其中,执行行为包括执行连续函数,并且其中,系统操作包括隐式承诺函数的执行、隐式未来变量的值的解析以及协同程序执行上下文的恢复中的至少一项。
示例23.根据示例22所述的计算机可读介质,其中,隐式承诺函数和隐式承诺未来变量为连续函数的执行提供隐式并发,其中,响应于隐式承诺函数调用,隐式承诺函数作为任何线程上的系统操作被并发地执行并且与隐式未来变量相关联,其中,隐式未来变量作为值返回给隐式承诺函数调用,其中,在未解析隐式未来变量的值时每当连续函数访问隐式未来变量的值,连续函数就产生子例程的执行,其中,隐式未来变量的值被解析并且协同程序执行上下文被恢复以通过执行系统操作而继续执行连续函数,结果是在执行连续函数的线程上执行隐式承诺函数。
示例24.根据示例17至23中的至少一项所述的计算机可读介质,其中,确定是否至少阻塞程序单元实例的第二用户操作包括:确定并发控制定义是指定互斥、具有信号量计数的信号量、还是读取器-写入器锁定,并且在执行程序单元实例的用户操作之前和之后使用对应的并发控制机制。
Claims (24)
1.一种针对程序单元实例的用户操作提供隐式并发控制的计算方法,所述方法包括:
利用运行时环境进程,基于第一优先级在线程上执行系统操作,并且基于第二优先级在线程上执行程序单元实例的用户操作;
其中,所述用户操作包括所述线程的标识符和所述程序单元实例的标识符,其中,所述线程的标识符从所述程序单元实例的标识符导出,并且其中,所述用户操作在由所述线程的标识符指示的所述线程上执行;
其中,所述线程包括用户操作流,并且其中,所述用户操作流包括所述用户操作并且仅包括包含所述程序单元实例的标识符的用户操作;
确定在所述用户操作的执行期间是否至少阻塞所述程序单元实例的第二用户操作和所述用户操作流;
当阻塞所述用户操作流时,基于系统操作和其他用户操作的优先级,执行系统操作和来自未阻塞的用户操作流的其他用户操作中的至少一者。
2.根据权利要求1所述的方法,其中,所述程序单元实例是程序单元定义的实例,其中,所述程序单元定义包括在连续函数中以连续传递样式(CPS)和直接样式(DS)中的至少一种的解释语言指定的行为。
3.根据权利要求1所述的方法,其中,所述运行时环境包括解释器,并且利用所述解释器执行所述程序单元实例的行为的连续函数。
4.根据权利要求3所述的方法,其中,所述连续函数是第一连续函数,并且其中,进行所述程序单元实例的行为的连续函数的执行包括执行所述第一连续函数和执行所述第一连续函数及所述第一连续函数的至少第二连续函数中的一者。
5.根据权利要求1所述的方法,其中,在所述线程上执行所述程序单元实例的所述用户操作处于协同程序执行上下文中,其中,所述协同程序执行上下文允许执行所述用户操作以产生执行所述线程的子例程,并且其中,所述子例程基于优先级执行系统操作和来自未阻塞的用户操作流的程序单元实例的用户操作,其中,所述协同程序执行上下文恢复所述程序单元实例的先前产生的用户操作,以完成所述用户操作的执行。
6.根据权利要求2所述的方法,其中,所述程序单元实例的所述用户操作包括创建所述程序单元实例、删除所述程序单元实例、执行所述行为中的至少一项,并且其中,执行所述行为包括执行连续函数,并且其中,所述系统操作包括隐式承诺函数的执行、隐式未来变量的值的解析以及协同程序执行上下文的恢复中的至少一项。
7.根据权利要求6所述的方法,其中,所述隐式承诺函数和所述隐式承诺未来变量为所述连续函数的执行提供隐式并发,其中,响应于隐式承诺函数调用,所述隐式承诺函数作为任何线程上的所述系统操作被并发地执行并且与所述隐式未来变量相关联,其中,所述隐式未来变量作为值返回给所述隐式承诺函数调用,其中,在未解析所述隐式未来变量的值时每当所述连续函数访问所述隐式未来变量的值,所述连续函数就产生子例程的执行,其中,所述隐式未来变量的值被解析并且所述协同程序执行上下文被恢复以通过执行所述系统操作而继续执行所述连续函数,结果是在执行所述连续函数的所述线程上执行所述隐式承诺函数。
8.根据权利要求1至7中的至少一项所述的方法,其中,确定是否至少阻塞所述程序单元实例的所述第二用户操作包括:确定并发控制定义是指定互斥、具有信号量计数的信号量、还是读取器-写入器并发控制,并且在执行所述程序单元实例的所述用户操作之前和之后使用对应的并发控制机制,其中,所述程序单元实例的所述用户操作是读操作或写操作。
9.一种针对程序单元实例的用户操作提供隐式并发控制的计算机设备,所述设备包括计算机处理器和存储器,所述存储器包括指令,所述指令在被执行时为所述计算机设备配置运行时环境,其中,所述运行时环境用于:
基于第一优先级在线程上执行系统操作,并且基于第二优先级在所述线程上执行程序单元实例的用户操作;
其中,所述用户操作包括所述线程的标识符和所述程序单元实例的标识符,其中,所述线程的标识符从所述程序单元实例的标识符导出,并且其中,所述用户操作在由所述线程的标识符指示的所述线程上执行;
其中,所述线程包括用户操作流,并且其中,所述用户操作流包括所述用户操作并且仅包括包含所述程序单元实例的标识符的用户操作;
确定在所述用户操作的执行期间是否至少阻塞所述程序单元实例的第二用户操作和所述用户操作流;
当阻塞所述用户操作流时,基于系统操作和其他用户操作的优先级,执行系统操作和来自未阻塞的用户操作流的其他用户操作中的至少一者。
10.根据权利要求9所述的设备,其中,所述程序单元实例是程序单元定义的实例,其中,所述程序单元定义包括在连续函数中以连续传递样式(CPS)和直接样式(DS)中的至少一种的解释语言指定的行为。
11.根据权利要求9所述的设备,其中,所述运行时环境还包括解释器,并且其中,所述解释器用于进行所述程序单元实例的行为的连续函数的执行。
12.根据权利要求11所述的设备,其中,所述连续函数是第一连续函数,并且其中,进行所述程序单元实例的行为的连续函数的执行包括进行所述第一连续函数的执行和进行所述第一连续函数及所述第一连续函数的至少第二连续函数的执行中的一者。
13.根据权利要求9所述的设备,其中,在所述线程上执行所述程序单元实例的所述用户操作包括在协同程序执行上下文中执行所述程序单元实例的所述用户操作,其中,所述协同程序执行上下文允许执行所述用户操作以产生执行所述线程的子例程,并且其中,所述子例程基于优先级执行系统操作和来自未阻塞的用户操作流的程序单元实例的用户操作,其中,所述协同程序执行上下文用于恢复所述程序单元实例的先前产生的用户操作,以完成所述用户操作的执行。
14.根据权利要求10所述的设备,其中,所述程序单元实例的所述用户操作包括创建所述程序单元实例、删除所述程序单元实例、执行所述行为中的至少一项,并且其中,执行所述行为包括执行连续函数,并且其中,所述系统操作包括隐式承诺函数的执行、隐式未来变量的值的解析以及协同程序执行上下文的恢复中的至少一项。
15.根据权利要求14所述的设备,其中,所述隐式承诺函数和所述隐式承诺未来变量为所述连续函数的执行提供隐式并发,其中,响应于隐式承诺函数调用,所述隐式承诺函数作为任何线程上的所述系统操作被并发地执行并且与所述隐式未来变量相关联,其中,所述隐式未来变量作为值返回给所述隐式承诺函数调用,其中,在未解析所述隐式未来变量的值时每当所述连续函数访问所述隐式未来变量的值,所述连续函数就产生子例程的执行,其中,所述隐式未来变量的值被解析并且所述协同程序执行上下文被恢复以通过执行所述系统操作而继续执行所述连续函数,结果是在执行所述连续函数的所述线程上执行所述隐式承诺函数。
16.根据权利要求9至15中的至少一项所述的设备,其中,确定是否至少阻塞所述程序单元实例的所述第二用户操作包括:确定并发控制定义是指定互斥、具有信号量计数的信号量、还是读取器-写入器并发控制,并且在执行所述程序单元实例的所述用户操作之前和之后使用对应的并发控制机制,其中,所述程序单元实例的所述用户操作是读操作或写操作。
17.一个或多个包括指令的计算机可读介质,响应于由计算机设备的处理器执行指令,所述指令使所述计算机设备:
利用运行时环境,基于第一优先级在线程上执行系统操作,并且基于第二优先级在所述线程上执行程序单元实例的用户操作;
其中,所述用户操作包括所述线程的标识符和所述程序单元实例的标识符,其中,所述线程的标识符从所述程序单元实例的标识符导出,并且其中,所述用户操作在由所述线程的标识符指示的所述线程上执行;其中,所述线程包括用户操作流,并且其中,所述用户操作流包括所述用户操作并且仅包括包含所述程序单元实例的标识符的用户操作;
确定在所述用户操作的执行期间是否至少阻塞所述程序单元实例的第二用户操作和所述用户操作流;
当阻塞所述用户操作流时,基于系统操作和其他用户操作的优先级,执行系统操作和来自未阻塞的用户操作流的其他用户操作中的至少一者。
18.根据权利要求17所述的计算机可读介质,其中,所述程序单元实例是程序单元定义的实例,其中,所述程序单元定义包括在连续函数中以连续传递样式(CPS)和直接样式(DS)中的至少一种的解释语言指定的行为。
19.根据权利要求17所述的计算机可读介质,其中,所述运行时环境还包括解释器,并且其中,所述解释器用于进行所述程序单元实例的行为的连续函数的执行。
20.根据权利要求19所述的计算机可读介质,其中,所述连续函数是第一连续函数,并且其中,进行所述程序单元实例的行为的所述连续函数的执行包括进行所述第一连续函数的执行和进行所述第一连续函数及所述第一连续函数的至少第二连续函数的执行中的一者。
21.根据权利要求17所述的计算机可读介质,其中,在所述线程上执行所述程序单元实例的所述用户操作包括在协同程序执行上下文中执行所述程序单元实例的所述用户操作,其中,所述协同程序执行上下文允许执行所述用户操作以产生执行所述线程的子例程,并且其中,所述子例程基于优先级执行系统操作和来自未阻塞的用户操作流的程序单元实例的用户操作,其中,所述协同程序执行上下文用于恢复所述程序单元实例的先前产生的用户操作,以完成所述用户操作的执行。
22.根据权利要求18所述的计算机可读介质,其中,所述程序单元实例的所述用户操作包括创建所述程序单元实例、删除所述程序单元实例、执行所述行为中的至少一项,并且其中,执行所述行为包括执行连续函数,并且其中,所述系统操作包括隐式承诺函数的执行、隐式未来变量的值的解析以及协同程序执行上下文的恢复中的至少一项。
23.根据权利要求22所述的计算机可读介质,其中,所述隐式承诺函数和所述隐式承诺未来变量为所述连续函数的执行提供隐式并发,其中,响应于隐式承诺函数调用,所述隐式承诺函数作为任何线程上的所述系统操作被并发地执行并且与所述隐式未来变量相关联,其中,所述隐式未来变量作为值返回给所述隐式承诺函数调用,其中,在未解析所述隐式未来变量的值时每当所述连续函数访问所述隐式未来变量的值,所述连续函数就产生子例程的执行,其中,所述隐式未来变量的值被解析并且所述协同程序执行上下文被恢复以通过执行所述系统操作而继续执行所述连续函数,结果是在执行所述连续函数的所述线程上执行所述隐式承诺函数。
24.根据权利要求17至23中的至少一项所述的计算机可读介质,其中,确定是否至少阻塞所述程序单元实例的所述第二用户操作包括:确定并发控制定义是指定互斥、具有信号量计数的信号量、还是读取器-写入器并发控制,并且在执行所述程序单元实例的所述用户操作之前和之后使用对应的并发控制机制,其中,所述程序单元实例的所述用户操作是读操作或写操作。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662335508P | 2016-05-12 | 2016-05-12 | |
US62/335,508 | 2016-05-12 | ||
US15/592,061 US10310820B2 (en) | 2016-05-12 | 2017-05-10 | Programming model and interpreted runtime environment for high performance services with implicit concurrency control |
US15/592,061 | 2017-05-10 | ||
PCT/US2017/032249 WO2017197175A1 (en) | 2016-05-12 | 2017-05-11 | Programming model and interpreted runtime environment for high performance services with implicit concurrency control |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109478138A true CN109478138A (zh) | 2019-03-15 |
Family
ID=60266793
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780043436.0A Pending CN109478138A (zh) | 2016-05-12 | 2017-05-11 | 具有隐式并发控制的高性能服务的编程模型和解释运行时环境 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10310820B2 (zh) |
EP (1) | EP3455724A4 (zh) |
CN (1) | CN109478138A (zh) |
WO (1) | WO2017197175A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813533A (zh) * | 2020-09-11 | 2020-10-23 | 腾讯科技(深圳)有限公司 | 模型实例化的动态管理方法和装置及存储介质 |
CN114640659A (zh) * | 2022-03-29 | 2022-06-17 | 北京白海科技有限公司 | 一种云端编码辅助方法、装置、电子设备及存储介质 |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9830193B1 (en) | 2014-09-30 | 2017-11-28 | Amazon Technologies, Inc. | Automatic management of low latency computational capacity |
US9600312B2 (en) | 2014-09-30 | 2017-03-21 | Amazon Technologies, Inc. | Threading as a service |
US9678773B1 (en) | 2014-09-30 | 2017-06-13 | Amazon Technologies, Inc. | Low latency computational capacity provisioning |
US9146764B1 (en) | 2014-09-30 | 2015-09-29 | Amazon Technologies, Inc. | Processing event messages for user requests to execute program code |
US9413626B2 (en) | 2014-12-05 | 2016-08-09 | Amazon Technologies, Inc. | Automatic management of resource sizing |
US9588790B1 (en) | 2015-02-04 | 2017-03-07 | Amazon Technologies, Inc. | Stateful virtual compute system |
US9733967B2 (en) | 2015-02-04 | 2017-08-15 | Amazon Technologies, Inc. | Security protocols for low latency execution of program code |
US9910713B2 (en) | 2015-12-21 | 2018-03-06 | Amazon Technologies, Inc. | Code execution request routing |
US11132213B1 (en) | 2016-03-30 | 2021-09-28 | Amazon Technologies, Inc. | Dependency-based process of pre-existing data sets at an on demand code execution environment |
US10102040B2 (en) | 2016-06-29 | 2018-10-16 | Amazon Technologies, Inc | Adjusting variable limit on concurrent code executions |
US10445140B1 (en) | 2017-06-21 | 2019-10-15 | Amazon Technologies, Inc. | Serializing duration-limited task executions in an on demand code execution system |
US10725826B1 (en) * | 2017-06-21 | 2020-07-28 | Amazon Technologies, Inc. | Serializing duration-limited task executions in an on demand code execution system |
US10073686B1 (en) * | 2017-08-10 | 2018-09-11 | Sap Se | Function serialization for inter-thread messaging |
US10853115B2 (en) | 2018-06-25 | 2020-12-01 | Amazon Technologies, Inc. | Execution of auxiliary functions in an on-demand network code execution system |
US11146569B1 (en) | 2018-06-28 | 2021-10-12 | Amazon Technologies, Inc. | Escalation-resistant secure network services using request-scoped authentication information |
US10949237B2 (en) | 2018-06-29 | 2021-03-16 | Amazon Technologies, Inc. | Operating system customization in an on-demand network code execution system |
EP3407194A3 (en) * | 2018-07-19 | 2019-03-20 | Erle Robotics, S.L. | Method for the deployment of distributed fog computing and storage architectures in robotic modular components |
US11099870B1 (en) | 2018-07-25 | 2021-08-24 | Amazon Technologies, Inc. | Reducing execution times in an on-demand network code execution system using saved machine states |
US11099917B2 (en) | 2018-09-27 | 2021-08-24 | Amazon Technologies, Inc. | Efficient state maintenance for execution environments in an on-demand code execution system |
US11243953B2 (en) | 2018-09-27 | 2022-02-08 | Amazon Technologies, Inc. | Mapreduce implementation in an on-demand network code execution system and stream data processing system |
US11943093B1 (en) | 2018-11-20 | 2024-03-26 | Amazon Technologies, Inc. | Network connection recovery after virtual machine transition in an on-demand network code execution system |
CN109873715B (zh) * | 2019-01-11 | 2021-07-02 | 中山大学 | 一种微服务架构下的服务调用关系合理性检测方法 |
US11010188B1 (en) | 2019-02-05 | 2021-05-18 | Amazon Technologies, Inc. | Simulated data object storage using on-demand computation of data objects |
US11861386B1 (en) | 2019-03-22 | 2024-01-02 | Amazon Technologies, Inc. | Application gateways in an on-demand network code execution system |
US11119809B1 (en) | 2019-06-20 | 2021-09-14 | Amazon Technologies, Inc. | Virtualization-based transaction handling in an on-demand network code execution system |
US11115404B2 (en) | 2019-06-28 | 2021-09-07 | Amazon Technologies, Inc. | Facilitating service connections in serverless code executions |
US11159528B2 (en) | 2019-06-28 | 2021-10-26 | Amazon Technologies, Inc. | Authentication to network-services using hosted authentication information |
US11190609B2 (en) | 2019-06-28 | 2021-11-30 | Amazon Technologies, Inc. | Connection pooling for scalable network services |
US11119826B2 (en) | 2019-11-27 | 2021-09-14 | Amazon Technologies, Inc. | Serverless call distribution to implement spillover while avoiding cold starts |
US11714682B1 (en) | 2020-03-03 | 2023-08-01 | Amazon Technologies, Inc. | Reclaiming computing resources in an on-demand code execution system |
US11188391B1 (en) | 2020-03-11 | 2021-11-30 | Amazon Technologies, Inc. | Allocating resources to on-demand code executions under scarcity conditions |
US11593270B1 (en) | 2020-11-25 | 2023-02-28 | Amazon Technologies, Inc. | Fast distributed caching using erasure coded object parts |
US11550713B1 (en) | 2020-11-25 | 2023-01-10 | Amazon Technologies, Inc. | Garbage collection in distributed systems using life cycled storage roots |
US11388210B1 (en) | 2021-06-30 | 2022-07-12 | Amazon Technologies, Inc. | Streaming analytics using a serverless compute system |
US11968280B1 (en) | 2021-11-24 | 2024-04-23 | Amazon Technologies, Inc. | Controlling ingestion of streaming data to serverless function executions |
US12015603B2 (en) | 2021-12-10 | 2024-06-18 | Amazon Technologies, Inc. | Multi-tenant mode for serverless code execution |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030045952A1 (en) * | 2001-08-31 | 2003-03-06 | Autodesk Canada Inc. | Continuation manager |
US20040093603A1 (en) * | 1998-11-13 | 2004-05-13 | Alverson Gail A. | Stream management in a multithreaded environment |
US20050091346A1 (en) * | 2003-10-23 | 2005-04-28 | Brijesh Krishnaswami | Settings management infrastructure |
US20050149937A1 (en) * | 2003-12-19 | 2005-07-07 | Stmicroelectronics, Inc. | Accelerator for multi-processing system and method |
US20070118836A1 (en) * | 2005-11-18 | 2007-05-24 | Mensing Joerg W | Cooperative scheduling using coroutines and threads |
CN101814091A (zh) * | 2010-03-26 | 2010-08-25 | 天津理工大学 | 确保时态一致性的实时并发控制方法 |
CN102214103A (zh) * | 2011-07-08 | 2011-10-12 | 珠海脉络软件有限公司 | 以功能单元为基础的任务程序的创建和执行方法及系统 |
US20130055209A1 (en) * | 2011-08-26 | 2013-02-28 | Fujitsu Limited | Constructing a Control Flow Graph for Javascript Software |
WO2014200552A1 (en) * | 2013-06-14 | 2014-12-18 | Microsoft Corporation | Assigning and scheduling threads for multiple prioritized queues |
US20150058857A1 (en) * | 2011-07-15 | 2015-02-26 | Mark Henrik Sandstrom | Concurrent Program Execution Optimization |
CN104850631A (zh) * | 2015-05-21 | 2015-08-19 | 天津大学 | 一种适用于实时数据库的安全并发控制方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8578380B1 (en) * | 2003-12-17 | 2013-11-05 | Vmware, Inc. | Program concurrency control using condition variables |
US7802255B2 (en) * | 2003-12-19 | 2010-09-21 | Stmicroelectronics, Inc. | Thread execution scheduler for multi-processing system and method |
US20060075404A1 (en) * | 2004-10-06 | 2006-04-06 | Daniela Rosu | Method and system for scheduling user-level I/O threads |
US8166481B2 (en) * | 2008-10-20 | 2012-04-24 | Microsoft Corporation | Transaction processing in transactional memory |
US8850131B2 (en) * | 2010-08-24 | 2014-09-30 | Advanced Micro Devices, Inc. | Memory request scheduling based on thread criticality |
US10430190B2 (en) * | 2012-06-07 | 2019-10-01 | Micron Technology, Inc. | Systems and methods for selectively controlling multithreaded execution of executable code segments |
US20140040219A1 (en) * | 2012-07-31 | 2014-02-06 | Hideaki Kimura | Methods and systems for a deadlock resolution engine |
US20140040220A1 (en) * | 2012-07-31 | 2014-02-06 | Hideaki Kimura | Methods and systems for deadlock detection |
US9619012B2 (en) * | 2014-05-30 | 2017-04-11 | Apple Inc. | Power level control using power assertion requests |
-
2017
- 2017-05-10 US US15/592,061 patent/US10310820B2/en active Active
- 2017-05-11 CN CN201780043436.0A patent/CN109478138A/zh active Pending
- 2017-05-11 WO PCT/US2017/032249 patent/WO2017197175A1/en unknown
- 2017-05-11 EP EP17796880.7A patent/EP3455724A4/en not_active Withdrawn
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040093603A1 (en) * | 1998-11-13 | 2004-05-13 | Alverson Gail A. | Stream management in a multithreaded environment |
US20030045952A1 (en) * | 2001-08-31 | 2003-03-06 | Autodesk Canada Inc. | Continuation manager |
US20050091346A1 (en) * | 2003-10-23 | 2005-04-28 | Brijesh Krishnaswami | Settings management infrastructure |
US20050149937A1 (en) * | 2003-12-19 | 2005-07-07 | Stmicroelectronics, Inc. | Accelerator for multi-processing system and method |
US20070118836A1 (en) * | 2005-11-18 | 2007-05-24 | Mensing Joerg W | Cooperative scheduling using coroutines and threads |
CN101814091A (zh) * | 2010-03-26 | 2010-08-25 | 天津理工大学 | 确保时态一致性的实时并发控制方法 |
CN102214103A (zh) * | 2011-07-08 | 2011-10-12 | 珠海脉络软件有限公司 | 以功能单元为基础的任务程序的创建和执行方法及系统 |
US20150058857A1 (en) * | 2011-07-15 | 2015-02-26 | Mark Henrik Sandstrom | Concurrent Program Execution Optimization |
US20130055209A1 (en) * | 2011-08-26 | 2013-02-28 | Fujitsu Limited | Constructing a Control Flow Graph for Javascript Software |
WO2014200552A1 (en) * | 2013-06-14 | 2014-12-18 | Microsoft Corporation | Assigning and scheduling threads for multiple prioritized queues |
CN104850631A (zh) * | 2015-05-21 | 2015-08-19 | 天津大学 | 一种适用于实时数据库的安全并发控制方法 |
Non-Patent Citations (2)
Title |
---|
MOAHMED LAKEHAL ET AL.: "《New algorithm of scheduling based on prioriry rules on machines to solve bi-criteria blocking job shop scheduling problem》", 《2015 12TH INTERNATIONAL SYMPOSIUM ON PROGRAMMING AND SYSTEMS (ISPS)》 * |
高宇等: "面向CDMMA2000-1X网络的移动流媒体服务器的设计与实现", 《测控技术》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813533A (zh) * | 2020-09-11 | 2020-10-23 | 腾讯科技(深圳)有限公司 | 模型实例化的动态管理方法和装置及存储介质 |
CN114640659A (zh) * | 2022-03-29 | 2022-06-17 | 北京白海科技有限公司 | 一种云端编码辅助方法、装置、电子设备及存储介质 |
CN114640659B (zh) * | 2022-03-29 | 2023-09-19 | 北京白海科技有限公司 | 一种云端编码辅助方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2017197175A1 (en) | 2017-11-16 |
US10310820B2 (en) | 2019-06-04 |
US20170329578A1 (en) | 2017-11-16 |
EP3455724A1 (en) | 2019-03-20 |
EP3455724A4 (en) | 2020-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109478138A (zh) | 具有隐式并发控制的高性能服务的编程模型和解释运行时环境 | |
Reppy | Higher-order concurrency | |
TW401558B (en) | Generic software state machine system and method of constructing dynamic objects for an application program | |
CN104618433B (zh) | 一种基于eca规则的服务组合方法 | |
US6976020B2 (en) | Software composition using graph types, graph, and agents | |
CN101069161B (zh) | 调度方法、调度装置和多处理器系统 | |
CN103279390A (zh) | 一种面向小作业优化的并行处理系统 | |
CN103473031B (zh) | 协同并发式消息总线、主动构件组装模型及构件拆分方法 | |
CN102662725B (zh) | 一种事件驱动的高并发流程虚拟机实现方法 | |
CN108984178A (zh) | 一种通信方法和装置 | |
Latoschik et al. | A scala-based actor-entity architecture for intelligent interactive simulations | |
CN115983047A (zh) | 一种适用于多图形接口的跨平台的仿真系统 | |
Gregory et al. | Tempo: a declarative concurrent programming language | |
Gianni et al. | A Language to Enable Distributed Simulation of Extended Queueing Networks. | |
CN103473032B (zh) | 独立主动构件和可运行主动构件组装模型及构件拆分方法 | |
Cossentino et al. | A Comparison of the Basic Principles and Behavioural Aspects of Akka, JaCaMo and Jade Development Frameworks. | |
Khot | Concurrent Patterns and Best Practices: Build scalable apps with patterns in multithreading, synchronization, and functional programming | |
Yao et al. | Mapping Petri nets to concurrent programs in CC++ | |
Srinivasan | Kilim: A server framework with lightweight actors, isolation types and zero-copy messaging | |
Cai et al. | Multi-core accelerated operational transformation for collaborative editing | |
Enokido et al. | Energy-efficient role-based concurrency control with virtual machines | |
Yonezawa et al. | Object-oriented concurrent programming in ABCL/1 | |
WO1991003016A2 (en) | Distributed building of service request lists | |
CN116566828A (zh) | 服务编排的实现方法、系统、电子设备及介质 | |
Camurati et al. | Inter-process communications for system-level design |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190315 |