一种进程间通讯装置及其进程间通讯方法

文档序号:7661698阅读:151来源:国知局
专利名称:一种进程间通讯装置及其进程间通讯方法
技术领域
本发明涉及一种进程间通讯装置及其进程间通讯方法。
背景技术
随着智能网业务控制点SCP ( Service Control Point,业务控制点)功能 越来越复杂,业务控制点需要根据功能的不同划分为不同的模块,如业务状 态控制模块、业务流程控制模块、业务管理模块、计费模块和话单处理模块 等。为了便于管理和维护,将这些模块分解为独立的进程,各进程内部再进 一步细分成不同的线程来完成模块的相关功能,典型的多进程多线程系统架 构如图1所示。
为了完成智能网业务呼叫流程,各模块内部和各模块之间需要进行大量 的消息交互,既有进程内的消息,也有进程间的消息。进程内各线程之间的 消息发送相对比较简单,由于发送线程和接收线程在一个进程的地址空间 中,发送线程只需要通过消息队列将消息体的指针发送给接收线程,接收线 程就可以直接处理消息体指针。但对于进程间的通讯,如果将整个消息体的 内容(数据)直接放入消息队列来进行发送,对操作系统的消息队列会形成 很大的沖击,大量的消息可能导致操作系统消息队列阻塞,导致整个业务处 理机的异常。因此,对于进程间的通讯,必需采用其它更加有效的方法来解 决。
除了智能网络系统外,存在多个进程、且多个进程间有通讯需求的其它 系统也有类似的情况。解决以上问题的传统方法是采用如图2所示的进程间通讯模式,该进程 间通讯模式结合使用消息队列和共享内存来进行进程间的通讯发送进程将 需要发送的消息体的内容(即数据)拷贝到接收进程对应的共享内存区域中, 同时将消息体的内容在共享内存中的偏移地址(数据起始地址)和数据长度
通过消息队列发送到接收进程。图2所示的进程间通讯模式解决了由于消息数过多,消息体内容所包含数据量过大而导致的消息队列阻塞的问题;但引发了一个新问题,即当多 个发送进程/线程同时向 一个接收进程发送消息时,发送进程/线程同时向接 收进程的共享内存区域写入消息体的内容,容易导致写沖突,即该共享内存 区域中的同一个地址被多个发送进程同时写入数据,造成数据沖突;在多个 发送进程存在大量并发消息的情况下,写沖突出现的概率很大。因此,在发 送进程/线程将消息内容拷贝到接收进程的共享内存区域前,必需先获取进 程间的互斥锁,才能保证数据的完整性。但是在写操作前增加互斥操作无疑 降低了系统的并发度,导致系统整体性能的下降;并且互斥锁过多也会消耗 大量的系统资源。发明内容本发明所要解决的技术问题是,克服现有技术中进程间通讯方法的不 足,提供一种不使用互斥操作即可实现正确的进程间通讯装置及其进程间通 ifl方法。为了解决上述问题,本发明提供一种进程间通讯装置,用于在发送进程 的发送线程和接收进程的接收线程之间进行数据通讯,其特征在于,该装置 包含共享存储单元,共享消息队列,分发存储单元,分发单元;其中,共享存储单元用于为所述发送线程提供存储需发送到所述接收进程的 接收线程的数据的存储空间;分发存储单元处于所述接收进程的地址空间,用于存储所述需发送到所 述接收进程的接收线程的凄t据;分发单元用于从共享消息队列中读取数据通知消息,根据该消息中包含 的数据地址信息将数据从共享存储单元拷贝到分发存储单元中;并将该数据 在分发存储单元中的地址信息发送到数据通知消息中包含的接收线程标识 对应的所述接收线程中。
此外,所述分发单元为所述接收进程的线程。此外,该装置还包含分发消息队列,用于将保存在所述分发存储单元中 的所述数据的地址信息发送到所述接收线程标识信息对应的接收线程中。此外,所述共享存储单元中包含为所述发送线程分配的存储区域;所述 发送线程将所述需发送到所述接收线程的数据存储在该存储区域的可用地 址段中。此外,所述分发存储单元是预先分配的所述接收进程地址空间中的堆内 存池;或者是所述分发单元根据需要动态分配的堆内存。本发明还提供一种进程间通讯方法,其特征在于,当发送进程的发送线 程向接收进程的接收线程发送数据时,该方法包含如下步骤A:发送线程将所述数据存储在共享存储单元的可用地址段中,并将数 据通知消息通过共享消息队列发送到分发单元;数据通知消息中包含所述数 据在共享存储单元中的地址信息和接收线程标识;B:分发单元接收到上述数据通知消息后,获取该消息中包含的数据的 起始信息和接收线程标识;C-.分发单元将所迷数据从共享存储单元拷贝到分发存储单元中,并将 该数据在分发存储单元中的地址信息发送到接收线程标识对应的接收线程 中。此外,所述分发单元为所述接收进程的线程。此外,在所述步骤C中,分发单元通过分发消息队列将所述数据在分发 存储单元中的地址信息发送到所述接收线程中。此外,所述共享存储单元中包含为所述发送线程分配的存储区域;在所
此外,在所述步骤B和C之间包含如下步骤Bk分发单元在所述接收进程的地址空间分配堆内存,将该堆内存作为 所述分发存储单元;在所述步骤C之后还包含如下步骤D:所述接收线程根据数据的地址信息从分发存储单元读取所述数据, 并对数据进行处理;E:所述接收线程释放所述分发存储单元对应的堆内存。由上可知,由于本发明为每一个发送线程在共享存储单元中分配独立的 存储区域,有效地防止了多个发送进程/线程向同一个地址空间写数据而导 致数据冲突的问题,提高了系统处理的并发度;此外,由于在接收进程中采 用了分发单元线程对发送进程/线程发送的数据及时进行拷贝、通知等处理, 有效地避免了发送线程与接收线程的数据发送与接收速度不匹配而导致的 数据不能被及时读取、甚至造成数据被覆盖的现象。


图1为典型的多进程多线程系统架构示意图; 图2是现有技术中的进程间通讯模式示意图; 图3为本发明的一种进程间通讯装置的结构示意图; 图4是本发明的一种进程间通讯方法流程图。
具体实施方式
下面将结合附图和实施例对本发明进行详细描述。图3为本发明的一种进程间通讯装置的结构示意图。如图3所示,进程 间通讯装置用于在发送进程和接收进程之间进行数据通讯,发送进程(进程 A)包含一个或多个发送线程线程A1,....,线程An, n为进程A中包含 的发送线程的数量;接收进程(进程B)包含一个或多个发送线程线程Bl,....,线程Bm, m为进程B中包含的发送线程的数量。该装置包含共享存储单元,共享消息队列,分发单元,分发存储单元, 分发消息队列。其中共享存储单元用于为发送进程中的各发送线程提供存储空间,该存储空 间用于存储发送到其它进程的数据;在共享存储单元中可以为发送进程中的 不同发送线程分配不同的存储区域;欲向其它进程发送数据的线程可将数据 存ii在为该线程分配的区域中。共享消息队列用于在发送进程和接收进程的分发单元之间传送数据通 知消息;该消息通常包含共享存储单元的偏移地址(数据的起始地址)及数 据长度;此外该消息中还可包含消息(即数据的起始地址及长度)转发目的 标识信息,用于指示该消息的接收者,即接收进程中的接收线程的标识信息。上述数据的起始地址及数据长度可统称为数据的地址信息,若发送方和 接收方对数据的长度进行了预先约定,则数据的地址信息中可不包含数据长度。分发单元用于从共享消息队列中读取数据通知消息,通过其中包含的转 发目的标识信息获知该消息的接收线程标识信息,并从该消息中获:f又共享存 储单元的偏移地址及数据长度;根据该偏移地址和数据长度从共享存储单元 中读取数据,并将该数据拷贝到分发存储单元中;分发单元还将该数据在分 发存储单元中的偏移地址(数据的起始地址)及数据长度通过分发消息队列 发送到上述接收线程标识信息对应的线程中。分发单元通常处于接收进程的地址空间中,也就是说,分发单元为接收 进程中的一个实现数据和消息分发功能的特定线程。分发存储单元用于存储数据,该存储单元通常位于接收进程的地址空间 中;分发存储单元通常是预先分配的接收进程地址空间中的堆内存,也可以 是分发单元根据需要动态分配的堆内存。分发消息队列用于在分发单元和接收进程中的各线程之间传送消息,该 消息中通常包含上述分发存储单元中的偏移地址(数据起始地址)及数据长 度;由于在接收进程中存在多个线程,而多个线程通常共享该分发消息队列,
因此上述消息中通常还包含上述接收线程标识信息,用于接收者确认是否应 该读耳又该消息。在UNIX系统中,上述共享消息队列和分发消息队列通常是system V(系 统V)消息队列。图4是本发明的一种进程间通讯方法流程图。如图4所示,当发送进程 中的发送线程(例如,线程Al)需要向接收进程中的接收线程(例如,线 程B1)发送数据时,该方法包含如下步骤101:线程A1将需发送至线程B1的数据存储在共享存储单元中为线程 Al所分配的存储区域的当前可用的地址段中;由于为Al所分配的存储区域的大小有限,线程Al需要循环使用该存 储区域,以避免在连续发送多段数据时,前一段数据尚未被读取即被下一段 数据覆盖。该存储区域的大小与线程Al写入数据段的频率和数据量有关, 即该存储区域的大小需要保证循环使用该存储区域时不会出现后续数据将 尚未被读取的数据覆盖的现象。102:线程Al将以上数据在共享存储单元中的偏移地址及数据长度通 过共享消息队列发送到分发单元;由上可知,上述共享消息队列通常为系统消息队列,因此上述偏移地址 及数据长度信息通常包含在数据通知消息中传送给分发单元,该数据通知消 息中还需包含接收线程标识信息,即,线程B1的标识信息。103:分发单元接收到上述数据通知消息后,从该消息中获取偏移地址 (数据起始地址)和数据长度以及接收线程标识信息;104:分发单元在接收进程的地址空间中分配堆内存作为分发存储单元, 根据上述偏移地址和数据长度信息从共享存储单元读取数据,并将该数据拷 贝到分发存储单元中;105:分发单元将分发存储单元的地址,即数据的起始地址及数据长度 通过分发消息队列发送到上述接收线程标识对应的接收线程,即,线程Bl 中;
同样,由于分发消息队列通常为系统消息队列,因此上述^t据起始地址及数据长度信息通常包含在数据转发消息中传送给接收线程,即线程Bl, 该数据转发消息中还需包含接收线程标识信息,即,线程B1的标识信息。106:线程B1接收到数据转发消息后,根据该消息中包含的数据起始地 址和数据长度从分发存储单元中读取数据,对该数据进行相应的处理,并释 放分发存储单元对应的堆内存;由于线程B1与分发单元处于相同进程的地址空间中,因此在数据使用 完毕后,线程Bl可使用上述数据起始地址直接释;^文分发存储单元对应的堆 内存。此外,线程B1也可以通知分发单元堆内存中的数据已使用完毕,由分 发单元自行释放该地址空间。例如,线程B1向分发单元发送内存释放消息, 通知分发单元释放分发存储单元对应的堆内存;此外,还可以通过全局变量 的通讯方式通知分发单元释放内存。由于接收线程通知分发单元释放内存的 方式属于进程内的线程间通讯方式,不是本发明的重点,因此对此不进行过 多的描述。基于本发明的基本原理,上述实施例可以有多种变化方式,例如上述分发存储单元可以是一段预先分配的堆内存池,分发单元负责对其 进行管理,并根据需要从堆内存中选择使用其中的一段或多段堆内存;当有 突发的大量数据需要拷贝,预先分配的堆内存池中的可分配内存无法满足要 求时可以动态分配堆内存使用,这样可以减少内存分配/释放的次数。由上可知,由于本发明为每一个发送线程在共享存储单元中分配独立的 存储区域,有效地防止了多个发送进程/线程向同 一个地址空间写数据而导 致数据冲突的问题,提高了系统处理的并发度;此外,由于在接收进程中采 用了分发单元线程对发送进程/线程发送的数据及时进行拷贝、通知等处理, 有效地避免了发送线程与接收线程的数据发送与接收速度不匹配而导致的 数据不能被及时读取、甚至造成数据被覆盖的现象。
权利要求
1、一种进程间通讯装置,用于在发送进程的发送线程和接收进程的接收线程之间进行数据通讯,其特征在于,该装置包含共享存储单元,共享消息队列,分发存储单元,分发单元;其中,共享存储单元用于为所述发送线程提供存储需发送到所述接收进程的接收线程的数据的存储空间;共享消息队列用于在所述发送线程和分发单元之间传送数据通知消息;分发存储单元处于所述接收进程的地址空间,用于存储所述需发送到所述接收进程的接收线程的数据;分发单元用于从共享消息队列中读取数据通知消息,根据该消息中包含的数据地址信息将数据从共享存储单元拷贝到分发存储单元中;并将该数据在分发存储单元中的地址信息发送到数据通知消息中包含的接收线程标识对应的所述接收线程中。
2、 如权利要求1所述的进程间通讯装置,其特征在于,所述分发单元 为所述接收进程的线程。
3、 如权利要求1所述的进程间通讯装置,其特征在于,该装置还包含送到所述接收线程标识信息对应的接收线程中。
4、 如权利要求1所述的进程间通讯装置,其特征在于,所述共享存储 单元中包含为所述发送线程分配的存储区域;所述发送线程将所述需发送到 所述接收线程的数据存储在该存储区域的可用地址段中。
5、 如权利要求2所述的进程间通讯装置,其特征在于,所述分发存储 单元是预先分配的所述接收进程地址空间中的堆内存池;或者是所述分发单 元根据需要动态分配的堆内存。
6、 一种进程间通讯方法,其特征在于,当发送进程的发送线程向接收 进程的接收线程发送数据时,该方法包含如下步骤 A:发送线程将所述数据存储在共享存储单元的可用地址段中,并将数 据通知消息通过共享消息队列发送到分发单元;数据通知消息中包含所述数据在共享存储单元中的地址信息和接收线程标识;B:分发单元接收到上述数据通知消息后,获取该消息中包含的数据的 起始信息和接收线程标识;C:分发单元将所述数据从共享存储单元拷贝到分发存储单元中,并将 该数据在分发存储单元中的地址信息发送到接收线程标识对应的接收线程 中。
7、 如权利要求6所述的进程间通讯方法,其特征在于,所述分发单元 为所述接收进程的线程。
8、 如权利要求6所述的进程间通讯方法,其特征在于,在所述步骤C 中,分发单元通过分发消息队列将所述数据在分发存储单元中的地址信息发 送到所述接收线程中。
9、 如权利要求6所述的进程间通讯方法,其特征在于,所述共享存储 单元中包含为所述发送线程分配的存储区域;在所述步骤A中,所述发送 线程将所述数据存储在该存储区域中的可用地址段中。
10、 如权利要求7所述的进程间通讯方法,其特征在于, 在所述步骤B和C之间包含如下步骤'.Bl:分发单元在所述接收进程的地址空间分配堆内存,将该堆内存作为 所述分发存储单元;在所述步骤C之后还包含如下步骤D:所述接收线程根据数据的地址信息从分发存储单元读取所述数据, 并对数据进4于处理;E:所述接收线程释放所述分发存储单元对应的堆内存。
全文摘要
一种进程间通讯装置和方法,用于在发送进程的发送线程和接收进程的接收线程之间进行数据通讯。该装置包含共享存储单元,共享消息队列,分发存储单元,分发单元;其中,共享存储单元用于为发送线程提供存储需发送到接收进程的接收线程的数据的存储空间;共享消息队列用于在发送线程和分发单元之间传送数据通知消息;分发存储单元处于接收进程的地址空间,用于存储需发送到接收进程的接收线程的数据;分发单元用于从共享消息队列中读取数据通知消息,根据该消息中包含的数据地址信息将数据从共享存储单元拷贝到分发存储单元中;并将该数据在分发存储单元中的地址信息发送到数据通知消息中包含的接收线程标识对应的接收线程中。
文档编号H04M3/42GK101127685SQ20071015304
公开日2008年2月20日 申请日期2007年9月20日 优先权日2007年9月20日
发明者卢勤元 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1