用于防止死锁状态的数据处理方法及系统的制作方法

文档序号:6350991阅读:130来源:国知局
专利名称:用于防止死锁状态的数据处理方法及系统的制作方法
技术领域
本发明涉及一种用于防止死锁状态的数据处理方法及系统,尤其涉及这样ー种用于防止死锁状态的数据处理方法及系统,其中,角色(actor)系统对响应等待状态中接收到的消息进行处理,从而防止死锁状态。
背景技术
随着多核中央处理器(CPU)技术的发展,对ー个芯片中设置多个中央处理器(CPU)内核的处理器的使用増加。作为维持多个CPU所处理数据一致性的方案,在操作系统(OS, operating system)层面提供利用多线程、锁定(Lock)和类似方式实现临界区域的保护功能。但是,只根据此方法来开发和维护庞大的系统就会产生许多困难和费用。此外,还有如下方法其中,为了并行执行,分布式系统只使用消息在对象之间执 行交互。但是,此方法因传达消息的负担(overhead)而降低性能,并可能在等待传输消息响应期间产生死锁状态。在现有技术中,在分布式系统或者多线程系统中用于并行计算的方法包括角色(actor)系统。角色系统被视为并行计算的基本元素。角色能够接收并处理消息,自行计算并做出决定,创建其他的角色,或者向其他角色发送消息。在角色系统中,每个角色都具有其状态,即数据,还具有其自己的处理单元,用于处理数据,例如线程。每个角色在与其它角色异步交換消息时与其它角色发生交互。角色可以对接收到的消息执行如下操作,包括1)变更自己的状态(数据);2)向其他角色发送消息;3)创建新的角色;4)向其他主机移转。角色系统可以使用同步消息。同步消息是ー种消息方案,其中,在接收到对于已经发送消息的响应之后,基于该响应处理后续的操作。同步消息广泛地使用在服务器/客户端系统中,包括分布式系统中。一般应用系统中所有的直接呼叫都可视为同步消息。如果这些同步消息都能够被无限制地允许,则可能会产生死锁状态,其中,两个角色在相互请求对于他们自己的读消息的响应时等待较长时间,从而不能执行其他处理。在这种死锁状态下,可能会导致整体系统停止的严重问题。图I为根据现有技术的角色系统中通过同步消息的收发进行数据处理的方法的信号流程图。在步骤SlO中,第一角色10计算出用于处理数据的元素al,并请求用于处理消息的另ー个元素bl。在步骤S15中,第一角色10检索第二角色20并生成第一读消息,第一角色10将利用第一读消息从第二角色20请求元素bl。由第一角色10生成的第一读消息是同步消息,在接收到针对所发送消息的响应之后,基于所述响应处理后续步骤。在步骤S20中,第一角色10将第一读消息发送给第二角色20。在步骤S25中,第一角色10设定对应于将第一读消息发送给第二角色20的响应等待状态(response standby state)。由于第一读消息是同步消息,所以第一角色10可以在从第二角色20接收到第一读消息的响应之后执行后续步骤。由此,第一角色10在接收到向第二角色20发送的第一读消息的响应之前,将第一角色10的状态设定为响应等待状态。在步骤S30中,第二角色20将从第一角色10接收到的第一读消息储存在消息队列中。在步骤S35中,第二角色20为了获取第一角色10的状态信息而向第一角色10发
送第二读消息。在此,第二读消息与第一读消息没有关联。在步骤S40中,第二角色20设定对应于将第二读消息发送给第一角色10的响应等待状态。第二角色20在从第一角色10接收到第二读消息的响应后可执行随后步骤。由此,直到从对方接收到各自的响应为止,第一角色10及第ニ角色20均设定为等待状态,从而不能处理其他消息。因此,第一角色10不能将第二读消息的响应发送给第二角色20,并且第二角色20也不能将第一读消息的响应发送给第一角色10。最終,第一角色10及第ニ角色20为无限等待状态,因此在第一角色10和第二角色20之间产生死锁状态。如上所述,在根据现有技术的角色系统中具有如下问题由于同步读消息发送之后出现的响应等待状态而产生死锁状态。

发明内容
在本发明的一个实施例中,当角色之间收发同步消息时,可以对预定的消息进行处理,直至接收到读消息的响应,从而防止死锁状态,否则会由于角色长时间等待同步消息的响应而产生死锁状态。并且,在本发明的另ー个实施例,当角色存在于相同的存储空间中时,角色可以通过直接呼叫方式读取目标角色的状态信息,从而提高数据处理速度及性能。作为实现上述目标的技术方案,根据在本发明的第一方面,提供一种用于防止死锁状态的数据处理方法,其包括以下步骤(a)发送读消息,所述读消息用于请求处理数据所需的目标角色的状态信息;(b)到接收到上述读消息的响应为止,只接收和处理读取角色状态信息的读消息;以及(C)当接收到上述读消息的响应时,利用上述状态信息而处理相关数据。根据本发明的第一方面,所述方法还包括以下步骤(d)判断是否需要状态信息的目标角色存在于相同的存储空间中;(e)当上述目标角色存在于相同的存储空间中吋,从上述目标角色直接读取上述状态信息;以及(f)利用上述直接读取的状态信息处理相关数据。并且,根据本发明的第一方面,可以从消息队列中接收上述(b)步骤中处理的读消息,消息队列可以储存用于变更角色状态的事件消息,或者读消息。 根据本发明的第二方面,可提供一种用于防止死锁状态的数据处理系统,其包括数据处理器,其利用目标角色的状态信息来处理数据;读消息生成器,其生成用于从所述目标角色请求目标角色状态信息的读消息;以及接收消息处理器,在接收到被发送至目标角色的读消息的响应为止而接收到的消息中,其只处理读取角色状态信息的读信息。根据实现上述发明目的的技术方案,可以发送作为同步消息的读消息,并在接收到同步读消息的响应之前,可处理从其他角色接收到的读消息,因此,当正在等待同步读消息的响应时,可以分发和处理从消息队列或类似队列接收到的读消息,而不用将接收到的读消息设定为等待状态,从而防止了死锁状态。
并且,根据用于实现发明目的所述本发明的技术方案,能够判断需要其状态信息的目标角色是否位于相同的存储空间中,如果该目标角色位于相同的存储空间中,则经由直接呼叫方案获取该目标角色的状态信息,其中,所述状态信息直接从目标角色获得,而不是使用消息获得状态信息,从而提高了数据处理速度和性能。


图I为根据现有技术的角色系统中通过同步消息的收发进行数据处理的方法的信号流程图。图2为根据本发明的一个实施例的数据处理方法的信号流程图。图3为根据本发明的一个实施例的数据处理方法的另ー个信号流程图。图4为根据本发明的一个实施例的数据处理方法中角色的消息处理的流程图。图5为根据本发明的一个实施例的数据处理系统的结构示意图。图6为根据本发明的一个实施例的数据处理系统的角色的结构示意图。
具体实施例方式以下參照附图对本发明的实施例进行详细地说明,使得本发明所属的技术领域中具有普遍知识的技术人员易于实施。但是,本发明能够体现为各种不同的形态,并不限于在此说明的实施例。并且,为了在图中明确地说明本发明,省略了与说明无关的部分,并在整个说明书中,对相同的部件使用相同的附图标号。在整个说明书中,当某部分被描述为“连接到”其他部件吋,它不仅可以“直接连接至IJ”其它部件,而且也可以经过中间部件“电气连接到”其它部件。并且,除非明确地另有说明,否则当某部件被描述为“包括” 一些元件吋,它可以暗指包括任何其它元件而不是排除了其它元件。图2及图3为根据本发明的一个实施例的数据处理方法的信号流程图。在步骤SlOO中,第一角色100计算出用于处理数据的元素al,并请求用于处理数据的另ー个元素bl。在此,bl是必须从除第一角色100之外的角色接收的元素,其中还包括角色的状态信息。在步骤S105中,第一角色100生成第一读消息,其用于向第二角色200请求bl。由第一角色100生成的第一读消息是同步消息,利用该同步消息,在接收到被发送消息的响应之后,基于该响应的后续步骤能够得以处理。同步消息方式是在包括分布式系统的服务器/客户端系统中广泛使用的方式,一般应用系统中的所有直接呼叫均可视为同步消息。在步骤SllO中,第一角色100将第一读消息发送给第二角色200。第一读消息可以被消息处理器从第一角色100发送到第二角色200。
消息处理器从消息队列中获取消息,将消息发送给相应的角色,并执行消息的内容。通常,消息处理器可以是操作系统(OS)提供的线程,并且存在于各个角色中。线程可以由一个主机内不同中央处理单元(CPU)的每个内核进行处理,并分布到不同的主机。在根据本发明的一个实施例的说明中,为了方便理解,假设各个角色包括一个独立的消息处理器。在步骤SI 15中,第二角色200将从第一角色100接收到的第一读消息储存在消息队列中。消息队列是等待执行的消息的队列。一台主机可以有单个消息队列,或者各个角色也可以具有消息队列。根据本发明的一个实施例的说明中,为了方便理解,假设各个角色包括有消息队列。在步骤S120中,第二角色200向第一角色100发送第二读消息。 在步骤S125中,第一角色100处理从第二角色200接收到的第二读消息。在本发明的一个实施例中,第一角色100与现有技术不同,即使向第二角色200发送读消息,也不会设定为响应等待状态。由此,即使第一角色100不从第二角色200中接收第I读消息的响应,也能够处理第2读(read)消息。在步骤S130中,第一角色100将第二读消息的响应发送给第二角色200,上述第二读消息的响应包括步骤S125中的处理结果。在步骤S135中,第二角色200或者第三角色200向第一角色100发送第3读消息。在步骤S140中,第一角色100处理从第二角色200或者第三角色200接收到的第二读消息。在步骤S145中,第一角色100将第三读消息的响应发送给第二角色200或者第三角色200,上述第三读消息的响应包括步骤S140中的处理结果。如此,在本发明的一个实施例中,即使第一角色100将第一读消息发送给第二角色200之后,也不会被设定为响应等待状态,因此能够处理从一个以上的其他角色中接收到的读消息并发送响应。在步骤S150中,第二角色200分析第一读消息,从而计算出从第一角色100请求的第二角色200的状态信息的元素bl。在步骤S155中,第二角色200将第一读消息的响应发送给第一角色100。第二角色200发送的第一读消息的响应包括有在步骤S150中计算出的第二角色200的状态信息bl。在步骤S160中,第一角色100利用元素al及元素bl从而处理数据,上述元素al是在步骤SlOO中计算出的,上述元素bl包括在从第二角色200中接收到的第一读消息的响应中。图4为根据本发明的一个实施例的数据处理方法中角色的消息处理队列的流程图。在步骤S200中,其他角色能够感知对目标角色的状态信息进行请求的状况的产生。即,在执行处理数据的过程中,为了处理数据,角色能够感知对其他角色的状态信息所进行的请求。在步骤S210中,判断作为被请求状态信息的目标的目标角色是否存在于相同的存储空间中。在步骤S220中,当在步骤S210中确定目标角色不存在于相同的存储空间中时,生成读消息,利用该读消息能够读取目标角色的状态信息以便进行数据处理,并且将生成的读消息发送给目标角色。 由角色生成并收发的消息包括事件消息或者读消息。事件消息是能够对接收的角色状态进行变更的异步消息,而读消息是只对接收的角色状态进行读取的同步消息。由此,为了读取目标角色的状态信息,生成读消息并将其发送给目标角色。
读消息可以由消息处理器来发送。操作系统(OS)提供的线程可以用作消息处理器。在步骤S230中,判断是否已经接收到在步骤S220中发送的读消息的响应。读消息是确认响应后执行随后步骤的同步消息。由此,通过判断是否已经接收到被发送读消息的响应,可以判断在接收到该响应之后是否执行随后步骤。在步骤S240中,当在步骤S230中确定未接收到响应时,从消息队列中分发储存在消息队列中的读消息。当由角色接收到的消息不能立即由角色处理时,消息队列储存接收到的消息,并且将接收到的消息设定为等待状态,直至接收到的消息被角色处理。而且角色能够立即处理接收到的消息时,角色必须将接收到的消息设定为等待状态,从而根据情况执行不同的处理。在这种情况下,通过将接收到的消息储存在消息队列中,角色可以将接收到的消息设定为等待状态,然后,通过在能够处理消息的时间点上将其从消息队列分发,对消息进行处理。在步骤S250中,分析并处理在步骤S240中进行分发的读消息。即,分析读消息,并基于分析后的读消息执行处理,从而将响应发送给相应的角色。如此,与现有技术不同,在根据本发明的一个实施例中,在发送读消息到接收到响应的响应等待时间,角色能够处理从其它角色接收到的读消息。在这种情况下,如果在基于对所发送读消息的响应而执行数据处理之前由于另一个消息的处理而改变了角色的状态,则发送读消息时的角色状态和接收响应时角色的状态可能是不同的。因此,当基于所发送的读消息进行数据处理时,可能会产生问题。如上所述,虽然消息队列中不仅可以包括作为同步消息的读消息,而且也包括作为异步消息的事件消息,但是在等待被发送读消息的响应的期间,可处理的消息仅限于不对角色的状态进行变更的同步的读消息。在步骤260中,判断是否已经接收到步骤S220中发送的读消息的响应。在步骤S270中,当已经接收到从步骤S220中发送的读消息的响应时,使用包括在接收到的响应中的目标角色的状态信息,进行处理数据。在阶段S280中,当在步骤S210中确定目标角色存在于相同的存储空间中时,通过直接呼叫方式读取目标角色的状态信息。在步骤S290中,使用在步骤S280中读取的状态信息,处理相关数据。这种通过直接呼叫方式读取目标角色状态信息的方法与使用在发送消息后必须等待响应的同步消息的方法相比,能够提高数据处理速度并改善系统的性能。
图5为根据本发明的一个实施例的数据处理系统的结构示意图。如上所述,在本发明的一个实施例中,角色100及200分别包括消息处理器101、201以及消息列队102、202。如果第一角色100为了处理数据而确定需要第二角色200的状态信息,则生成用于读取第二角色200状态信息的第一读消息,并将生成的第一读消息发送给第二角色200。第一角色100从第二角色200或者除此之外的其他角色中接收读消息及事件消息,并且,当不能及时处理接收到的消息时,通过消息处理器101在消息队列102中储存接收到的消息。
第一角色100使用消息处理器101对储存在消息列102中的消息进行分发,并根据消息的种类及内容执行步骤。例如,当对读消息进行分发时,第一角色100生成包括有读消息请求的第一角色的状态信息的响应,并向发送读消息的角色发送所生成的响应。当对事件消息进行分发时,第一角色100基于包括在事件消息中的消息来改变第一角色100的状态。通过从第二角色200接收第一读消息的响应,第一角色100获取第二角色200的状态信息,并利用接收到的状态信息对数据进行处理。在根据前面所述本发明实施例的数据处理系统中,即使在未接收到发送至目标角色的读消息的响应时,也能够处理接收到的读消息,因此能够防止因延迟了对读消息的处理而产生的死锁状态。图6为根据本发明的一个实施例的数据处理系统的角色的结构示意图。根据本发明的一个实施例的角色100包括信号收发器110、数据处理器120、读消息生成器130以及接收消息处理器140。信号收发器110向其他角色发送消息等信号,并接收信号。也就是说,信号收发器110接收例如读消息或事件消息的消息,并向相应的角色发送信号,所述信号包括所接收到的读消息的响应。另外,信号收发器110将读消息发送至目标角色,并且接收该读消息的响应。当需要目标角色的状态信息以便进行数据处理时,数据处理器120判断相应的角色是否存在于与角色100相同的存储空间中。当相应的角色不存在于相同的存储空间中时,数据处理器120请求读消息生成器130生成读消息,所述读消息将被发送给相应的角色。如果从读消息生成器130接收到已将读消息发送给相应角色的发送情况,则数据处理器120请求接收消息处理器140仅读取消息而停止处理事件消息,直至从相应的角色接收到响应。如上所述,如果在接收到所发送的读消息的响应并且基于该响应执行数据处理之前通过处理另一个消息而改变了角色的状态,则在基于对所发送读消息的响应而进行的数据处理中可能会出现问题。由此,数据处理器120请求接收消息处理器140只处理不对角色状态进行变更的读消息。当确定相应的角色存在于与角色100相同的存储空间中时,数据处理器120通过直接呼叫方式(direct-calls cheme)执行对相应的角色的状态信息的读取。数据处理器120从相应的角色接收所发送的读消息的响应,并利用包括在接收到的响应中的状态信息来执行对数据的处理。读消息生成器130响应于数据处理器120的请求,生成将被发送的读消息。当利用将要接收上述读消息的角色的信息生成读消息时,所述信息即包括在来自数据处理器120的请求中的角色信息,读消息生成器130通过信号收发器110发送读消息,并将发送情况通报给数据处理器120。接收消息处理器140通过分发消息对储存在消息队列102中的消息进行处理。当数据处理器120的请求存在时,接收消息处理器140停止对事件消息的处理,而通过分发消息仅对读消息进行处理。也就是说,直到接收到角色100发送给目标角色的读消息的响应为止,接收消息处理器140仅处理读消息。
如此,在接收到发送给目标角色的读消息的响应之前,接收消息处理器140可以处理接收到的读消息,从而能够防止在消息队列102中消息过度等待的情况。以上所述的本发明的一个实施例,不仅适用于由多个主机(host)分布设置的环境,而且还适用于一个主机,特别是一个主机内提供一个以上中央处理器(CPU)内核,即所谓的多核环境。也就是说,本发明不仅适用于角色存在于各个独立主机内的情况,而且还适用于角色存在于相同的主机内的情况。本发明的一个实施例可以体现为记录媒介的形式,其中记录有计算机可执行指令,例如由计算机执行的程序模块。计算机可执行记录媒介可以是任何能够由计算机存取的介质,包括易失性及非易失性媒介、分离型及非分离型媒介。并且,计算机可读媒介可包括所有的计算机存储媒介及通信媒介。计算机存储媒介包括所有的易失性及非易失性媒介、分离型及非分离型媒介,上述易失性及非易失性媒介、分离型及非分离型媒介体现为用于存储诸如计算机可读指令、数据结构、程序模块或者其他数据的消息的任意的方法或者技术。典型地,通信媒介包括计算机可读指令、数据结构、程序模块、或者诸如载波的已调制的数据信号的其他数据、或者其他发送机制,并包括任意的消息传达媒介。本发明的方法及系统关于特定实施例进行说明,但是其构成元素或者操作的一部分或者全部能够体现为使用具有普遍利用的硬件总体结构的计算机系统。以上所述的本发明的说明是用于举例,本发明所属的技术领域的具有普遍知识的技术人员应该理解成,即使不对本发明的技术性思想或者必要性特征进行变更,也可容易变形为其他具体的形态。因此,在以上所述的实施例在所有方面都是举例的并不限于此。例如,说明成单一型的各构成元素可分开地实施,相同地,说明成分散式的构成元素可实施为结合的形态。本发明的范围不是根据上述说明而是根据权利要求书来限定,并且从权利要求的意义及范围及其等同概念提出的所有变更或者变形的形态应包括在本发明的范围内。
权利要求
1.一种用于防止死锁状态的数据处理方法,包括以下步骤 (a)发送读消息,所述读消息用于请求所述数据处理所需的目标角色的状态信息; (b)直到接收到所述读消息的响应为止,只接收和处理被读取角色状态信息的读消息;以及 (c)当接收到所述读消息的响应时,利用所述目标角色的状态信息对相关数据进行处理。
2.根据权利要求I所述的数据处理方法,还包括以下步骤 (d)判断所述目标角色是否位于相同的存储空间中; (e)如果所述目标角色存在于相同的存储空间中,则直接从所述目标角色读取状态信息;以及 (f)利用所述直接读取的状态信息来处理相关数据。
3.根据权利要求I所述的数据处理方法,其特征在于,从信息队列中接收步骤(b)中处理的读消息,所述信息队列存储事件消息或读消息,所述事件消息能够用于改变角色状态。
4.根据权利要求I所述的数据处理方法,其特征在于,步骤(b)中处理的所述读消息直接从所述角色接收。
5.根据权利要求I所述的数据处理方法,其特征在于,通过操作系统的线程来执行对所述读消息的发送及接收。
6.根据权利要求I所述的数据处理方法,其特征在于,所述目标角色存在于单独的主机中。
7.根据权利要求I所述的数据处理方法,其特征在于,所述目标角色存在于相同的主机中。
8.一种用于防止死锁状态的数据处理系统,其包括 数据处理器,其利用目标角色的状态信息进行数据处理; 读消息生成器,其生成向所述目标角色请求状态信息的读消息;以及接收信息处理器,直至接收到发送给所述目标角色的读消息的响应为止,所述接收信息处理器在接收到的消息中仅对用于读取角色状态信息的读消息进行处理。
9.根据权利要求8所述的数据处理系统,其特征在于,所述数据处理器通过直接呼叫方式对存在于相同存储空间中的目标角色的状态信息进行读取,从而进行数据处理。
10.根据权利要求8所述的数据处理系统,其特征在于,从角色直接接收由所述接收消息处理器接收到的读消息。
11.根据权利要求8所述的数据处理系统,其特征在于,从信息队列接收由所述接收信息处理器接收到的读消息,所述信息队列存储有事件消息和读消息,所述事件消息用于改变角色状态。
全文摘要
本发明提供一种用于防止死锁状态的数据处理方法及系统,尤其提供如下数据处理方法及系统在角色系统中处理从消息响应等待状态中接收到的信息,从而防止死锁状态。一种用于防止死锁状态的数据处理方法,其包括(a)发送读消息,所述读消息用于请求所述数据处理所需的目标角色的状态信息;(b)直到接收到所述读消息的响应为止,只接收和处理被读取角色状态信息的读消息;以及(c)当接收到所述读消息的响应时,利用所述目标角色的状态信息对相关数据进行处理。
文档编号G06F9/38GK102630315SQ201080049494
公开日2012年8月8日 申请日期2010年10月29日 优先权日2009年10月30日
发明者金尚均, 金昌汉 申请人:(株)吉诺
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1