CN101952799B - 一致地信令状态变更 - Google Patents
一致地信令状态变更 Download PDFInfo
- Publication number
- CN101952799B CN101952799B CN2009801066431A CN200980106643A CN101952799B CN 101952799 B CN101952799 B CN 101952799B CN 2009801066431 A CN2009801066431 A CN 2009801066431A CN 200980106643 A CN200980106643 A CN 200980106643A CN 101952799 B CN101952799 B CN 101952799B
- Authority
- CN
- China
- Prior art keywords
- node
- oracle
- assembly
- dependence
- value
- 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
Images
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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Mobile Radio Communication Systems (AREA)
- Hardware Redundancy (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明的信令系统提供了用于传递、报告,和/或以其他方式处理软件依赖关系链中的状态变更的同步方法。在第一阶段,信令系统标识软件组件之间的所有依赖关系,并还用第一表示来设置每一个节点的二进制指示符。在标识源节点中的任何变更(例如,值被更新)之后,系统将每一二进制指示符更新为第二设置。在第二阶段,系统基本上按从源节点,到中间节点,以及最终节点等的渐进次序,启动依赖关系链中的所有监听程序。一旦所有监听程序都有机会基于已更新的值来执行一个或多个进程,系统就可以丢弃依赖关系图,以允许为后续值变更构建新的依赖关系图。
Description
背景
在计算机化系统内使用的应用程序通常包括出于各种不同的原因而相互依赖的多个不同的组件或模块。例如,简单的计算器应用程序可以包括输出显示组件,该输出显示组件在它标识到从计算模块输出的一个或多个值的任何时刻立即刷新(即,显示新输出)。计算模块进而可被配置成在它接收到来自一个或多个输入组件的一个或多个数字和函数输入的任何时刻执行计算。由此,显示组件将不仅依赖于计算模块,而且还最终依赖于计算器应用程序中的各个输入组件中的每一个。
存在可在软件级配置这些依赖关系的多种不同的方式。例如,上文所描述的计算器模块可以“发布”其计算出的值,以使得正在“监听”该值的任何其他显示组件将在值被发布时标识该值并对其执行某一动作。为标识何时发布值,显示组件进而可以建立监听程序(例如,建立“事件”),该监听程序最终标识和/或接收已发布的值。在其他情况下,计算器模块本身可以被配置成将任何新计算出的值传递(例如,“信令”)给向计算器模块注册的特定其他组件。由此,可以理解,存在用于将数据从一个软件组件传递到另一个软件组件的多种“推”和“拉”样式的机制。
由此,在程序员想要创建模块或组件之间的依赖关系的任何时刻,程序员通常将需要在代码中编写依赖关系,并且有时甚至为该关系创建监听程序。例如,程序员可以编写一个监听程序,该监听程序不仅在一个组件发布值时检索该值,而且还将该值发送到依赖关系链中的另一个组件。程序员也可以或另选地编写其他逻辑,由此组件只在满足了某种特定条件时(例如,值具有特定大小)向上发送值。结果,可以理解,组件链中的每一监听程序都可以按不同的方式,并以不同的速度来处理值。
尽管将逻辑写入到每一监听程序中的能力可以提供某种编程灵活性,但是,它也将会导致过分复杂的依赖关系链,和/或难以保证其准确性。例如,复杂依赖关系链会具有许多不同的监听程序,每一监听程序都有效地以不同的方式,并以不同速率来响应一个或多个源节点中的相同变更。这会导致依赖关系链中的后续组件的竞争条件。具体而言,依赖于从同一个源接收到值的两个组件的依赖子组件最终可以处理来自一个父组件的已正确地更新的值,但是,使用过时的值来再次执行。或者,依赖子组件最终可能由于很有可能永远不会发生的条件而无限地挂起。这可能沿着依赖关系链具有更进一步的连锁反应。
除前面的内容之外,在常规系统的情况下,甚至可以在用于接收信息的更直接的路线可能是优选的情况下使用软件组件之间的相同依赖关系。例如,一个依赖关系链可能涉及从源节点A,到中间节点C,然后到最终节点D的依赖关系。然而,在其他情况下,节点A可能只需要来自最终节点D的值。例如,在第二执行上下文中,最终节点D可能只需知道源节点A已经变更,而不一定立即需要源节点A的值。在大多数情况下,甚至第二执行上下文仍将涉及将变更的实际值从A中继到C到D,即使D只需知道A已经变更。在较长的依赖关系链中,特别是涉及若干不同条件的依赖关系链,仅仅对于最终节点D发现源节点A已经变更将会有较大的、不必要的延迟。
用于克服这些问题的某些常规机制涉及简单地将频繁刷新速率编码到不同的监听程序中的每一个中。虽然在某些情况下有效,但是,可以理解,这在计算上是昂贵的且没有必要,特别是在可能涉及大量监听程序的情况下。例如,依赖关系链中的某些底层源组件可以经常变更,而其他底层组件可能很少或不经常变更。此外,某些其他组件甚至可能不在特定输出中涉及,并因此费力地传递(并计算)这些最终节点处的值将尤其没有必要。例如,电子表格上的只表示最终值但是由于某种原因当前没有显示在显示屏幕上的单元格,可能直到这些单元格在视图内才需要更新。
因此,均码(one-size fits all)方法通常可以是不必要的。此外,在当前的系统中往往充斥着低效,因为常常有依赖关系被注册两次的情况,还因为很少有上游监听程序一定在其他下游监听程序之前处理某些数据的保证。尽管这些类型的问题可能对于少数不经常变更的组件不成问题,但是,这些类型的问题可能不必要地减缓或挂起具有大量不断变更的显示的数据(例如,处理股票行情数据)的系统。此外,这样的问题还可能导致无响应组件,或其他不必要的处理延迟。
因此,存在可以解决的与报告复杂软件依赖关系中的值变更相关联的多个困难。
简要概述
本发明的实现提供确保用于传递、报告和/或以其他方式处理复杂软件依赖关系链中的状态/值变更的同步方法的系统、方法,以及计算机程序产品。具体而言,本发明的实现包括二阶段方法,其中系统建立对应于软件组件的依赖关系链的节点图,并且只在信令所有节点之后才调用节点图中的所有监听程序。由此,并且由于监听程序可以按照依赖关系链次序来调用,因此本发明的实现可以确保所有监听程序有效地基于相关源组件的相同状态,并按适当次序来接收值,由此确保一致性。
例如,根据本发明的一实现的用于处理依赖关系链中一个或多个值的一致集合的方法可以涉及创建对应于多个组件的多个节点,这些组件包括在依赖关系链中次序排序的一个或多个源组件和一个或多个依赖组件。该方法还可以涉及对于每一个节点,将二进制指示符设为指示一个或多个源组件包括初始状态的第一设置。此外,该方法还可以涉及在标识对一个或多个源组件中的后续状态的变更之后,将每一个节点的每一个二进制指示符都设为第二设置。此外,该方法还可以涉及调用已经向已创建的多个节点注册的一个或多个监听程序。在此情况下,一个或多个监听程序被同步,以基于一个或多个源组件中的后续状态来执行。
此外,根据本发明的一实现的用于只基于一组有保证的值来创建和更新存储器中数据结构的另一种方法可以涉及创建初始节点图。初始节点图对应于多个组件,这些组件包括依赖于一个或多个源组件的一个或多个依赖组件。在此情况下,初始节点图中的每一个节点都被设为第一设置。该方法还可以涉及在标识一个或多个源组件已变更为已更新的值时,高速缓存已更新的值,并启动向初始节点图注册的所有监听程序以基于已更新的值来执行处理。此外,该方法还可以涉及在所有已启动的监听程序都已经完成基于已更新的值的处理之后丢弃初始节点图。此外,该方法还可以涉及基于对一个或多个源组件的一个或多个后续变更来创建后续节点图。
提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本说明书将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。
附图简述
为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施方式来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中:
图1A示出了其中根据本发明的一实现的信令系统标识依赖关系链中的节点的概略示意图;
图1B示出了其中根据本发明的一实现的信令系统信令依赖关系链中的每一个节点的概略示意图;
图1C示出了其中根据本发明的一实现的信令系统在信令依赖关系链中的各节点之后调用监听程序的概略示意图;
图2示出了根据本发明的一实现的用于确保依赖关系链中的依赖节点之间的一致性的方法的流程图;以及
图3示出了根据本发明的一实现的用于创建不同的依赖关系链结构以确保节点之间的一致性的的方法的流程图。
详细描述
本发明的各个实现涉及确保用于传递、报告和/或以其他方式处理复杂软件依赖关系链中的状态/值变更的同步方法的系统、方法,以及计算机程序产品。具体而言,本发明的实现包括二阶段方法,其中,系统建立对应于软件组件的依赖关系链的节点图,并且只有在信令所有节点之后才调用节点图中的所有监听程序。由此,并且由于监听程序可以按照依赖关系链次序来调用,因此本发明的各个实现可以确保所有监听程序有效地基于相关源组件的相同状态,并按适当次序来接收值,由此确保一致性。
由此处更加全面地理解的,可以至少部分地使用二阶段通知,以及至多一次通知传递来实现这些及其他优点。此外,如此处所描述的有向通知图按依赖次序提供状态变更通知(如图形状所示)。具体而言,状态变更的通知(而不必传递已变更的值)只在程序可以正确地确定所有过时的节点都是过时的之后才发生。由此,对于给定节点,通知只发生一次(解决了循环)。结果,本发明的这些及其他方面可以被理解为提供有关依赖状态的合理假设,并可以有助于在多线程环境中维护系统的保证。
图1A示出了概略示意图,其中信令系统100为依赖关系链中的依赖软件组件的至少一个集合准备节点图,以便确保一致的信令。例如,图1A示出系统100包括组件A 110、B 120、C 130、D 140、E 150,以及F 160。此外,图1A还示出组件A 110依赖于组件B 120和组件C,而组件B 120依赖于组件D140,且组件C依赖于组件E 150。此外,图1A还示出组件D 140依赖于组件F 160,并且组件D以及组件E有条件地彼此相关。例如,组件E可能只有在由组件D产生的值具有特定大小或长度等的情况下才计算值。
由此,软件组件A-F的这一集合通常可以被认为形成“依赖关系链”,该依赖关系链包括多个源节点、依赖节点,和/或最终节点。在此特定示例中,组件F 160本质上可以被理解为依赖关系链中的源节点。相反,组件B、C、D,以及E本质上可以被理解为中间节点,而组件A可以被理解为依赖关系链中的依赖节点。
然而,当然还可以理解,依赖关系链中的任何给定节点都可以被认为是相对于依赖关系链中的另一个节点的依赖节点、中间节点或源节点。例如,组件D 140可以被认为是对于组件B 120和/或组件E 150的源节点。类似地,组件E 150也可以被认为是对于组件C 130的源节点,等等。此外,还可以理解,所示出的依赖关系链可取决于各种执行上下文在几乎任何时刻延长、缩短,以及变得更复杂或更容易。例如,组件A可以包括用于在一个计算中涉及组件B-F的一个特定计算的输出模块,但在其他计算中涉及更多或更少的这样的组件节点。
图1A示出系统100可以准备对应于(或以其他方式表示)软件组件的依赖关系链的节点图113。一般而言,节点图113包括一组具有链接节点(110a、120a、130a、140a、150a以及160a)的存储器中数据结构,这些节点基于相关软件组件(例如,110、120、130、140、150、160)中的状态变更来创建和丢弃。例如,在请求通过组件A进行某种处理时,处理模块105为该特定请求遍历依赖关系链中的每一个软件组件110、120、130、140、150、160,并准备对应的节点图113。具体而言,图1A示出处理模块105准备包括节点110a、120a、130a、140a、150a,以及160a的节点图113,而这些节点分别对应于组件110、120、130、140、150,以及160。
除节点图113之外,图1A还示出处理模块105还在监听程序注册表170中注册每一个软件组件的每一个不同的监听程序。例如,在遍历各个组件110、120、130等以标识依赖关系时,每一组件也可以提供特定监听程序的指示。然后,处理模块105可以在标识到时并由此按依赖关系链中的适当或确切次序在监听程序注册表中注册每一个已标识的监听程序次序。例如,图1A示出组件B 120,D 145,以及E 155各自分别使用诸如监听程序B 125,D 145,以及E 155之类的监听程序。因此,图1A示出监听程序注册表170包括按相对依赖关系链次序的监听程序D 145,监听程序E 155,以及监听程序B 125的表示。
在任何情况下,系统100都可以创建和丢弃节点图113,以反映和管理软件组件状态的变更。例如,当源节点F等于一个值(例如,“0”或“状态1”165)时,处理模块105可能已经创建此特定节点图113。当源节点F从第一状态变更为另一个后续状态或值(例如,从“0”到“10”-未示出)时,系统100(例如,经由处理模块105)然后可以更新节点图113,以反映已经发生变更这一事实。然后,系统100可以使节点图113保持在此特定状态,直到诸如所有组件都有机会完成任何所需处理之类的时刻。一旦各种组件110、120、130完成处理源节点中的最初导致对节点图113的变更的变更,处理模块105然后就可以丢弃节点图113,并在必要时利用新的这样的节点图再次开始。结果,在组件110、120、130正在处理先前的变更(例如,从“0”变为“10”)时,系统100基本上禁止对应的节点接收新的状态更新。
软件组件中的处理的一致性和单一性至少部分地使用根据本发明的各个实现的一个或多个信令特征来启用。例如,图1A示出节点图113中的各个节点110a、120a等中的每一个都包括(或备有)二进制指示符,如二进制指示符117a、127a、137a、147a、157a和167a。在此特定图示中,二进制指示符被示为“+”号,以标识特定的初始或第一设置。具体而言,所示出的情况下的“+”号意味着依赖关系链所基于的给定软件源组件(例如,组件160,状态165)的、在已经处理任何变更之前的默认值。
由此,并且如此处更加全面地理解的,节点图113可以被设为二进制指示符中的变更链接到原始源节点的特定状态。例如,只要接收到组件F 160的状态变更(即,消息180),系统100就可以高速缓存新的值(例如,从“0”变为“10”),并自动将新的值链接到节点图113,而不管源组件F 160可能发生的任何其他后续变更。此外,系统100还可以在需要时将对源组件(例如,组件F 160)的值的任何后续变更链接到新的(或刷新的)节点图(未示出)。
由此,“二进制”指示符只能变为一个其他值,并且如此处所讨论的,只变更一次。由此,当处理模块105标识特定软件源组件(例如,160)的值的变更时,二进制指示符117a、127a等只更新一次以反映该变更。例如,图1A示出处理模块105接收指示组件F 160已经被更新的消息180。如图1B所示,处理模块105然后通过不同的节点110a,120a等中的每一个来发送信号185。信号185进而包括将二进制指示符从“+”状态变更为“-”状态的记法,并由此简单地将二进制指示符上的初始设置更新为后续设置。
此外,信号185基本上按照从源节点F 160a开始的依赖关系链次序发送。例如,图1B示出信号185首先被发送到节点F 160a,然后被发送到节点D 140a和E 150a等等,这导致二进制指示符从设置167a、157a,以及147a(即,“+”)分别变为设置167b、157b,以及147b(即,“-”)。最终,信号185将经过每一依赖关系,直到节点图113中的所有节点都接收到信号185。在大多数情况下,每一个节点都将只接收信号一次。然而,本发明的各个实现可以适应其中节点由于任何其他原因接收信号的重复(或任何其他信号)的情况,因为每一个二进制指示符变更“至多一次”。
具体而言,由于每一个二进制指示符147只可变更一次(即,“至多一次”),因此没有其他信号(或信号的重复)可以变更已变更的/已更新的节点的二进制指示符。即,在具体引用这些附图中所使用的术语的情况下,一旦被设为所示出的“-”号,则给定二进制指示符不能变回到“+”号。由此,所示出的节点图113的信令路径甚至在某些节点无意中来回循环特定信号185的情况下也将仍然起作用。当然,除了二进制指示符的“至多一次”变更的配置以外,节点本身可以被配置成避免这些种类的问题。例如,在至少一个实现中,节点图113中的每一个节点在创建时被配置成不具有到另一个节点的反向通道。由此,尽管节点F 160a将信号185至少中继到节点D 140a,但是节点F 140a不能接受来自节点D 140a的返回信号。
系统100还确保直到给定节点图中的所有节点都已经更新(经由信号185),该特定依赖关系链中的处理才会发生。例如,在至少一个实现中,系统100通过保持对监听程序125、145或155的调用来确保此一致性,直到在所有二进制指示符都已经被设置和更新之后,或直到在信号185已经到达节点图113中的所有节点至少一次之后。因此,在这样的实现中,节点图的初始创建(例如,图1A)将由于仅仅发现监听程序125、145以及155而不会导致任何处理。甚至在系统100接收到对组件F的更新(例如,消息180)时,系统100也不会调用监听程序125、145155中的任一个,直到二进制指示符被更新以反映源节点处的初始变更。
除在更新所有二进制指示符之后调用监听程序之外,系统100还可以通过按特定次序调用监听程序来增强一致性。例如,图1A-1C示出监听程序注册表170基本上以处理模块105标识监听程序125、145以及145的次序存储对这些监听程序的引用。具体而言,图1A-1C示出监听程序注册表170存储次序是首先监听程序D 145、监听程序E 155,以及监听程序B 125的这些特定监听程序的次序。结果,当处理模块105最终调用这些特定监听程序时,处理模块105只按近似的处理次序来这样做。例如,图1C示出处理模块105通过节点图113按近似的依赖关系链次序来应用消息190,以使得对应于节点D 140a和E 150a的监听程序D 145和E 155在对应于节点B 120a的监听程序B 125之前被调用。
当系统100调用这些监听程序中的每一个时,每一个对应的软件组件都可以基于源组件处的值变更来执行处理。例如,一旦监听程序145被调用,软件组件D 140就可以对与此节点图113相关联的高速缓存的值(例如,源组件F160的当前值)执行任何处理。一旦监听程序E 155和B 125被调用,组件E 150和B 120就可以检索已经从节点D处理和/或提供的任何值,该值基于来自消息180的对组件F的最近更新。
可以理解,由此系统100不仅对对每一监听程序的调用进行排序,而且还对沿着依赖关系链的连续值的处理进行排序。这显著地增加特定软件组件从另一个源/中间节点中检索到的每一个值只基于已经处理的最新值的可能性。此外,一旦已经基于组件F 160的所分配的状态调用了所有监听程序,并且所有处理都已经完成,则处理模块150然后就丢弃节点图113。如果需要的话,系统100还可以准备对应于组件F中的又一个变更的另一个节点图。
因此,图1A、1B和1C提供了一个或多个示意图或组件,其用于确保依赖关系链中的组件基本上以正确的次序有效地一次只处理源节点中的一个状态变更。这可以提供多个重要保证,并可以缓解或以其他方式消除有时由于这些特定情况下的竞争条件(在同一个链中的当前值和旧值的处理之间)而引发的顾虑。
除了上述内容之外,本发明的各实现还可以按照包括用于实现特定结果的一个或多个动作的方法来描述。例如,图2示出了处理依赖关系链中的一个或多个值的一致集合的方法的流程图。此外,图3还示出了只基于一组有保证的值来创建和更新表示依赖关系链的存储器中数据结构的附加或替换方法。图2和3的流程图中的动作在下文中参考图1A-1C的组件和示意图来描述。
例如,图2示出处理依赖关系链中一个或多个值的一致集合的方法可以包括标识依赖关系链中的节点的动作200。动作200包括创建对应于多个组件的多个节点,这些组件包括在依赖关系链中排序的一个或多个源组件和一个或多个依赖组件。例如,处理模块105从组件A 110接收处理请求,并遍历对应的依赖关系链以标识组件A所依赖的每一个不同的组件。然后,处理模块105然后创建对应的节点图113数据结构,该数据结构包括依赖关系链中的与已标识的A所依赖的组件相关的一个或多个节点。
图2还示出该方法可以包括为每一个节点设置二进制指示符的动作210。动作210包括对于每一个节点,将二进制指示符设为指示一个或多个源组件包括初始状态的第一设置。例如,图1A示出处理模块105为节点图113中的每一个节点创建并设置二进制指示符117a、127a、137a、147a、157a和167a。在一个实现中,该特定二进制指示符被设为初始状态(165),该初始状态(165)有效地阐明一个或多个源组件(例如,组件F 160)的值从建立节点图以来尚未变更。
此外,图2还示出该方法可以包括在源节点变更之后将所有二进制指示符都设为第二设置的动作220。动作220包括在标识对一个或多个源组件中的后续状态的变更之后,将每一个节点的每一个二进制指示符都设为第二设置。例如,如图1B所示,一旦处理模块105标识对节点F的变更,处理模块105就立即开始信令该变更,如通过首先将节点图113中的每一个二进制指示符都变更为替换、后续表示。具体而言,图1B示出处理模块105向节点图113中的每一个节点传递信号185,以便将“+”设置变更为“-”。
此外,图2还示出该方法可以包括调用依赖关系链中的所有监听程序的动作230。动作230包括调用已经向已创建的多个节点注册的一个或多个监听程序,其中该一个或多个监听程序被同步以基于一个或多个源组件中的后续状态来执行。例如,既然每一个二进制指示符都已经变为减号,图1C示出系统100调用每一个组件的每一监听程序,并按照最初在依赖关系链中标识这些监听程序的次序(例如,从最接近源节点向上至最接近最终节点)来这样做。例如,图1C示出系统100首先调用监听程序D 145,然后调用监听程序E 155,以及监听程序B 125,等等。
除前面的内容之外,图3还示出根据本发明的用于只基于一组有保证的值来生成依赖关系链的附加或替换方法可以包括基于第一状态来创建节点图的动作300。动作300包括创建对应于包括依赖于一个或多个源组件的一个或多个依赖组件的多个组件的初始节点图,其中初始节点图中的每一个节点都被设为第一设置。例如,图1A示出处理模块105在标识处理请求180之后遍历组件110、120、130、140、150、160,以创建包括对应的节点110a、120a等的节点图113。在此情况下,处理模块105还将每一个节点中的二进制指示符(117a、127a等)设为初始状态(即,“+”),以指示节点图113基于源节点组件F 160的初始状态(165)。
图3还示出该方法可以包括在已经复制状态变更之后调用所有监听程序的动作310。动作310包括,在标识一个或多个源组件已经变为已更新的值之后,高速缓存已更新的值并启动向初始节点图注册的所有监听程序,以基于已更新的值来执行处理。例如,图1B和1C示出在接收到用于更新组件节点F的消息180之后,处理模块105以替换指定变更所有二进制指示符,如节点图113中的147b、157b、167b(即,变为“-”),并且还调用注册表170中的所有监听程序。
此外,图3还示出该方法可以包括丢弃节点图的动作320。动作320包括在所有已启动的监听程序都已经完成基于已更新的值的处理之后丢弃初始节点图。例如,在如图3所示的每一监听程序都已经访问了对节点图113可用的最新近的值之后,处理模块105丢弃节点图113。由于不同的二进制指示符147b、157b等中的每一个都只能变更一次,因此没有其他对不同的组件或节点的后续变更可由任一个其他被调用的监听程序复制和处理。由此,系统100丢弃依赖关系节点图113。
此外,图3还示出该方法可以包括基于已更新的状态来创建新节点图的动作330。动作330包括基于对一个或多个源组件的一个或多个后续变更来创建后续节点图。由此,例如,在组件A 110接收到新的处理请求时,处理模块105然后可以再次遍历涉及该特定处理请求的依赖关系链的集合,并标识涉及新节点图(未示出)的新的节点集合。如同节点图113,虽然基于对对应的源节点的更新近的变更,但该新节点图也将是存储器中数据结构。具体而言,节点图可以包括如图1A所示的相同表示,但是也可以包括不同的组件或节点,因为执行上下文可能不同,并可能具有不同的依赖关系。
可以理解,该新节点图和新依赖关系链的创建可按需不断刷新,重新创建并丢弃。在任一种情况下,本发明的各实现由此确保在特定节点图上下文中,源节点值变更在整个依赖关系链中只被以一致的方式处理一次。因此,本发明的各实现甚至在软件组件的非常复杂的依赖关系链中也可以确保值处理的高度准确性和一致性。
本发明的各实施例可以包括其中包含各种计算机硬件的特殊用途或通用计算机,如下面比较详细地讨论的。在本发明的范围内的各实施例还包括用于携带或在其上存储计算机可执行指令和/或数据结构的计算机可读介质。这样的计算机可读介质可以是可以被通用或专用计算机访问的任何可用的介质。
作为示例而非限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储器、磁盘存储器或其他磁存储设备,或可以用来携带或存储所需要的以计算机可执行指令或数据结构的形式存在的程序代码装置并可以被通用或专用计算机访问的任何其他介质。当通过网络或另一种通信连接(硬连线、无线,或硬连线或者无线的组合)向计算机传输或提供信息时,计算机正常地将连接认为是计算机可读介质。由此,任何这样的连接被适当地称为“计算机可读介质”。上面各项的组合也应该包括在计算机可读介质的范围内。
计算机可执行的指令包括,例如,使通用计算机、专用计算机,或特殊用途处理设备执行某一函数或一组函数的指令和数据。尽管已经用对结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的本主题不必受公开的这些具体特征或动作的限制。相反,上文所描述的具体特征和动作是作为实现权利要求的示例形式来公开的。
在不偏离本发明的精神和基本特征的情况下,本发明可以以其他特定形式来实现。所描述的实施例在各个方面都只作为说明性的,而不是限制性的。因此,本发明的范围由所附权利要求书而不是由前面的描述指出。在权利要求的等效内的含义和范围内的所有更改都将包括在它们的范围内。
Claims (19)
1.一种在计算机化环境中的信令系统(100)处的方法,所述信令系统包括通过依赖关系链将数据从一个组件中继到另一组件的多个组件(110、140、160),所述方法以避免竞争条件的方式处理所述依赖关系链中的一个或多个值的一致集合,所述方法包括以下动作:
创建(300)对应于多个组件(110、140、160)的多个节点(110a、140a、160a),所述多个组件包括在依赖关系链中排序的一个或多个源组件(160)以及一个或多个依赖组件(110,140);
对于每一个节点,将二进制指示符(167a、147a)设置(310)为指示一个或多个源组件包括初始状态的第一设置;
在标识对所述一个或多个源组件(160)中的后续状态的变更之后,将每一个节点的每一个二进制指示符(147b、167b)都设置(320)为第二设置;以及
按照所述依赖关系链次序调用(330)已经向已创建的多个节点注册的一个或多个监听程序(125、145、155),其中所述一个或多个监听程序被同步以基于所述一个或多个源组件中的后续状态来执行。
2.如权利要求1所述的方法,其特征在于,所述第二设置(147b、167b)只指示所述一个或多个源组件已经变更,且不直接指示所述一个或多个源组件已经变更到的值。
3.如权利要求1所述的方法,其特征在于,所述将每一个二进制指示符设置(310)为第二设置(147b、167b)的动作包括将信号(185)发送到所述依赖关系链中的每一个节点的动作,所述信号(185)包括变更所述二进制指示符状态的记法。
4.如权利要求3所述的方法,其特征在于,还包括以下动作:
在将所述依赖关系链中的一个节点中的对应的二进制指示符设置为所述第二设置(147b)之后,随后再次接收所述信号(185);以及
忽略随后接收到的信号,其中所述二进制指示符保持被设为所述第二设置(147b)。
5.如权利要求1所述的方法,其特征在于,还包括在创建所述依赖关系链中的多个节点(110a、140a、160a)时标识所述一个或多个监听程序(125、145、155)的动作。
6.如权利要求5所述的方法,其特征在于,还包括以下动作:
在监听程序注册表(170)中维护所标识的一个或多个监听程序(125、145、155),至少直到每一个二进制指示符都被变更为所述第二设置(147b、167b);
其中所述一个或多个监听程序只在每一个二进制指示符都被变更为所述第二设置之后才被调用。
7.如权利要求5所述的方法,其特征在于,还包括在监听程序注册表(170)中按照对应于所述依赖关系链中的组件(110、140、160)的排序的次序维护所述一个或多个监听程序(125、145、155)的动作。
8.如权利要求7所述的方法,其特征在于,所述调用已经向所述依赖关系链注册的一个或多个监听程序(125、145、155)的动作包括按照在所述监听程序注册表(170)中维护所述一个或多个监听程序的次序来调用所述一个或多个监听程序的动作。
9.如权利要求1所述的方法,其特征在于,还包括以下动作:
生成包括初始节点图(113)的存储器中数据结构,所述节点图表示所述依赖关系链中的所有已创建的节点(110a、140a、160a)和对应的依赖关系;以及
在标识对所述后续状态的变更之后,高速缓存所述一个或多个源组件(160)的已更新的值。
10.如权利要求9所述的方法,其特征在于,还包括以下动作:
生成包括所述节点图的新版本的新的存储器中数据结构;
在标识对所述一个或多个源组件(160)的新变更后,高速缓存所述一个或多个源组件的新的值。
11.如权利要求10所述的方法,其特征在于,还包括以下动作:
将所述一个或多个源组件(160)的高速缓存的已更新的值与包括所述节点图的存储器中数据结构相关联;以及
将所述一个或多个源组件的高速缓存的新的值与包括所述节点图的新版本的新存储器中数据结构相关联。
12.如权利要求9所述的方法,其特征在于,还包括以下动作:
标识对应于包括节点图的存储器中数据结构中的任一个的已调用的一个或多个监听程序全都已经完成处理;以及
丢弃包括所述初始节点图的存储器中数据结构。
13.一种在计算机化环境中的信令系统(100)处的方法,所述信令系统包括通过依赖关系链将数据从一个组件中继到另一组件的多个组件(110、140、160),所述方法只基于一组有保证的值来创建和更新表示所述依赖关系链的存储器中数据结构(113),所述方法包括以下动作:
创建(300)对应于多个组件(110、140、160)的初始节点图(113),所述多个组件包括在依赖关系链中排序的一个或多个源组件(160)以及一个或多个依赖组件(110、140),其中所述初始节点图中的每一个节点都被设为第一设置(147a、167a);
在标识所述一个或多个源组件(160)已经变更为已更新的值之后,高速缓存所述已更新的值并启动(310)向所述初始节点图注册的所有监听程序(125、145、155),以基于所述已更新的值来执行处理;
在所有已启动的监听程序都已经完成基于已更新的值的处理之后丢弃(320)所述初始节点图(113);
基于对所述一个或多个源组件(160)的一个或多个后续变更来创建(330)后续节点图;以及
将对应于所述多个组件的所有监听程序(125、145、155)按照所述组件在所述依赖关系链中的次序添加到监听程序注册表(170)的动作。
14.如权利要求13所述的方法,其特征在于,所述监听程序按照添加到所述监听程序注册表(170)的次序来启动(310)。
15.如权利要求13所述的方法,其特征在于,还包括将对应于所述一个或多个源组件(160)的一个或多个监听程序的新集合添加到监听程序注册表的动作,其中所述一个或多个监听程序的新集合对应于所述后续依赖关系节点图。
16.如权利要求13所述的方法,其特征在于,还包括在标识对应的一个或多个源组件(160)已经变更后将信号(185)发送到所述初始节点图(113)中的每一节点的动作,其中所述信号将每一个节点从所述第一设置(147a、167a)变更为第二设置(147b、167b)。
17.如权利要求13所述的方法,其特征在于,所述后续节点图中的每一个节点都被设为所述第一设置,所述方法还包括以下动作:
标识所述对应的一个或多个源组件已经再次变更为新的值;以及
之后将信号发送到所述后续节点图中的每一个节点,其中所述信号将每一个节点从所述第一设置变更为第二设置。
18.如权利要求17所述的方法,其特征在于,还包括以下动作:
缓存所述新的值;以及
将所述新的值与所述后续节点图相关联,其中随后在所述后续节点图上被调用的所有监听程序都基于所述新的值来执行处理。
19.一种在计算机化环境中的信令系统(100)中的方法,所述信令系统包括通过依赖关系链将数据从一个组件中继到另一组件的多个组件(110、140、160),所述方法包括:
创建(300)对应于多个组件(110、140、160)的多个节点(110a、140a、160a),所述多个组件包括在依赖关系链中排序的一个或多个源组件(160)以及一个或多个依赖组件(110,140);
对于每一个节点,将二进制指示符(167a、147a)设置(310)为指示一个或多个源组件包括初始状态的第一设置;
在标识对一个或多个源组件(160)中的后续状态的变更后,将每一个节点的每一个二进制指示符(147b、167b)都设置(320)为第二设置;以及
按照所述依赖关系链次序调用(330)已经向已创建的多个节点注册的一个或多个监听程序(125、145、155),其中所述一个或多个监听程序被同步以基于所述一个或多个源组件中的后续状态来执行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/037,004 US7860900B2 (en) | 2008-02-25 | 2008-02-25 | Consistently signaling state changes |
US12/037,004 | 2008-02-25 | ||
PCT/US2009/031890 WO2009108427A2 (en) | 2008-02-25 | 2009-01-23 | Consistently signaling state changes |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101952799A CN101952799A (zh) | 2011-01-19 |
CN101952799B true CN101952799B (zh) | 2013-06-26 |
Family
ID=40999338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009801066431A Active CN101952799B (zh) | 2008-02-25 | 2009-01-23 | 一致地信令状态变更 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7860900B2 (zh) |
EP (1) | EP2260378A4 (zh) |
JP (1) | JP5129351B2 (zh) |
CN (1) | CN101952799B (zh) |
WO (1) | WO2009108427A2 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8719841B2 (en) * | 2007-11-16 | 2014-05-06 | Microsoft Corporation | Dispatch mechanism for coordinating application and communication medium state |
US8505030B2 (en) * | 2007-11-16 | 2013-08-06 | Microsoft Corporation | Coordinating resources using a volatile network intermediary |
US9021503B2 (en) * | 2007-11-16 | 2015-04-28 | Microsoft Technology Licensing, Llc | Coordinating application state and communication medium state |
US7899798B2 (en) * | 2008-02-25 | 2011-03-01 | Microsoft Corporation | Observing and reporting changes in complex software dependencies |
US8301706B2 (en) | 2009-06-15 | 2012-10-30 | Microsoft Corporation | Routing of pooled messages via an intermediary |
US8549538B2 (en) * | 2010-03-18 | 2013-10-01 | Microsoft Corporation | Coordinating communication medium state for subtasks |
US8250234B2 (en) | 2010-04-26 | 2012-08-21 | Microsoft Corporation | Hierarchically disassembling messages |
CN101840230B (zh) * | 2010-06-04 | 2012-02-01 | 浙江中控技术股份有限公司 | 一种监控和管理数据的方法及系统 |
JP2012088815A (ja) * | 2010-10-15 | 2012-05-10 | Toshiba Corp | マイクロプロセッサ動作監視システム |
EP3633991A1 (en) | 2011-12-29 | 2020-04-08 | Swisscom AG | Method and system for optimized encoding |
GB2506596A (en) * | 2012-10-02 | 2014-04-09 | Ibm | Managing a set of software modules in a runtime environment |
US9880918B2 (en) * | 2014-06-16 | 2018-01-30 | Amazon Technologies, Inc. | Mobile and remote runtime integration |
US9940212B2 (en) * | 2016-06-09 | 2018-04-10 | Google Llc | Automatic qubit calibration |
CN110413632B (zh) * | 2018-04-26 | 2023-05-30 | 腾讯科技(深圳)有限公司 | 管理状态的方法、装置、计算机可读介质及电子设备 |
US20210042167A1 (en) * | 2019-08-07 | 2021-02-11 | Microsoft Technology Licensing, Llc | Dynamic Package Dependency(ies) |
CN111736836B (zh) * | 2020-07-22 | 2020-11-17 | 平安国际智慧城市科技股份有限公司 | 基于关系图的组件配置方法、装置及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1573692A (zh) * | 2003-06-20 | 2005-02-02 | 微软公司 | 基于依存关系的包部署 |
CN1617501A (zh) * | 2003-10-23 | 2005-05-18 | 微软公司 | 向应用程序通知状态变化的灵活体系结构 |
CN1682196A (zh) * | 2002-09-11 | 2005-10-12 | 国际商业器公司 | 分布式系统中的识别根原因和确定问题的方法和设备 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5317734A (en) * | 1989-08-29 | 1994-05-31 | North American Philips Corporation | Method of synchronizing parallel processors employing channels and compiling method minimizing cross-processor data dependencies |
FR2681451B1 (fr) * | 1991-09-13 | 1993-11-12 | Bull Sa | Procede de gestion d'objets structures. |
DE69528749T2 (de) * | 1995-02-17 | 2003-09-18 | Ibm | Objektorientierte Programmierschnittstelle zur Entwicklung und zur Ausführung einer Netzwerkverwaltungsapplikation auf einer Netzwerkkommunikationsinfrastruktur |
US5808625A (en) * | 1995-08-04 | 1998-09-15 | Silicon Graphics Incorporated | System and method for using dependency graphs for the control of a graphics creation process |
US6817019B1 (en) * | 1996-05-31 | 2004-11-09 | International Business Machines Corporation | Tracking and propagating updates to a message-driven system of interdependent components |
US6718550B1 (en) * | 1996-06-26 | 2004-04-06 | Sun Microsystems, Inc. | Method and apparatus for improving the performance of object invocation |
US6256712B1 (en) * | 1997-08-01 | 2001-07-03 | International Business Machines Corporation | Scaleable method for maintaining and making consistent updates to caches |
US6538651B1 (en) * | 1999-03-19 | 2003-03-25 | John Hayman | Parametric geometric element definition and generation system and method |
US20030014513A1 (en) * | 2000-12-27 | 2003-01-16 | Ruths Derek Augustus Samuel | System and method for collaborative data resource representation |
US7133874B2 (en) * | 2001-12-13 | 2006-11-07 | Microsoft Corporation | Prototyping model for components of a software program |
US20030140058A1 (en) * | 2002-01-18 | 2003-07-24 | Vitria Technology, Inc. | Method and apparatus for sharing information between applications using common objects |
CA2373211A1 (en) * | 2002-02-22 | 2003-08-22 | Catena Networks Canada Inc. | Fault notification filtering |
US20040024807A1 (en) * | 2002-07-31 | 2004-02-05 | Microsoft Corporation | Asynchronous updates of weakly consistent distributed state information |
US7711680B2 (en) * | 2003-03-24 | 2010-05-04 | Siebel Systems, Inc. | Common common object |
US7529823B2 (en) * | 2003-03-27 | 2009-05-05 | Microsoft Corporation | Notifications for shared resources |
US20040268302A1 (en) * | 2003-06-26 | 2004-12-30 | Microsoft Corporation | Framework for determining and exposing binary dependencies |
US7562346B2 (en) * | 2003-09-02 | 2009-07-14 | Microsoft Corporation | Software componentization for building a software product |
US7415706B1 (en) * | 2003-12-01 | 2008-08-19 | Cisco Technology, Inc. | Dynamic handling of multiple software component versions for device management |
US7568195B2 (en) * | 2003-12-16 | 2009-07-28 | Microsoft Corporation | Determining a maximal set of dependent software updates valid for installation |
US7660805B2 (en) * | 2003-12-23 | 2010-02-09 | Canon Kabushiki Kaisha | Method of generating data servers for heterogeneous data sources |
US20050203920A1 (en) * | 2004-03-10 | 2005-09-15 | Yu Deng | Metadata-related mappings in a system |
US20070156737A1 (en) * | 2005-12-15 | 2007-07-05 | First Data Corporation | Application integration systems and methods |
US7904892B2 (en) * | 2006-01-06 | 2011-03-08 | Northrop Grumman Corporation | Systems and methods for identifying and displaying dependencies |
-
2008
- 2008-02-25 US US12/037,004 patent/US7860900B2/en active Active
-
2009
- 2009-01-23 EP EP09715468A patent/EP2260378A4/en not_active Ceased
- 2009-01-23 JP JP2010548762A patent/JP5129351B2/ja active Active
- 2009-01-23 CN CN2009801066431A patent/CN101952799B/zh active Active
- 2009-01-23 WO PCT/US2009/031890 patent/WO2009108427A2/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1682196A (zh) * | 2002-09-11 | 2005-10-12 | 国际商业器公司 | 分布式系统中的识别根原因和确定问题的方法和设备 |
CN1573692A (zh) * | 2003-06-20 | 2005-02-02 | 微软公司 | 基于依存关系的包部署 |
CN1617501A (zh) * | 2003-10-23 | 2005-05-18 | 微软公司 | 向应用程序通知状态变化的灵活体系结构 |
Also Published As
Publication number | Publication date |
---|---|
EP2260378A2 (en) | 2010-12-15 |
JP5129351B2 (ja) | 2013-01-30 |
EP2260378A4 (en) | 2012-10-31 |
WO2009108427A2 (en) | 2009-09-03 |
CN101952799A (zh) | 2011-01-19 |
WO2009108427A3 (en) | 2009-11-05 |
JP2011513835A (ja) | 2011-04-28 |
US20090216793A1 (en) | 2009-08-27 |
US7860900B2 (en) | 2010-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101952799B (zh) | 一致地信令状态变更 | |
CN107181637B (zh) | 一种心跳信息发送方法、装置及心跳发送节点 | |
CN112905339B (zh) | 任务调度执行方法、装置及系统 | |
CN112131013A (zh) | 分布式系统中调用链的监控方法、装置、设备及存储介质 | |
CN111414189A (zh) | 一种确定版本兼容性的方法及装置 | |
CN112817883A (zh) | 接口平台的适配方法、设备、系统及计算机可读存储介质 | |
CN101930365A (zh) | 一种基于元数据和反射机制的aop应用程序中结构冲突的处理方法 | |
CN109684611B (zh) | 一种字典转码方法、装置、存储介质及终端 | |
CN112416980B (zh) | 数据业务处理方法、装置及设备 | |
CN115687384A (zh) | Uuid标识生成方法、装置、设备及存储介质 | |
CN112950349B (zh) | 一种基分布式系统冲正交易时序异常处理方法及系统 | |
CN115964436A (zh) | 一种数据库集群管理的方法和装置 | |
CN114546926B (zh) | 核心簇同步、控制方法、数据处理方法、核心、设备、介质 | |
CN109829016B (zh) | 一种数据同步方法及装置 | |
CN112540839B (zh) | 信息变更方法、装置、电子设备及存储介质 | |
CN114124275A (zh) | 一种时间同步方法、装置、设备及存储介质 | |
CN114416643A (zh) | 一种数据交互处理方法及装置 | |
CN113900741B (zh) | 基于插件的业务处理方法、装置、计算机设备以及介质 | |
CN114546928B (zh) | 核心簇同步的方法、控制方法及设备、核心、介质 | |
CN115455109A (zh) | 消息处理方法和装置 | |
CN110837536B (zh) | 一种信息处理方法、装置和存储介质 | |
CN109726184B (zh) | 一种文件同步方法、装置、网络节点及存储介质 | |
CN115220785A (zh) | 基于区块链的接口文档处理方法及装置 | |
CN106712924B (zh) | 一种实现通用有时序通讯的方法及装置 | |
CN115016999A (zh) | 微内核操作系统的调试信息的输出方法、装置及存储介质 |
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: 20150508 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150508 Address after: Washington State Patentee after: Micro soft technique license Co., Ltd Address before: Washington State Patentee before: Microsoft Corp. |