线程到线程通信的制作方法

文档序号:6626109阅读:110来源:国知局
专利名称:线程到线程通信的制作方法
技术领域
本发明的实施方案总地涉及并行处理,更具体地,涉及用于线程到线程通信的技术。
背景技术
线程是一个独立的可执行指令块,它能够被复制地、并行地处理。软件可被开发为线程化的,意味着它可以被复制地、并行地处理。当在线程化应用内发生了大量相互独立的处理时,或者当线程化应用要处理大量数据时,并行处理特别有用。并行处理技术允许更有效率地使用处理器和存储器,并且在多处理器体系结构中提供了更高的处理吞吐率。
在一些领域中并行处理已显得特别有益并被部署在产业之中,这些示例性的领域包括图形和多媒体处理。这些领域通常耗用大量的数据,并且这些数据中的很多可以相互独立地处理,或者相互独立地致使生成期望的输出。
典型地,线程化应用使用以下模块,该模块控制多个可被同时处理的线程化应用的处理流。即,一个模块判断一些线程已何时结束了它们的处理,以及某些其他线程何时应开始进行处理。该模块紧紧耦合到它所管理的线程化应用。这意味着该模块保留有处理逻辑,以便识别它正在管理的线程并与之通信。因此,如果多处理器环境中的其他情况更改了某一具体线程的处理位置,则所述模块将这一改变后的位置通知给处理逻辑。结果,所述模块可能变得难以控制,并且可能需要定期的调整和维护,以便有效地管理它在多处理器环境中的线程化应用。
另外,在很多应用(例如图形、多媒体、数据信号处理、数值计算、物理建模、人工智能等)中,都可能存在固有的数据依存性,这种依存性可能会限制可实现的线程并行度。对于一些多媒体应用来说这格外成问题,在多媒体应用中,数据单元可能很大,并且可能因为识别出的数据依存性的量而只能找到有限的少数独立线程。这些数据依存性也可能是多维并且复杂的,导致因为只有少数独立线程是可以识别的并被并行处理,所以即便在使用并行处理时,传统的并行处理技术也几乎没有使处理吞吐率提高。事实上,与线程通信相关联的开销和成本高是现有并行体系结构和方法中普遍存在的问题。
因此,需要改进的用于并行处理技术的线程到线程通信。

发明内容
为解决以上问题,本发明提供了线程到线程通信。第一线程向信关(gateway)注册用以接收通信。注册过程包括标识用于接收消息的位置。信关将从第二线程接收到的消息有效载荷映射到所述第一线程的位置。第一线程检测所述位置中的有效载荷,并且在用于处理时使用它。
根据本发明的一个方面,提供了一种方法,包括注册第一和第二线程中的至少一个线程用以通信;如果第一线程被注册,则标识供第一线程从第二线程接收通信的第一位置;如果第二线程被注册,则标识供第二线程从第一线程接收通信的第二位置;从所述线程中的一个线程接收消息;并且响应于包括在所述消息中的目的地标识符,将所述消息转发到所述位置之一。
根据本发明的另一个方面,提供了一种方法,包括向信关发送打开信关请求,其中所述请求包括对用于接收消息的位置的引用;用线程标识符构造(configuring)子线程;以及发起所述子线程。
根据本发明的又一个方面,提供了一种系统,包括第一线程;第二线程;和信关,其中所述信关通过判定与所述第一和第二线程相关联的位置,建立并管理所述第一和第二线程之间的通信,其中所述那些位置收容在所述第一和第二线程之间发生的消息。
根据本发明的再一个方面,提供了一种具有关联指令的机器可访问介质,所述指令在被访问时导致所述机器执行保持在第一线程标识符和第一位置引用之间的第一映射以及在第二线程标识符和第二位置引用之间的第二映射当中的至少一个映射;并且,有一些消息从所述第一和第二线程中的至少一个线程被发送到所述第一和第二位置引用中的至少一个位置引用,响应于包括在这些消息中的目的地标识符,并且响应于所述第一和第二映射中的至少一个映射,转发所述消息,其中用于某一具体消息的具体目的地标识符是所述第一线程标识符或所述第二线程标识符。
根据本发明的再又一个方面,提供了一种装置,存在于计算机可访问介质中,包括映射库;目的地寄存器;和路由器,其中所述目的地寄存器从发起线程接收目标线程标识符,所述目标线程标识符位于所述映射库中,用以标识用于目标线程的处理位置,并且其中路由器响应于所述处理位置,将从所述发起线程接收到的消息的有效载荷传递通过,到达所述目标线程。


图1是根据本发明一个示例性实施方案的、用于线程到线程通信的一种方法的流程图。
图2是根据本发明一个示例性实施方案的、用于线程到线程通信的另一种方法的流程图。
图3是根据本发明一个示例性实施方案的、用于线程到线程通信的又一种方法的流程图。
图4是根据本发明一个示例性实施方案的、线程到线程通信系统的图。
图5是根据本发明一个示例性实施方案的、协助实现线程到线程通信的示例性信关体系结构的图。
具体实施例方式
图1图示了用于线程到线程通信的一种方法100的流程图。方法100被实现在机器可访问介质中。然而,可以用多种方式实现方法100,仅以示例的方式来说,方法100可被实现为一系列信号,作为硬件实现的一部分,等等。在一个实施方案中,方法100是在相互通信的线程之间起到中介或管道作用的信关服务。信关服务的处理可被实现为软件、固件、硬件或者它们的各种组合。通过集成在多处理器机器体系结构内的任何网络,可以访问所述方法。
一开始,获得或开发出管理线程化应用的驱动器应用。该驱动器应用可被视为一个父线程(parent thread),它管理着它产生的子线程(children thread)。该驱动器应用在多处理器体系结构中被启动用于处理,并被设计为以下列方式与方法100的处理(此后称为“信关”)进行通信。
在一个实施方案中,父线程被视为第一线程。然而,父线程的指定是相对的,因为初始父线程(例如驱动器应用)的初始子线程自身相对于该初始子线程产生的任何下属子线程而言可以是一个父线程。此外,这里使用的术语“第一和第二线程”可以指寻根到一个初始父线程的任意两个线程。另外,初始父线程可被视为第一或第二线程。父线程、子线程、第一和第二线程等术语的指定是基于具体处理状态和线程之间的交互而作出的。
在110A,第一线程被注册到用于从其他线程接收消息或通信的信关。与110A同时,在110A之前或者之后,第二线程110B被注册到用于从其他线程接收消息或通信的信关。在一个实施方案中,当线程向信关发出打开信关请求时,实现向信关的注册。打开信关请求标识出请求线程、操作(例如打开信关请求)、可选的密钥信息、以及位置引用,所述位置是请求线程在通信期间希望从其他线程接收消息的位置。
信关经由在注册期间所提供的请求线程的标识符,获取用于请求线程的特定位置标识符。在注册期间提供的操作字段通知信关所述请求线程正在请求什么动作(例如打开信关、注册、转发消息、关闭信关等)。在注册期间提供的可选密钥信息通过指示信关检查前往请求线程的任何消息以获得密钥信息,允许信关代表请求线程实现安全性。在另一个实施方案中,可选密钥信息是由信关产生的,并在注册期间被发送给请求线程。信关可以使用随机数发生器(RNG)、伪随机数发生器(PRNG)、安全密钥交换协议例如公钥密码算法(例如使用由Rivest、Shamir和Adleman开发的RSA算法的因特网加密和认证)、或者安全性领域中的普通技术人员所公知的任何其他技术来生成密钥。在注册期间提供的位置引用向信关指示一个请求线程期望接收消息的寄存器或存储器位置。
在111A和111B,在注册期间接收的、分别用于第一和第二线程的第一和第二位置引用从初始注册过程中被识别出来,并由信关保留用于将来与第一和第二线程的通信。在一个实施方案中,所述引用标识出第一和第二线程预期看见(see)消息的寄存器或寄存器内的偏移。在一些实施方案中,信关保持在第一和第二线程的身份和它们各自的位置引用之间的第一和第二映射。只要线程正在允许通信,信关就保持所述映射。换言之,信关一直保持所述映射,直到请求线程关闭了和信关之间的通信(例如关闭信关操作)。信关也可以具备自动关门能力。信关可以在线程终止时,自动地关闭用于该线程的通信。这可以通过硬件、软件或软硬件的组合来实现。例如,信关可以监控活动线程的状态,或者操作系统可以通知信关线程何时终止。
一旦向信关注册了第一和第二线程,这两个线程之间的通信就以下列方式进行。在注册后的某一时刻,在120处,从线程之一向信关发送消息。在进行双向通信的情况下,发送线程可以是第一和第二线程。在其他情况下,当只进行单向通信时,发送线程可以是除第一和第二线程之外的不同线程。信关检查所述消息的操作字段,以确定所述信关正被请求何种类型的操作。操作类型可以包括打开信关请求(例如注册请求)、转发消息请求、或者关闭信关请求。如果在120处,与所述消息相关联的操作是先前已提交了打开信关请求的线程的打开信关请求,则该操作被忽略,或者可选地,这一事件可以触发一个错误信号。如果所述操作是关闭信关请求,则在121处,信关删除它所保持的对请求线程用于接收消息的位置的引用以及正由该信关保持的相应映射。这意味着请求线程不能经由信关接收到消息,直到再次发出后续的打开信关请求或注册请求。
如果(在120处)与所述消息相关联的操作是转发消息请求,则在122处,信关从接收到的消息中提取目的地标识符。目的地标识符是由请求线程提供的标识符,它标识出将要接收所述消息的具体目的地线程。发送由信关在120处接收的消息的请求线程可以用各种方式获得所述目的地标识符。例如,第一和第二线程的公共父线程可以在发起第一和第二线程进行处理之前,构造并提供第一和第二线程内的线程标识符。在可替换的实施方案中,信关可以指派通用标识符,所述通用标识符在注册(例如,打开信关操作)期间映射到特定的线程标识符。这些通用标识符可以由各线程经由它们标识出的用于接收消息的位置,从信关处获取。
作为一个实施例,考虑向信关注册以和其他线程通信的初始父线程。信关可以经由初始父线程通过注册向信关提供的位置,返回用于初始父线程的通用标识符。可替换地,初始父线程假定注册是成功的,并且它的标识符就是在注册期间被提供给信关的那一个(由于初始父线程将知道它自己的实际标识符或处理位置和引用标识符)。
接下来,初始父线程用它的通用标识符或实际标识符来构造多个子线程,并且产生或发起各个子线程。子线程的标识符可以在父线程产生它们之后来指派,因而可能对于父线程而言是未知的,这是因为一旦硬件、软件或软硬件的组合加载并执行子线程后,子线程就可以在多种不同的位置上登陆多种不同的处理器或者在这些处理器上被处理。子线程的第一动作之一可以是一旦它们发生并且运行在具体处理器上,就向初始父线程发送它们的标识符。为了完成这个动作,每个子线程向以下信关发送消息,所述信关将初始父线程的标识符作为目的地线程标识符,并且将所述子线程的标识符包括在消息有效载荷中。可替换地,如果子线程具有到父线程的直接映射和通信信道,则该子线程可以直接将它的标识符放置在初始父线程的期望寄存器位置中。如果消息被发送到信关,则目的地标识符使得信关获取正确的引用位置,用以放置所述消息的有效载荷。该有效载荷是发送了所述消息的子线程的标识符,并且一旦被写入初始父线程的寄存器位置,就被初始父线程检测到。
此时,子线程和初始父线程具有彼此的标识符,并且可以使用这些标识符作为用于在线程之间发送的消息的目的地线程标识符。可以使用经由初始父线程的间接路由,使得一个子线程可以获得另一个子线程的标识符。换言之,子线程和父线程知道彼此的标识符,因此一个子线程可以联系初始父线程,并且请求另一个子线程的标识符。
在123处,如果信关正在处理转发消息操作,则从接收到的消息中提取出目的地标识符。在一些实施方案中,这可能意味着将目的地标识符从通用标识符映射到特定的线程标识符,该特定的线程标识符在130处被用来获得到用于消息的有效载荷的目的地位置的引用的正确映射。一旦获知对目的地位置的引用,信关就将消息有效载荷发送到那个位置。接收线程检测数据已被写入其位置,并且读取该数据,这个数据是从一个不同的线程发送而来的消息有效载荷。于是该有效载荷导致接收线程基于所接收有效载荷的内容而采取某种动作。
在一些实施方案中,在消息由信关转发到适当的位置前,信关在140处从消息中提取密钥信息。该密钥信息针对为目的地线程保持的密钥信息进行匹配。信关可以使用简单的数值比较、公钥密码算法、或者安全性领域中的普通技术人员所公知的其他技术来验证和匹配密钥。如果发生匹配,则如上所述地继续进行转发消息操作。然而,如果密钥信息不匹配的话,则信关可以忽略转发消息操作,将失败的操作写入日志,将失败的操作告知目的地线程,和/或将失败的操作告知另一个应用或服务。
图1的信关为线程透明地相互传送消息而起到管道和中介的作用。线程使用信关相互通信。如果在处理期间一些线程被移动到不同的位置,则信关可以管理这些变化,并且线程不必为了继续彼此交互而被修改。
图2图示了用于线程到线程通信的另一种方法200。方法200可以作为一系列信号,作为硬件组件等被实现在机器可访问或可读介质中。在一个实施方案中,方法200代表了父线程在与其子线程和信关交互时的处理,所述信关例如是上面参考图1的方法100所描述的信关。
方法200(此后称为“父线程”)一开始被加载并启动,以在多处理器环境内的具体处理器上进行处理。多处理器环境中的处理器(例如同时多线程化(SMT)处理器)可以支持并行执行的多个线程。在这种情况下,线程标识符不仅可以包括线程的处理器信息,还可以包括有关处理器的线程槽(thread slot)的信息。线程标识符唯一地标识多处理器环境中的一个具体线程。一旦被加载并且执行,父线程就可以获得它的标识符。标识符是用于直接联系父线程的地址(用于父线程的处理器的存储器或寄存器)。父线程的标识符可以自行获得,或者可以从一个信关服务处获得。
在210处,父线程向信关发送打开信关请求(例如注册请求)。打开信关请求包括对父线程希望从其他线程或者从信关接收消息的位置(存储器或寄存器)的引用。在一个实施方案中,在211处,父线程也可以将密钥信息添加到打开信关请求。密钥信息由信关来管理,使得任何发送消息到父线程的线程在信关将处理该消息到父线程的期望位置之前,都应当具有匹配的密钥信息。在一些实施方案中,信关生成初始密钥信息,并且将其分发到各线程以供在通信期间使用。
在一个实施方案中,在220处,父线程从信关回收到一个线程标识符。这可以是一个信关一般提供的用于父线程的标识符,或者它可以用作来自父线程的确认,即在父线程正在使用并且已经具有它自己的线程标识符的情况下,信关已辨识出打开信关请求。
在230处,父线程用它自己的唯一线程标识符(即,供子线程与父线程通信的寄存器偏移)来构造子线程,然后在240处发起子线程。发起意味着父线程请求软件资源(例如操作系统(OS))、硬件资源或软硬件资源的组合在由软件资源、硬件资源或软硬件资源的组合所确定的多处理器环境中的一个处理器上分配、加载并且执行所述子线程。父线程将不会知道子线程何时开始执行以及该子线程将登陆在多处理器环境中的何处,因而也不会知道在该子线程开始执行后如何与之进行通信。
为了建立通信,正在执行的子线程使用信关向父线程发送消息,或者直接将消息放入父线程的期望位置。无论子线程采用哪种技术,父线程都在241处,在子线程开始执行后的某个时刻,检测在其期望位置中的子标识符。被供给子标识符以及其他信息(例如寄存器偏移)后,父线程在242处可以生成到子线程的消息,以变更正在执行的子线程的操作或动作。在243处,这个消息作为转发消息操作被发送到信关,并且它包括新获得的子标识符。这假定子线程先前也向信关发出了打开信关请求,该请求指示出子线程可用于通信,并且指示出子线程想要接收消息的期望位置。
除了建立父线程和单个子线程之间的通信外,父线程还可以协助实现它的两个或更多个子线程之间的通信。例如,在244处,父线程可以检测在其期望位置中的消息有效载荷,它是第一子线程的标识符。响应于此,父线程可以确定第二子线程可能希望与第一子线程进行通信。父线程已经具有了第二子线程的标识符。于是,在245处,父线程生成将第二子线程的标识符列为目的地标识符的消息,并且该消息的有效载荷包括第一子线程的标识符。在246处,所述消息被发送到信关,以处理到与第二子线程相关联的用于接收消息的期望位置。第二子线程在其期望位置处检测到所述消息,检查有效载荷,并且获得第一子线程的标识符。第二子线程现在可以使用信关来与第一子线程通信。在244-246中给出的技术还可以由父线程用来向第一子线程提供第二子线程的标识符,从而允许第一子线程使用信关与第二子线程进行通信。
在250处,父线程可能检测到有必要终止与其他线程之间通信的处理状态。于是,父线程向信关发送关闭信关请求。这通知信关无效父线程期望位置的使用,从而导致发往父线程的任何消息都被忽略,直到父线程重新发出新的打开信关请求。
在一个实施方案中,在260处,父线程所执行的处理可能对不同的子线程重复迭代多次。另外,在270处,父线程的处理可以由子线程递归实现。在这样一种情况下,子线程对于它的从属子线程而言变成了父线程。也就是说,子线程可以使用同样的处理与它的子线程之间建立通信。另外,子线程的子线程可以与原子线程的父线程进行通信。事实上,通信可以是迭代并且递归的,并且可以在父线程、原子线程和原子线程的子线程之间跨越多级地发生。
图3图示了用于线程到线程通信的又一种方法300的流程图。方法300可以实现在机器可访问或可读介质中,作为一系列信号,作为硬件组件等。在一个实施方案中,方法300被实现在执行方法300的机器中。方法300可以经由可移动介质、存储器、存储设备、寄存器,或者经由具有方法300的指令的外部连网机器被加载到所述机器中。在一个实施方案中,方法300代表信关的处理逻辑。信关对发生在多处理器环境中的线程到线程通信起到中介或管道的作用。
方法(此后称为“信关”)一开始在310A和310B处保持在第一线程和用于接收消息的期望位置之间的第一映射,以及在第二线程和用于接收消息的期望位置之间的第二映射。用于保持所述映射的处理顺序可以以任意顺序发生。即,第一和第二映射可以基本彼此同时地被获得并保持,第一映射可以在第二映射之前被获得并保持,或者第二映射可以在第一映射之前被获得并保持。
利用上面分别相对与图1和图2的方法100和200一起讨论的打开信关操作所描述的技术,最初建立上述映射。一旦所述映射被建立并被保持,在随后的某个时刻,信关就从线程接收转发消息操作。这些消息包括目的地线程标识符,这些标识符是由信关从所述消息中提取出来的,并被用来获得到目的地线程的期望位置的正确映射。
在一个实施方案中,在321处,所述消息还可以包括与目的地线程相关联的密钥信息。信关提取这一密钥信息,并且相对为目的地线程保持的密钥信息来验证它。如果该密钥信息被验证为匹配,则消息从发送线程被处理到目的地线程。如果没有发生匹配,则信关忽略所述消息,告知目的地线程,将失败的消息写入日志,和/或告知不同的服务或应用。
在一些情形中,在330处,从发送线程接收到的消息可以是关闭信关请求。这向信关指示出发送线程不想经由它所标识的位置接收进一步的消息。结果,信关删除其用于发送线程的映射,并且忽略随后接收到的发往发送线程的任何消息。在某些其他情形中,信关可以具有自动关门能力,这就不必让一个专门的关闭信关消息受到处理。这可以在信关监控活动线程的状态时发生,或者可以在软件资源、硬件资源或者软硬件资源的组合通知信关具体的线程何时终止时发生。
在一个实施方案中,在340处,信关也可以检测出所接收的消息是来自线程之一的对状态的请求。响应于所述状态请求,信关经由请求线程的期望位置向它提供状态信息。在另一个实施方案中,所接收的消息可以是这样的请求,即暂时中止到请求线程期望位置的消息。在这些实施方案中,信关可以使消息入队,或者忽略处于中止期间的消息。一旦请求线程结束中止,任何入队的消息都可以串行地流入到请求线程的期望位置,以由请求线程来处理或引起它的注意。
在一些实施方案中,在350处,信关可以将第一和第二映射保持为多个线程之间的单个多映射。在这些实施方案中,信关将映射保持为会话(session)映射,并且在351处将会话标识符提供给距在参与由该会话标识符标识出的通信会话的线程。当多个线程想要全体通信或者彼此同步地通信时,这可能是有用的。
图4是线程到线程通信系统400的图。线程到线程通信系统400实现在机器可访问或可读介质上。线程到线程通信系统400可以用软件、硬件、固件或它们的组合来实现。而且,所述线程到线程通信系统400可以从支持并行处理的多处理器环境中进行访问,并且在该环境中进行工作。在一个实施方案中,线程到线程通信系统400包括线程401和402以及信关403,所述线程401和402以相对图2的方法200所描述的方式来工作,所述信关403以分别相对图1和3的方法100和300所描述的方式来工作。
线程到线程通信系统400最小要包括第一线程401、第二线程402和信关403。第一线程401与第二线程402之间的指定是相对的,取决于在线程到线程通信系统400的运行期间内所发生的交互和处理状态。也就是说,在一些情形中,第一线程401可以变为第二线程402,反之亦然。
信关403是用于在线程401和402之间发生的通信的中介或管道。单个线程401和402可能不知道其他线程401或402位于何处,或者在处理期间的某一具体时刻如何与之联系;但是,信关403知道如何联系线程401和402,以及如何协助所需消息到达线程401和402。
信关403通过保持线程401和402中每一个预期接收或看见消息的、用于线程401和402中每一个的期望位置,来解决消息中继问题。线程401和402被构造来检测数据何时被写入它们用于接收消息的期望位置。这种构造可以这样来实现,即当对期望位置的写操作完成时,由另一个应用向线程401和402发送通知或事件。可替换地,可以在线程401和402的逻辑内实现所述构造,使得线程401和402有一部分逻辑周期性地并且系统性地检查它们的期望位置,以找到与所接收的消息相关联的数据。在又一种替换方案中,用于线程401或402之一的逻辑的一部分可以在接收到定向于相应线程401或402的消息后,将相应线程401或402从非活动或睡眠模式或状态中唤醒。
信关403支持多种操作,它可以代表请求线程401和402来执行这些操作。例如,信关403处理与注册线程401和402中的一个或多个相关联的操作,以利用打开信关请求来接收通信。信关403处理将消息从发送线程401或402转发到目的地线程401或402的期望位置的操作。此外,信关403还处理以下操作,这些操作经由关闭信关请求而删除到线程401和402中的一个或多个的期望位置的映射,从而终止到这些线程401和402的通信。在某些其他情形中,信关403可以自动终止到线程401和402中的一个或多个的通信,而无需专门的关闭信关消息。这可以发生在信关403监控活动线程的状态时,或者可以发生在软件资源、硬件资源、或者软硬件资源的组合通知信关403具体的线程401或402何时终止的时候。
在一个实施方案中,信关403还可以支持向请求线程401和402发送状态信息。另外,在一些情形中,通过提取密钥信息并针对所保持的密钥信息对其进行验证,信关403透明地支持安全性技术。这使得信关403通过确保对于接收消息的线程401或402正确地识别出密钥信息,而向线程401和402提供某种级别的安全性。在另外一种实施方案中,信关403可以自己生成密钥信息,并将其分发到线程401和402,以供在相互通信期间使用。
在一个实施方案中,第一线程401是多个子线程的父线程,其中第二线程402就是所述多个子线程之一。在另一个实施方案中,第一和第二线程401和402都是一个公共父线程的子线程。在又一个实施方案中,第一和第二线程401和402是不同层级上的子线程。例如,第一线程401可以是初始父线程的第一子线程,而第二线程402可以是所述初始父线程的一个不同的第一子线程的从属子线程。
图5是协助实现线程间通信的信关的体系结构实施例500的图。图5仅是出于图示说明的目的,而不想限制本发明的实施方案。因此,可以更改图5中的各种硬件、固件以及与之关联的连接关系,而不会偏离这里所给出的教导。体系结构500被实现或集成在支持并行处理的多处理器体系结构中。
信关体系结构500从运行在多处理器体系结构中的线程接收进入消息,并且可以响应于任何给定的进入消息,将离开信关体系结构500的消息或数据写入多处理器体系结构的存储器或寄存器位置。
信关体系结构500支持以下三种操作中的至少一种打开信关请求,关闭信关请求以及转发消息请求。这些请求中的每一种都可以用预定义的数据格式被发送到信关,所述数据格式由信关辨识并剥离下来,以进行正确的处理。可替换地,这些请求中的一些可以由信关体系结构500独立地产生,例如关闭信关请求。在又一种实施方案中,信关体系结构可以协助初始的通信,而此后的通信在两个线程之间直接进行。
例如,打开信关请求从一个线程被发送到信关,并且可以包括与将该请求标识为打开信关请求相关联的信息、用于任何消息验证的密钥、用于从信关接收返回消息的寄存器基址。一接收到打开信关请求,信关就将密钥数据和寄存器基址放入存储器内由指向请求线程的标识符的指针来索引的其存储器中,设置供请求线程打开的通信,提取所述线程的标识符,并且可选地将所述线程的标识符返回到请求线程的寄存器基址。
从请求线程发送到信关的关闭信关请求可以包括与将该请求标识为关闭信关请求相关联的信息。这里,只有将该请求标识为关闭信关请求的信息才被发送。然而,在一些实施方案中,请求线程可以发送一个返回寄存器,用于接收关于关闭请求已被处理的验证。在一个实施方案中,确认也可以发生在当信关响应于接收到关闭信关请求而将空(NULL)指针返回到请求线程时。响应于关闭信关请求,信关复位或者清零先前的打开信关位。如果未曾置位先前的打开信关位,则不采取任何动作。
从请求线程发送到信关的转发消息请求可以在单个数据段中包括消息描述符(descriptor)和有效载荷。这包括将该请求标识为转发消息请求的信息、目的地线程的标识符、与目的地线程相关联的任何可选密钥信息、用于消息有效载荷的寄存器密钥偏移、有效载荷大小以及有效载荷本身。响应于有效的消息,信关将有效载荷转发到目的地的期望寄存器位置,并且可以可选地发送一个通知位到目的地线程。所述通知位可以由目的地线程来监控,或者可以由另一个代表目的地线程的应用来监控。这是用于在接收到消息有效载荷时识别目的地线程的一种替换机制。无效消息可被写入日志,或者向目的地或者另一个应用或服务生成通知。
线程到线程通信可以使用边带信号来指示正被发送的消息的大小。换言之,边带信号可以指示某一具体消息是1个数据字、2个数据字、3个数据字、4个数据字等。边带信号还可以用来指示线程是否要接收通知,指示消息是否终止(这可以被线程用来识别多个消息的消息边界)等等。
图5的信关体系结构500描述了为了建立信关,可被实现在多处理器环境中的示例性体系结构。该信关对于线程到线程通信而言起到管道和中介的作用。
以上说明是示意性的而非限制性的。在阅读了以上说明后,本领域的技术人员将会清楚很多其他实施方案。因此,应当参考所附权利要求以及赋予这些权利要求的全部范围内的等同物来确定本发明的实施方案的范围。
说明书摘要是遵循37 C.F.R.§1.72(b)来提供的,以使读者能够很快地把握技术内容的本质和要旨。提交摘要不是用于解释或限制权利要求书的范围和含义。
在对实施方案的以上说明中,为了使公开内容更加流畅,将各种特征组合在单个实施方案中。这种公开方法不想被理解为暗含以下意图,即本发明所要求保护的实施方案比在每个权利要求中清楚陈述的方案具有更多的特征。相反,正如所附权利要求所展现的那样,具有创造性的主题由单个公开实施方案的部分特征组成。因此,所附权利要求被合并到“具体实施方式
”一部分中,其中每个权利要求自身代表单独的一个示例性实施方案。
权利要求
1.一种方法,包括注册第一和第二线程中的至少一个线程用以通信;如果第一线程被注册,则标识供第一线程从第二线程接收通信的第一位置;如果第二线程被注册,则标识供第二线程从第一线程接收通信的第二位置;从所述线程中的一个线程接收消息;以及响应于包括在所述消息中的目的地标识符,将所述消息转发到所述位置之一。
2.如权利要求1所述的方法,还包括从请求线程接收关闭通信请求,所述请求线程被标识为所述第一或第二线程;以及删除所述请求线程的位置,使其不再在通信期间使用。
3.如权利要求1所述的方法,还包括检测事件,所述事件指示出所述线程之一将使其通信关闭;以及删除该线程的位置,使其不再在通信期间使用。
4.如权利要求1所述的方法,还包括在转发所述消息之前,验证包括在所述消息中的密钥信息。
5.如权利要求1所述的方法,其中注册操作进一步包括以下操作中的至少一个从所述第一线程接收第一打开通信请求;以及从所述第二线程接收第二打开通信请求。
6.如权利要求5所述的方法,其中标识操作进一步包括以下操作中的至少一个在所述第一打开通信请求中,从所述第一线程接收第一寄存器位置作为所述第一位置;以及在所述第二打开通信请求中,从所述第二线程接收第二寄存器位置作为所述第二位置。
7.如权利要求6所述的方法,其中标识操作进一步包括以下操作中的至少一个保持从第一通用标识符到用于第一线程的第一寄存器位置之间的第一映射;以及保持从第二通用标识符到用于第二线程的第二寄存器位置之间的第二映射。
8.如权利要求7所述的方法,其中转发操作进一步包括从所述消息的字段中提取被标识为第一或第二通用标识符的目的地标识符,以便确定所述映射中的哪一个为所述消息提供了适当的寄存器位置。
9.一种方法,包括向信关发送打开信关请求,其中所述请求包括对用于接收消息的位置的引用;用线程标识符构造子线程;以及发起所述子线程。
10.如权利要求9所述的方法,在所述位置中检测用于所述子线程的子标识符;生成具有所述子标识符的消息;以及将所述消息发送到所述信关,以处理到所述子线程。
11.如权利要求9所述的方法,还包括在所述位置中检测与所述子线程相关联的第一子标识符;响应于检测到所述第一子标识符,生成具有与第二子线程相关联的第二子标识符的消息,其中所述消息的有效载荷包括所述第一子标识符;以及向所述信关发送所述消息,以处理到所述第二子线程。
12.如权利要求9所述的方法,其中发送操作进一步包括将密钥信息添加到所述请求,该密钥信息由所述信关使用,以便验证由所述信关放在所述位置中的消息,其中对于每个消息而言,如果它包括所述密钥信息,则该消息得到验证。
13.如权利要求9所述的方法,进一步包括以下操作中的至少一个向所述信关发送关闭通信请求,告知所述信关对所述位置的引用不再可用于接收消息;以及由所述信关检测所述位置不再可用于接收消息。
14.如权利要求9所述的方法,进一步包括对于不同的子线程,在一次或多次附加的迭代中重复进行所述方法。
15.如权利要求9所述的方法,进一步包括对于与子线程相关联的从属子线程,由所述子线程在一次或多次附加的迭代中重复进行所述方法。
16.一种系统,包括第一线程;第二线程;以及信关,其中所述信关通过判定与所述第一和第二线程相关联的位置,建立并管理所述第一和第二线程之间的通信,其中所述那些位置收容在所述第一和第二线程之间发生的消息。
17.如权利要求16所述的系统,其中所述信关还应请求向所述第一或第二线程发出状态信息。
18.如权利要求16所述的系统,其中所述第一线程是与多个子线程相关联的父线程,并且所述第二线程是所述多个子线程之一。
19.如权利要求16所述的系统,其中所述第一和第二线程是一个公共父线程的子线程。
20.如权利要求16所述的系统,其中所述第一和第二线程是不同层级上的子线程。
21.如权利要求16所述的系统,其中所述信关从所述消息中提取密钥信息,并且其中所述密钥信息在通信期间向所述第一和第二线程验证彼此的身份。
22.如权利要求16所述的系统,其中所述信关转发与所述消息之一相关联的有效载荷,其中所述消息之一是在通信期间从所述第一和第二线程之一被发送到所述位置中为所述第一和第二线程中的另一个线程可访问的一个选出位置的消息。
23.一种具有关联指令的机器可访问介质,所述指令在被访问时导致所述机器执行保持在第一线程标识符和第一位置引用之间的第一映射以及在第二线程标识符和第二位置引用之间的第二映射当中的至少一个映射;以及一些消息从所述第一和第二线程中的至少一个线程被发送到所述第一和第二位置引用中的至少一个位置引用,响应于包括在这些消息中的目的地标识符,并且响应于所述第一和第二映射中的至少一个映射,转发所述消息,其中用于某一具体消息的具体目的地标识符是所述第一线程标识符或所述第二线程标识符。
24.如权利要求23所述的介质,进一步包括用于响应于接收到关闭信关请求或者响应于检测到指示删除所述第一或第二映射的事件,删除所述第一或第二映射的指令。
25.如权利要求23所述的介质,其中转发操作进一步包括用于以下操作的指令从所述消息中提取密钥信息;以及在转发所述消息前验证来自所述消息的密钥信息。
26.如权利要求23所述的介质,进一步包括用于向所述第一和第二线程中的至少一个线程传送状态信息的指令。
27.如权利要求23所述的介质,进一步包括用于以下操作的指令生成至少具有所述第一和第二映射之一的会话映射和会话标识符;以及向所述第一和第二线程中的至少一个传送所述会话标识符,以与所述消息一起用作目的地标识符。
28.一种装置,存在于计算机可访问介质中,包括映射库;目的地寄存器;以及路由器,其中所述目的地寄存器从发起线程接收目标线程标识符,所述目标线程标识符位于所述映射库中,用以标识用于目标线程的处理位置,并且其中路由器响应于所述处理位置,将从所述发起线程接收到的消息的有效载荷传递通过,到达所述目标线程。
29.如权利要求28所述的装置,其中所述映射库是随机访问存储器。
30.如权利要求28所述的装置,其中所述映射库包括具有目标线程标识符、所述目标线程的处理位置、以及用于所述目标线程的密钥信息的条目。
全文摘要
本发明提供了线程到线程通信。第一线程向信关注册用以接收通信。注册过程包括标识用于接收消息的位置。信关将从第二线程接收到的消息有效载荷映射到所述第一线程的位置。第一线程检测所述位置中的有效载荷,并且在用于处理时使用它。
文档编号G06F9/46GK1716209SQ20051008003
公开日2006年1月4日 申请日期2005年6月28日 优先权日2004年6月28日
发明者江洪, 迈克尔·德怀尔 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1