[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

CN101248405B - 使用并发域的多线程化 - Google Patents

使用并发域的多线程化 Download PDF

Info

Publication number
CN101248405B
CN101248405B CN2006800146187A CN200680014618A CN101248405B CN 101248405 B CN101248405 B CN 101248405B CN 2006800146187 A CN2006800146187 A CN 2006800146187A CN 200680014618 A CN200680014618 A CN 200680014618A CN 101248405 B CN101248405 B CN 101248405B
Authority
CN
China
Prior art keywords
job
software application
concurrent
concurrent domain
application components
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.)
Expired - Fee Related
Application number
CN2006800146187A
Other languages
English (en)
Other versions
CN101248405A (zh
Inventor
A·F·阿玛德
B·什亚姆桑达
B·M·奥兰尼科
C·A·西泽伯斯基
S·克莱安
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US11/360,454 external-priority patent/US7581225B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101248405A publication Critical patent/CN101248405A/zh
Application granted granted Critical
Publication of CN101248405B publication Critical patent/CN101248405B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

提供了用于将软件应用程序组件划分到被称为并发域的各分立域中的方法、系统和计算机产品。可在这种域中部署计算上昂贵、缓慢或运行时间长的方法,从而保持关联应用程序更好地响应终端用户。根据本发明一个方面,给定并发域是运行时对象分区,它用于在分区内提供同步和线程分隔并且在数据驱动的动态组合和再配置的应用程序中提供与其它这种分区的并发。

Description

使用并发域的多线程化
背景技术
随着计算机时代的到来,计算机和软件用户越来越习惯用户友好软件应用程序帮助他们编写、计算、组织、准备演示文稿、收发电子邮件、制作音乐等。例如,现代电子文字处理应用程序允许用户准备各种有用文档。现代电子数据表应用程序允许用户输入、操控和组织数据。现代电子幻灯片演示应用程序允许用户创建包括文本、图片、数据或其它有用对象的各种幻灯片演示文稿。
许多这些应用程序根据组件框架操作,在组件框架中许多应用程序组件连续运行和/或并发运行来执行给定总体应用方法的各个方法。通常,并发组件方法需要各种方法的多线程化。即,支持并发操作的应用程序使用多个方法线程。对这种应用程序的基本要求是其同步多个线程以使得在线程之间共享的任何数据相一致的能力。软件中的难点是重入(reentrancy)。通常由同步方法引入的问题是不确定性重入。通常,重入在线程作出嵌套调用并因此在完成第一次调用之前第二次进入同一对象时发生。例如,如果线程正在执行对第一对象的第一任务的调用,且作为该执行的一部分,调用第二对象的任务,则该线程在完成对第一对象的调用并从中返回之前进入第二对象。如果第二对象的任务执行的一部分包括调用第一对象的第二任务,则该线程在完成对第一对象的原始调用并从中返回之前重入第一对象。
应用组件的同步和应用程序方法的多线程化是复杂问题。例如,很难协调各线程的执行,尤其在两个线程中的指令需要使用同一数据或资源时。第一线程上的指令可能改动第二线程上的指令需要的数据。如果该数据在第二线程上的指令执行其之前被改动,就会在程序执行中导致错误。对于需要组件同步和多线程化的常规应用程序而言,已经使用了各种现有的线程化模型,包括Java-样式同步方法和语句、通用语言运行时(CLR)、同步上下文、套间线程化和租用线程化。使用这种模型需要在应用程序编程中包括复杂逻辑来适当处理多个方法线程。通过常规应用程序使用这些模型,必须将并发设计到应用程序的特定部分中并且必须就针对死锁和竞争条件的正确性对其进行测试。
这些现有的模型与其中应用程序是由多个组件组成的动态组合应用程序框架就算能在一起工作,也无法很好地配合工作,其中上述多个组件是基于由这些组件或该应用程序的其它关联组件接收的数据而被动态生成或再配置的。这很有问题,因为这种现有方法将多线程系统强行划分到该应用程序的多个区域中。对于这种动态生成和再配置的应用程序而言,有必要将应用程序组件编写成不具有与现有线程化模型相关联的复杂线程处理逻辑。
本发明正是针对这些和其它考虑而作出的。
发明内容
发明内容以简化形式引入在以下详细描述中进一步描述的概念选择。发明内容不旨在标识所声明主题的关键特征和本质特征,也不旨在用于帮助确定所声明主题的范围。
本发明的实施方式通过把应用程序组件划分到被称为并发域的各分立域中来解决以上和其它问题。可将计算上昂贵、缓慢或运行时间长的方法部署到这些域中,从而保持关联应用程序与终端用户响应。根据本发明一个方面,给定并发域是运行时对象的一个分区,用于在该分区内提供同步和线程分隔以及提供与数据驱动的动态组合和再配置的应用程序中其它这些分区的并发。
根据本发明的诸方面,在运行时,给定的数据驱动动态组合和再配置应用程序包括一个和多个并发域。第一并发域是主并发域。主并发域包括应用程序的用户接口组件并在应用程序启动期间管理用户接口创建。该应用程序中包含的附加并发域是辅并发域。辅并发域由作为其父并发域的另一并发域创建并操作。并发域可在给定应用程序中需要并发的任何时间使用,其中各个并发域执行主应用程序的任务并按需向另一并发域发布其结果。
根据本发明的特定方面,提供一种用于同步软件应用程序组件的操作的方法、系统和计算机产品。根据本方面,提供第一并发域,它包括可操作成执行该软件应用程序的至少一个单线程对象的单个内部处理线程。提供与第一并发域相关联的第一边界对象,并用于使其从第一并发域外的软件应用程序对象中接收被导向单线程对象的第一工作项目。第一边界对象还用于将该第一工作项目记入工作项目队列。提供包括在并发域内的第一线程调度器,并可用于使其从工作项目队列中检索已记入的第一工作项目以及将已记入的第一工作项目传递给单线程对象以供单线程对象处理。单线程对象用于处理已记入的第一工作项目并将结果经由第一边界对象返回给外部对象。
通过阅读以下详细描述和关联附图的概述,表征本发明的这些和其它特征将变得显而易见。应该理解,以上概述和以下详细描述都仅是示例性的,而非对要求权利的本发明的限制。
附图说明
图1示出其中可实现本发明的适当计算环境。
图2示出根据本发明一实施方式被配置用以并发执行多个对象的示例系统。
图3示出根据本发明一实施方式被配置用以并发执行多个对象的另一示例系统。
图4描绘了在内部单线程对象与外部对象之间的异步通信。
图5示出当并发域与数据库接口时的示例性执行路径。
图6示出其中第一并发域与数据库接口的操作流程图。
图7示出当第一并发域与第二并发域接口时的示例性执行路径。
图8示出其中第一并发域与第二并发域接口的操作流程图。
具体实施方式
在以下详细描述中,对作为说明书一部分并通过举例说明特定实施方式或实施例而示出的附图进行参考。若干附图中,相似的附图标记表示相似的组件、实体和配置。可对这些实施方式进行组合、可使用其它实施方式以及可在不背离本发明的精神和范围的情况下进行结构性变化。因此,以下详细描述不应以限制理念看待,而且本发明的范围由所附权利要求书及其等效方案定义。
图1示出用于实现并发域的适当计算环境。虽然不是必须的,但是本发明的实施方式将在由个人计算机执行的计算机可执行指令的一般上下文中描述。通常,编程操作执行特定任务或实现特定抽象数据结构。
系统100包括处理单元102、系统存储器104和将包括系统存储器104的各种系统组件耦合至处理单元102的系统总线106。系统总线106可以是包括使用各种总线架构中任一种的存储器总线、外围总线和局域总线若干类型总线结构中的任一种。系统存储器包括只读存储器(ROM)108和随机存取存储器(RAM)110。包含帮助在计算机系统100内的元件之间转移信息的基本例程的基本输入/输出系统112(BIOS)存储在ROM108中。
计算机系统100还包括从硬盘读写的硬盘驱动器112、从可移动磁盘116读写的磁盘驱动器114和从诸如CD ROM、DVD或其它光学介质的可移动光盘119读写的光盘驱动器118。硬盘驱动器112、磁盘驱动器114和光盘驱动器118可分别由硬盘驱动器接口120、磁盘驱动器接口122和光盘驱动器接口124连接到系统总线106。驱动器及其关联计算机可读介质为计算机系统100提供计算机可读指令、数据结构、程序和其它数据的非易失性存储。
虽然本文所述的示例环境使用硬盘112、可移动磁盘116和可移动光盘119,但是能够存储数据的其它类型的计算机可读介质也可用于该示例系统100。可用于示例操作环境的这些其它类型计算机可读介质的示例包括磁带盒、闪存卡、数字视频盘、Bernoulli盒式磁带、随机存取存储器(RAM)和只读存储器(ROM)。许多程序模块可存储在硬盘112、磁盘116、光盘119、ROM 108或RAM 110上,这些程序模块包括存储系统126、应用程序128、其它程序模块130和程序数据132。
用户可通过诸如键盘134、鼠标136或其它定点设备的输入设备向计算机系统100输入命令或信息。其它输入设备的示例包括工具栏、菜单、触摸屏、麦克风、操纵杆、游戏垫、笔、圆盘式卫星天线和扫描仪。这些和其它输入设备通常通过与系统总线106相耦合的串行端口接口140连接到处理单元102。然而,这些输入设备也可通过诸如并行端口、游戏端口、或通用串行总线(USB)的其它接口连接。LCD显示器142或其它类型的显示设备也可经由诸如视频适配器144的接口连接至系统总线106。除了显示器142之外,计算机系统通常可包括其它外围输出设备(未示出),诸如扬声器和打印机。
计算机系统100可在使用与一个或多个诸如远程计算机146的远程计算机的逻辑连接而在网络化环境中操作。远程计算机146可以是计算机系统、服务器、路由器、网络PC、对等设备或其它共用网络节点,并且通常包括以上相关于计算机系统100描述的元件中的多个或全部。网络连接包括局域网(LAN)148和广域网(WAN)150。这种网络化环境在办公室、企业内部计算机网络、内联网和因特网中十分常见。
当在LAN网络化环境中使用时,计算机系统100可通过网络接口或适配器152连接到局域网148。当在WAN网络化环境中使用时,计算机系统100通常包括用于在诸如因特网的广域网150上建立通信连接的调制解调器154或其它装置。可内置或外置的调制解调器154经由串行端口接口140连接到系统总线106。在网络化环境中,相关于计算机系统100或其部分描述的程序模块可存储在远程存储器存储设备中。应该理解,所示网络连接是示例,并且可使用在计算机之间建立通信链接的其它装置。
可将本文所述实施方式实现为计算系统中的逻辑操作。可将逻辑操作实现为(1)在计算机系统上运行的计算机实现步骤序列或程序模块;以及(2)在计算系统内运行的互连逻辑或硬件模块。该实现是取决于对具体计算系统的性能要求的选择。因此,构成本文所述各实施方式的逻辑操作是指操作、步骤或任务。这些操作、步骤和任务可在软件、固件、专用数字逻辑及其任意组合中实现而不背离所附权利要求书中阐述的本发明的精神和范围。该软件、固件或类似的计算机指令序列可被编码并存储在计算机可读存储介质上,并也可被编码在计算设备之间传输的载波信号内。
如上简要描述,本发明实施方式涉及将软件应用程序的各组件划分到分立域中用于在组件分区内提供同步和线程隔离以及用于在组件分区之间提供改进的并发操作的方法、系统和计算机产品。图2示出根据本发明一实施方式而被配置用以并发执行多个对象的示例系统。示例系统200包括并发域201,该并发域是都在单个线程202上执行并且不与外部对象210直接(例如或异步)通信的一个或多个单线程对象203的集合(或分区)。内部线程202根据由并发域201利用的逻辑执行对象203。内部线程202仅执行并发域201内的单线程对象203。内部线程202不执行任何外部对象210。
根据一实施方式,同一线程不需要在并发域201的整个生存期中一直用作内部线程202。相反,当没有对象需要在内部线程202上执行时,充当内部线程202的线程可返回线程池(未示出)。一旦再次需要线程,可将新线程从线程池中取出以用作内部线程202。根据另一实施方式,单线程203之一具有线程亲和性,表示该单线程对象203需要在同一线程上执行。在本实施方式中,同一线程在并发域201的整个生存期中用作内部线程202。根据一实施方式,也可从线程池中定位将在本文中更详细描述的辅线程204。
仍参照图2,系统200还包括至少一个辅线程204和至少一个外部对象210。外部对象210的实施方式包括在一个或多个辅线程204上执行的任何对象。辅线程204包括在关联应用程序中执行的除内部线程202之外的任何线程。如上所述,如图2所示的示例并发域201包括内部线程202和多个单线程对象203。仅使用内部线程202来执行这些单线程对象203。
将并发域201内的对象203从程序内的辅线程204和外部对象210隔开。辅线程204不执行并发域201内包含的任何单线程对象203。将各个外部对象210配置成在辅线程204的一个或多个上执行。外部对象210与并发域201内的单线程对象203异步通信。通信包括在对象之间传递数据或由另一对象对一个对象的方法(例如,或任务)进行调用。
跨过并发域201边界的异步通信通过使用边界对象207实现。每个并发域201都与一个或多个边界对象207关联。这些边界对象207可被视为包围并发域201的隔膜(membrane)或选通壁(gated wall)。边界对象207的示例包括在并发域201之间或在并发域201与外部对象210之间实现订制协议的数据连接器和对象。
并发域201内的单线程对象203使用一个或多个边界对象207来与外部对象210异步通信。单线程对象203使用内部线程202与边界对象207通信。边界对象207随后使用一个或多个辅线程204与外部对象210通信。籍此边界对象207跨越并发域201的边界传递信息和调用。根据另一实施方式,一个边界对象207在向外部对象210传递信息之前使用辅线程204与另一边界对象207通信。
边界对象207用作并发域201的内部线程202与各个辅线程204之间的接口。根据一实施方式,边界对象207使用辅线程204接收来自外部对象210的传入通信并将该通信过滤到适当内部对象203。过滤方法将在本文中更详细地描述。根据另一实施方式,边界对象207使用内部线程202接收来自内部对象203的传出通信并使用辅线程204将该通信传输至适当外部对象210。根据一实施方式,边界对象可在内部线程上调用外部对象,但是如此操作的边界对象受到限制。即,允许边界对象调用外部对象必须不会由此引起无限期延迟或死锁。另一限制防止外部对象对内部对象进行引用,从而防止在外部对象控制下的并发域直接重入。
当第一对象在其上执行的线程进入第二对象以执行第二对象方法时发生同步通信。外部对象210不与并发域201内单线程对象203进行同步通信。因此,执行外部对象210的辅线程并不直接调用或进入并发域201内的单线程对象203。
图3示出其中并发域301与外部对象310接口的另一示例系统300。异步通信的一个示例在外部对象310与内部对象303之间示出。并发域301包括内部线程302、配置成在内部线程302上执行的单线程对象303和用于与外部对象310通信的边界对象307。本系统300的另一实施方式包括多个边界对象307和多个单线程对象303。
参考另一实施方式,外部对象310包括配置成在两个或多个辅线程上执行的多线程对象305。多线程对象305的一部分305A被示为在一个辅线程304A上执行而多线程对象305的另一部分305B被示为在另一辅线程304B上执行。根据另一实施方式,外部对象310包括多个多线程对象305或配置成在一个辅线程304上执行的单线程对象(未示出)。
系统300中的并发域301维护工作队列308。工作队列308是在其上记入(例如,插入)任务(例如内部、单线程对象303的方法、数据更新和其它可执行方法的调用)或从中移除任务的多元素数据结构。根据一实施方式,仅能以与任务记入相同的次序将任务从工作队列308移除;即遵循先进先出的限制。根据另一实施方式,可向记入队列的任务分配优先权,并根据其优先权移除各个任务。
传入通信由边界对象307记入工作队列308。这些已记入的通信形成工作项目311,这些工作项目是用于执行内部、单线程对象303或与并发域301相关联的边界对象307的任务的请求(例如,调用)。形成工作项目311的请求可由外部对象310或由另一边界对象307通信至该边界对象307。例如,在图3中,外部对象310的多线程对象305请求边界对象307执行任务,如箭头320所示。边界对象307将包括该任务的工作项目311记入到308工作队列的末端,如箭头325所示。根据另一实施方式,将多个边界对象307与并发域301相关联,并且这些边界对象307中的一个或多个可向工作队列308中记入工作项目311。根据又一实施方式,内部、单线程对象303请求边界对象307向工作队列308中记入工作项目311以将任务的执行延迟到以后的时刻。
根据一实施方式,为了在准备向工作队列308中记入新任务时保证资源一定,边界对象307检查工作队列308并确定是否有任何排队的工作项目311包括相关任务。如果存在相关任务,则边界对象307可选择性地将新任务作为子任务与先前入队的相关任务打包,而不是将新任务作为一整个新工作项目311记入。
仍参照图3,根据一实施方式,并发域301包括从工作队列308向单线程对象303调度工作项目311用于处理的调度器309。调度器309使用内部线程302从工作队列308中移除工作项目311并调度各个工作任务311以供在内部线程302上执行。调度器309调用包括在工作项目311内的任务。例如在图3中,调度器309从工作队列308中调度工作项目311,如箭头330所示。然后,工作项目在内部线程302上执行,如箭头335所示。
根据一实施方式,向工作队列308记入工作项目311并不会强制调度器309作出动作。相反,工作项目311的执行被延迟至由并发域301的顶层循环逻辑指定的时间点。一旦工作项目被记入工作队列308,则内部线程302在由调度器309确定的并发域301下一适当循环中执行所请求的任务。因此,外部对象310并不确定工作项目311何时被移除,因此也不确定内部、单线程对象303的任务何时被调用并执行。外部对象310同样不确定边界对象307何时在并发域301的内部线程302上执行任务。
一旦任务被调度并完成,则传出结果被传递给边界对象307作为回叫。边界对象307随后将该回叫通信至外部对象310,就是该外部对象310最初记入调用实现该结果的任务的工作项目311。回叫的示例包括数据、指示任务完成的标记、方法回叫等。
图4描绘了内部、单线程对象与外部对象之间的异步通信。根据本发明的实施方式,示出了在外部对象401与内部单线程对象409之间的异步通信过程中发生的通信链400。外部对象401首先与边界对象403通信402。该通信402通常具有调用或请求调用与并发域(未示出)关联的任务中一个或多个的形式。虽然所请求的任务实际上是单线程对象409的任务,但是外部对象401只将该任务与并发域或边界对象403关联。
然后,边界对象403与工作队列405通信404。该通信404通常包括将工作项目(未示出)记入工作队列405。工作队列405随后与调度器407通信406。该通信406通常包括调度器407连续调度工作队列405上记入的各个工作项目。最后,调度器407与其任务被调用的内部单线程对象409通信408。该通信408通常包括调用内部单线程对象409的任务。在另一实施方式中,外部对象401与并发域的另一边界对象(未示出)通信。
如以上参照图2-4所述的跨并发域边界的异步通信保护内部单线程对象免受背景技术一节中所述的重入问题的困扰。如将会理解的那样,当并发域的顶层逻辑控制下的对象(例如,内部单线程对象或边界对象)引导内部线程重入同样在该顶层逻辑控制下的另一对象时,会造成内部控制的重入。当不是并发域项层逻辑控制下的对象(例如,外部对象)引导内部线程重入该顶层逻辑控制下的对象时,会造成外部控制重入。当内部对象重入自己或同一并发域中另一对象时,会造成内部导致重入。当由外部对象导致的时间影响重入,从而有效地通过重入从共同包含在并发域内部对象中的逻辑移除控制时,会造成外部导致重入。结果就是不确定性重入。
重新参照图3,只允许跨并发域301的异步通信保护内部单线程对象303免受外部控制重入。例如,如果内部单线程对象303的执行包括调用外部对象310的任务,则内部线程302将进入与并发域301相关联的边界对象307之一并将调用对请求执行外部对象310的任务负责的任务。内部线程302随后会返回到执行内部单线程对象303的任务或者返回到执行来自工作队列308的已调度工作项目311。因为内部线程302不会离开并发域301而进入外部对象310,所以它不会落入外部对象310的控制之下。
此外,如果允许内部线程302执行外部对象310的任务并且如果该任务的执行包括调用内部单线程对象303的另一任务,则不允许内部线程302重入并发域301。相反,内部线程302会进入并发域301的边界对象307来调用负责记入工作项目311的任务。或者,如上所述,在某些限制下,边界对象可在内部线程上调用外部对象来调用任务。在调用该任务之后,内部线程302返回到执行外部对象310的任务并在随后返回到执行内部单线程对象303的第一、原始任务。换言之,内部线程302不会执行由外部对象310对第二任务的调用直到第一任务完成并且直到由并发域301的调度器309引导来完成上述操作。
现在参看图5和6,针对具有数据源的示例性外部对象来对本发明的实施方式进行描述。图5示出包括并发域501和数据源512的系统500,且图6示出了描绘并发域501的内部线程502与数据源512的辅线程504之间的接口的操作流程图600。在一实施方式中,辅线程504包括多个辅线程504。并发域501包括单线程对象503和调度器509,并且与边界对象507相关联。并发域501维护表示要在并发域501的内部线程502上执行的挂起任务的工作队列508。在一实施方式中,数据源512是数据库。在另一实施方式中,数据源512是网络。
内部线程502和辅线程504的执行路径在两个附图中示出。在图5中,虚线箭头描绘了在内部线程502上进行的任务执行,而实线箭头则描绘了在辅线程504中一个或多个上发生的任务执行。指代虚线和实线箭头的附图标记对应于针对图6执行的操作或任务,其中图6示出沿在其上执行的线程排列的各个任务。
仍参照图5和6,该方法在开始框601开始,并进行到操作602,其中单线程对象503请求边界对象507调用与数据源512相关联的任务。该请求在并发域的内部线程502上执行。在操作603,调度器509依照工作队列508顺序并调度各个工作项目511。根据一实施方式,以工作项目511记入工作队列508的顺序使用内部线程502调度各工作项目511。例如,假设没有新工作项目511被添加到其间,则调度器509通过工作项目1开始序列并通过工作项目7结束序列。可在工作项目7之后添加任何新的工作项目511。根据另一实施方式,根据分配的优先权值调度工作项目511。
方法602还通向与操作602同时被执行的方法611。在方法611,边界对象507调用与数据源512相关联的任务。该调用在辅线程504之一上进行。之后,该方法进行到操作612,其中在辅线程504中一个或多个上执行数据源512的任务。接下来,操作613包括数据库512将执行结果作为回叫传送回边界对象507。该结果的传送在辅线程504的一个或多个上发生。然后,在操作614,边界对象507将回叫作为工作项目511记入工作队列508。该记入在辅线程504的一个或多个上执行。
从操作614,该方法进行到操作604。操作603也可通向操作604。当在操作603中顺序执行工作队列508中的工作项目511的调度器509到达在操作614中由边界对象507添加的回叫工作项目511时,操作604发生。调度器509使用内部线程502到达回叫。一旦回叫已被调度,则调度器509继续在操作605顺序调度工作队列508中的各个工作项目511。
现在参照图7和8,针对包括第二并发域的示例性外部对象对本发明的实施方式进行描述。图7示出了分别包括第一并发域701和第二并发域721的系统700,且图8示出了在其中第一并发域701与第二并发域721接口的操作流程图800。各个并发域701、721分别包括内部线程702、722、单线程对象703、723和调度器709、729。各个并发域701、721分别与边界对象707、727相关联并分别维护表示要在内部线程702、722上执行的挂起工作项目711、731的工作队列708、728。在图7中,第一组虚线箭头示出在内部线程702上发生的任务执行,一组实线箭头示出在辅线程704的一个或多个上发生的任务执行,且第二组虚线箭头示出在第二内部线程722上发生的任务执行。这些虚线和实线箭头示出了涉及在第一并发域701与第二并发域721之间的通信的各种操作的执行。指代这些箭头的附图标记与针对图8执行的操作或任务对应。
仍参照图7和8,该方法在开始框801开始并进行到操作802和822。操作822包括使用内部线程722来顺序调度工作队列728上各个工作项目731的第二并发域721的调度器729。操作802与操作822同时进行。在操作802,第一并发域701的单线程对象703请求边界对象707从第二并发域721的对象之一调用任务。在一实施方式中,所请求的任务是第二并发域721的单线程对象723之一的任务。在另一实施方式中,所请求的任务是与第二并发域721相关联的边界对象727之一的任务。
从操作802,该方法进行到两操作803和812。在操作803,第一并发域701的调度器709顺序调度工作队列708上的各个工作项目711。在操作812,第一并发域701的边界对象707使用辅线程704的一个或多个来与第二并发域721的边界对象727通信。通信包括对调度任务的请求。然后,在操作813,第二边界对象727将所请求的任务作为工作项目731记入工作队列728。使用辅线程704的一个或多个执行该记入。
操作813和操作822都通向操作823。在操作823,调度器729到达并调度包括所请求的任务的工作项目731。该调度在第二并发域721的内部线程722上执行。随后在操作824,执行该任务作为对第一并发域701中单线程对象703的回叫。在这一点上,该方法再次分离并进行至操作825和814。在操作825,调度器729继续顺序调度工作队列728上的各个工作项目731。
操作814与操作825同时发生。在操作814中,第二并发域721的边界对象727使用一个或多个辅线程704来请求第一并发域701的边界对象707将回叫作为工作项目711记入工作队列708。之后,在操作815,边界对象707将该回叫记入工作队列708。该记入在辅线程704的一个或多个上执行。
当第一并发域701的调度器709到达记入在工作队列708上的回叫时,进行操作804。调度器709使用第一并发域701的内部线程702来调度该回叫。该回叫在操作805执行。之后,该方法进行到操作806,在其中调度器709继续依照工作队列708的顺序,有序地调度各个工作项目711。该方法在806结束。
系统的另一示例(未示出)包括彼此接口并与其它外部对象接口的三个或以上的并发域。这种系统基本上根据与本文所述相同的操作来工作。该系统中的各个并发域包括内部线程、一个或多个单线程对象以及调度器。各个并发域可与至少一个边界对象向关联并且可维护工作队列。所有跨并发域边界的通信都是异步的(例如,通过响应的边界对象、工作队列和调度器过滤)。
如上所述的各个实施方式仅以举例说明的方式提供,并且不应该理解为限制本发明。本领域技术人员很容易意识到可对本发明作出各种更改和变化,而不依照本文示出和描述的示例实施方式和应用并且不背离在所附权利要求书中阐述的本发明真正精神和范围。

Claims (17)

1.一种同步软件应用程序组件的操作的方法,包括:
接收第一工作项目以供第一软件应用程序组件处理;
确定工作项目队列中是否有任何先前记入的工作项目包括与所述第一工作项目相关的任务;
响应于确定工作项目队列中有先前记入的工作项目包括与所述第一工作项目相关的任务,将所述第一工作项目与所述工作项目队列中的该先前记入的工作项目打包;
响应于确定工作项目队列中没有任何先前记入的工作项目包括与所述第一工作项目相关的任务,将所述第一工作项目记入所述工作项目队列;
确定所述第一软件应用程序组件是否已经完成对传递给所述第一软件应用程序组件以供处理的任何先前的工作项目的处理;
如果所述第一软件应用程序组件已经完成对传递给所述第一软件应用程序组件以供处理的任何先前的工作项目的处理,则检索已记入到所述工作项目队列的所述第一工作项目;以及
将检索到的第一工作项目传递给所述第一软件应用程序组件以供处理。
2.如权利要求1所述的方法,其特征在于,在接收第一工作项目以供第一软件应用程序组件处理之前,与所述软件应用程序的其它组件分开地在并发域中实例化所述第一软件应用程序组件,所述并发域包括可用于执行所述第一软件应用程序组件的单个内部处理线程。
3.如权利要求2所述的方法,其特征在于,
所述接收第一工作项目以供第一软件应用程序组件处理包括:在与所述并发域相关联的边界对象处接收来自所述并发域外部的所述软件应用程序的对象的所述第一工作项目,所述第一工作项目被导向所述第一软件应用程序组件;
所述将所述第一工作项目记入所述工作项目队列包括:使所述边界对象将所述第一工作项目记入所述工作项目队列以供所述第一软件应用程序组件随后处理。
4.如权利要求3所述的方法,其特征在于,确定所述第一软件应用程序组件是否已经完成对传递给所述第一软件应用程序组件以供处理的任何先前的工作项目的处理包括:确定设置在所述并发域中的调度器对象是否已被通知:来自被传递给所述第一软件应用程序组件的任何先前的工作项目的结果已从所述第一软件应用程序组件传递至所述边界对象。
5.如权利要求4所述的方法,其特征在于,检索已记入到所述工作项目队列的所述第一工作项目包括:响应于来自被传递给所述第一软件应用程序组件的任何先前的工作项目的结果已从所述第一软件应用程序组件传递至所述边界对象的通知,使得所述调度器对象检索已记入所述工作项目队列的所述第一工作项目。
6.如权利要求5所述的方法,其特征在于,将检索到的第一工作项目传递给所述第一软件应用程序组件以供处理包括:响应于来自被传递给所述第一软件应用程序组件的任何先前的工作项目的结果已从所述第一软件应用程序组件传递至所述边界对象的通知,使得所述调度器对象将所述检索到的第一工作项目传递至所述第一软件应用程序组件以供处理。
7.如权利要求6所述的方法,其特征在于,还包括使所述调度器对象从所述第一软件应用程序组件扣留被导向所述第一软件应用程序组件的已记入的第二工作项目,直到所述第一软件应用程序组件由所述边界对象向所述外部对象返回所述所检索到的第一工作项目的处理结果。
8.如权利要求7所述的方法,其特征在于,使得所述调度器对象从所述第一软件应用程序组件扣留被导向所述第一软件应用程序组件的已记入的第二工作项目包括:阻止所述第一软件应用程序组件请求所述已记入的第二工作项目,使得所述第一软件应用程序组件仅在所述调度器对象确定所述第一软件应用程序组件准备好处理所述已记入的第二工作项目时才可以接收所述已记入的第二工作项目。
9.如权利要求7所述的方法,其特征在于,在与所述并发域相关联的边界对象处接收来自所述并发域外部的所述软件应用程序的对象的所述第一工作项目包括:在所述边界对象处接收来自辅并发域的所述第一工作项目,所述辅并发域包括被配置用以执行包括在所述辅并发域内的第二软件应用程序组件的单个内部线程,并且所述辅并发域与用于经由所述边界对象接收来自所述第一软件应用程序组件的结果的辅并发域边界对象相关联。
10.一种并发执行单线程和多线程对象的方法,所述方法包括:
接收包含用于并发处理数据的多个软件组件的软件应用程序;
将用于并发处理数据的所述软件组件的每一个划分到分立并发域中;
将边界对象与各个分立并发域相关联以用于接收导向所述分立并发域中包含的各软件组件对象的任何数据调用,其中所述边界对象用于:
从第一并发域外部的软件应用程序对象接收第一工作项目,
确定与所述边界对象相关联的工作项目队列中是否有任何先前记入的工作项目包括与所述第一工作项目相关的任务,
响应于确定工作项目队列中有先前记入的工作项目包括相关相关的任务,将所述第一工作项目与所述工作项目队列中的该先前记入的工作项目打包,
响应于确定工作项目队列中没有任何先前记入的工作项目包括与所述第一工作项目相关的任务,将所述第一工作项目记入所述工作项目队列;以及
在各个所述分立并发域中设置调度器对象用于在各个独立的软件组件对象已完成对先前向所述各个独立的软件组件对象提供的其它数据调用之后向所述各个独立的软件组件对象提供数据调用。
11.如权利要求10所述的方法,其特征在于,还包括:
在第一并发域中,响应于从所述调度器对象接收的数据调用使用所述第一并发域内部的单个处理线程执行至少一个单线程对象,所述单个处理线程无需所述第一并发域外部的任何辅线程的直接调用而执行;以及
使用辅处理线程执行不包括在所述第一并发域中的至少一个外部对象,所述辅处理线程无需所述第一并发域中的所述单个处理线程的直接调用而执行。
12.如权利要求11所述的方法,其特征在于,还包括:
使用与所述第一并发域关联的所述边界对象在所述第一并发域内部的所述单个处理线程与所述辅处理线程之间接口。
13.如权利要求12所述的方法,其特征在于,所述辅处理线程包括第二并发域内部的第二单个处理线程,其中所述第二单个处理线程被配置用以执行包含在所述第二并发域中的单线程对象,所述第二并发域具有用来与关联于所述第一并发域的所述边界对象相接口的关联的边界对象。
14.如权利要求13所述的方法,其特征在于,工作项目被存放在与每个边界对象相关联的工作队列中,直到由关联的调度器对象检索用以向给定的独立的软件组件对象提供为止。
15.如权利要求14所述的方法,还包括在与所述第一并发域相关联的所述边界对象处经由与所述第二并发域关联的边界对象从所述第二并发域接收数据调用,以供包含在所述第一并发域中的给定软件组件对象执行。
16.如权利要求15所述的方法,其特征在于,还包括将来自所述第二并发域的所述数据调用存放在与所述第一并发域关联的工作队列中。
17.如权利要求16所述的方法,其特征在于,如果包含在所述第一并发域中的所述给定软件组件对象已经完成对任何先前接收的数据调用的处理,就使得与所述第一并发域相关联的调度器对象从与所述第一并发域相关联的所述工作队列中检索来自所述第二并发域的数据调用,并使得与所述第一并发域关联的调度器对象将来自所述第二并发域的所述数据调用向包含在所述第一并发域中的所述给定软件组件对象提供来自所述第二并发域的所述数据调用以供处理。
CN2006800146187A 2005-04-29 2006-04-20 使用并发域的多线程化 Expired - Fee Related CN101248405B (zh)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US67613705P 2005-04-29 2005-04-29
US60/676,137 2005-04-29
US70322005P 2005-07-28 2005-07-28
US60/703,220 2005-07-28
US11/360,454 US7581225B2 (en) 2005-04-29 2006-02-23 Multithreading with concurrency domains
US11/360,454 2006-02-23
PCT/US2006/015185 WO2006118826A2 (en) 2005-04-29 2006-04-20 Multithreading with concurrency domains

Publications (2)

Publication Number Publication Date
CN101248405A CN101248405A (zh) 2008-08-20
CN101248405B true CN101248405B (zh) 2010-09-15

Family

ID=39334892

Family Applications (4)

Application Number Title Priority Date Filing Date
CN200680014637XA Expired - Fee Related CN101167052B (zh) 2005-04-29 2006-04-20 应用程序框架分阶段模型
CN200680014594.5A Expired - Fee Related CN101512503B (zh) 2005-04-29 2006-04-20 Xml应用程序框架
CN200680014092.2A Expired - Fee Related CN101542457B (zh) 2005-04-29 2006-04-20 事务变换
CN2006800146187A Expired - Fee Related CN101248405B (zh) 2005-04-29 2006-04-20 使用并发域的多线程化

Family Applications Before (3)

Application Number Title Priority Date Filing Date
CN200680014637XA Expired - Fee Related CN101167052B (zh) 2005-04-29 2006-04-20 应用程序框架分阶段模型
CN200680014594.5A Expired - Fee Related CN101512503B (zh) 2005-04-29 2006-04-20 Xml应用程序框架
CN200680014092.2A Expired - Fee Related CN101542457B (zh) 2005-04-29 2006-04-20 事务变换

Country Status (1)

Country Link
CN (4) CN101167052B (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102455933B (zh) * 2010-10-22 2014-01-15 深圳市科陆电子科技股份有限公司 一种通过线程管理提高多任务处理效率的方法
CN104750607B (zh) * 2011-06-17 2018-07-06 阿里巴巴集团控股有限公司 一种选择性恢复测试执行的方法及装置
CN103793384B (zh) * 2012-10-26 2017-09-19 上海宝信软件股份有限公司 一种通用的客户端与服务端数据绑定的方法
US20150248203A1 (en) * 2014-03-03 2015-09-03 Microsoft Technology Licensing, Llc Portable business logic with branching and gating
CN104408120B (zh) * 2014-11-26 2019-04-12 北京国双科技有限公司 源代码的处理方法及装置
KR102000266B1 (ko) * 2016-01-15 2019-07-15 구글 엘엘씨 애플리케이션 인스턴스들에 걸친 식별자들
CN105843789A (zh) * 2016-04-01 2016-08-10 乐视控股(北京)有限公司 富文本监听方法和装置
EP3452909A1 (en) * 2016-08-23 2019-03-13 Oracle International Corporation System and method for supporting fast hybrid reconfiguration in a high performance computing environment
US10708389B2 (en) * 2016-12-06 2020-07-07 Intelligrated Headquarters, Llc Phased deployment of scalable real time web applications for material handling system
CN107402768B (zh) * 2017-07-31 2020-06-30 四川长虹电器股份有限公司 一种可复用扩展的Android应用开发方法
CN107450725B (zh) * 2017-07-31 2020-09-11 科大讯飞股份有限公司 人机交互应用平台、方法、以及存储介质
CA3216654A1 (en) * 2017-12-03 2019-06-06 Thomas Stachura Spreadsheet-based software application development
CN110032718B (zh) * 2019-04-12 2023-04-18 广州广燃设计有限公司 一种表格转换方法、系统和存储介质
CN110347516B (zh) * 2019-06-27 2023-03-24 河北科技大学 一种面向细粒度读写锁的软件自动重构方法及装置
CN110393918B (zh) * 2019-07-26 2024-07-23 网易(杭州)网络有限公司 一种游戏触发器制作的方法和装置
CN110727703B (zh) * 2019-09-23 2022-10-11 苏宁云计算有限公司 一种自动识别json代码中注释的方法及装置
CN112817573B (zh) * 2019-11-18 2024-03-01 北京沃东天骏信息技术有限公司 用于构建流式计算应用的方法、装置、计算机系统和介质
CN111897529B (zh) * 2020-06-08 2023-11-14 华人运通(江苏)技术有限公司 前端组件转换方法、装置、设备及可读存储介质
CN111782654B (zh) * 2020-07-01 2024-09-20 浪潮云信息技术股份公司 一种分布式数据库中数据分区存放的方法
CN112965838B (zh) * 2021-03-16 2024-04-19 支付宝(杭州)信息技术有限公司 并发程序的数据竞争检查方法及装置
CN114610725B (zh) * 2022-05-11 2022-08-16 成都九洲电子信息系统股份有限公司 一种计算机设备及其应用方法、存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5659701A (en) * 1991-12-02 1997-08-19 International Business Machines Corporation Apparatus and method for distributed program stack
US6083276A (en) * 1998-06-11 2000-07-04 Corel, Inc. Creating and configuring component-based applications using a text-based descriptive attribute grammar
US6670969B1 (en) * 2000-06-29 2003-12-30 Curl Corporation Interface frames for threads
CN1588316A (zh) * 2004-06-29 2005-03-02 北京大学 应用服务器的性能优化方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5940828A (en) * 1997-11-18 1999-08-17 International Business Machines Corporation Locking contention resolution for shared resources
US20050091576A1 (en) * 2003-10-24 2005-04-28 Microsoft Corporation Programming interface for a computer platform
SG99941A1 (en) * 2000-08-30 2003-11-27 Ibm Transaction support on logical disks

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5659701A (en) * 1991-12-02 1997-08-19 International Business Machines Corporation Apparatus and method for distributed program stack
US6083276A (en) * 1998-06-11 2000-07-04 Corel, Inc. Creating and configuring component-based applications using a text-based descriptive attribute grammar
US6670969B1 (en) * 2000-06-29 2003-12-30 Curl Corporation Interface frames for threads
CN1588316A (zh) * 2004-06-29 2005-03-02 北京大学 应用服务器的性能优化方法

Also Published As

Publication number Publication date
CN101542457B (zh) 2015-11-25
CN101167052A (zh) 2008-04-23
CN101512503A (zh) 2009-08-19
CN101542457A (zh) 2009-09-23
CN101167052B (zh) 2012-05-16
CN101248405A (zh) 2008-08-20
CN101512503B (zh) 2013-03-27

Similar Documents

Publication Publication Date Title
CN101248405B (zh) 使用并发域的多线程化
CN100410872C (zh) 用于增强的运行时间主机支持的方法和设备
WO2020108303A1 (zh) 一种基于异构计算的任务处理方法及软硬件框架系统
Wolfe et al. Real-time CORBA
CN100530123C (zh) 在单处理器或多处理器计算机系统中优化多任务应用的存入和重放的方法
KR20080005523A (ko) 동시성 도메인들과의 멀티 쓰레딩
CN101097527A (zh) 一种应用进程的流程调度方法及系统
CN100553214C (zh) 移动虚拟环境系统
Fay-Wolfe et al. Real-time CORBA
WO2020186836A1 (zh) 任务调度
EP1506475A2 (en) Hybrid threads for multiplexing virtual machine
WO2008003536A2 (en) Method, system and computer program for determining the processing order of a plurality of events
Zhao et al. Realizing fast, scalable and reliable scientific computations in grid environments
Miles et al. Connecting scientific data to scientific experiments with provenance
Keedy On structuring operating systems with monitors
US20060020701A1 (en) Thread transfer between processors
CN108958903A (zh) 嵌入式多核中央处理器任务调度方法与装置
JP2002073929A (ja) ワークフロー管理システムのアーカイブ
Gopinath Programming and execution of object-based, parallel, hard, real-time applications
CN103631648A (zh) 一种任务处理方法及系统
CN108958905A (zh) 嵌入式多核中央处理器的轻量级操作系统
Queinnec Locality, causality and continuations
Shu Chare kernel and its implementation on multicomputers
Kristensen et al. Component composition and interaction
Meister et al. Managing product line variability by patterns

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150430

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150430

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100915

Termination date: 20190420