CN107992368A - 一种多进程间的数据交换方法和*** - Google Patents
一种多进程间的数据交换方法和*** Download PDFInfo
- Publication number
- CN107992368A CN107992368A CN201711132105.2A CN201711132105A CN107992368A CN 107992368 A CN107992368 A CN 107992368A CN 201711132105 A CN201711132105 A CN 201711132105A CN 107992368 A CN107992368 A CN 107992368A
- Authority
- CN
- China
- Prior art keywords
- data
- node space
- space
- node
- write
- 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.)
- Pending
Links
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/543—User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- 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/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种多进程间的数据交换方法和***,包括使用共享内存及域名套接字混合架构交换数据,并将共享内存划分为N个节点空间,进行数据共享,而使用域名套接字对共享内存中的数据进行同步。由于每个进程在访问节点空间之前都使用互斥锁访问标识位,避免了读内存和写内存之间的冲突。节点空间的标识位和互斥锁的搭配使用,使得数据生产进程和多个数据消费进程之间互斥,而多个数据消费进程之间可以同时访问同一片内存,使得数据消费进程不会造成因加锁而造成性能下降。
Description
技术领域
本发明涉及信息技术领域,特别涉及一种多进程间的数据交换方法和***。
背景技术
本发明主要关注点在于主机内的多进程间的数据交换技术,尤其适合多进程间的大数据交换。
常见的进程间数据交换包括使用管道、消息缓冲通信、共享内存、套接字通信(socket)、域名套接字(domainsocket等)。进程间的数据交换量较小时可以使用以上这些方式完成,但当进程间需要交换大量的数据时,这些方式会因为处理数据带宽高、占用较多额外CPU时间而不能满足实时性的要求,同时域名套接字的发送动作由操作***的软中断触发,而软中断的资源有限,也限制了该方式所能处理的最大带宽。
共享内存则是在操作***的内存中划分出一部分区域作为***内两个以上进程共同使用的内存。这种方式使进程间得数据交换不需要进行复制,因此适合大规模数据的交换。但基于共享内存的数据交换需要进行复杂的数据同步操作,造成进程间耦合度极高,任何一个进程出现问题,其他所有进程将出现阻塞。例如数据生产进程通过共享内存的方式向多个数据消费进程提供数据,如果其中一个数据消费进程出现问题导致不能在共享内存中及时取走数据则会造成共享内存空间不足,最终导致数据生产进程也停止工作,从而导致整个处理***停止工作。
为避免共享内存使用中个别进程故障导致所有进程的死锁的情况,本发明提出使用共享内存与套接字结合的方式来实现主机内多进程间的大规模数据交换。具体地,为提高套接字的数据交换效率,使用域名套接字来传递数据的同步信息。而且,域名套接字中仅传输共享内存的偏移量,可以在一次传输中同步多个数据片段,能够大幅减少对操作***软中断资源的使用,减少了交互信息对带宽的需求,提高多进程间数据交换的效率。该方法既利用了共享内存数据交换带宽高的特点,又利用域名套接字来消除了进程间对内存访问的耦合导致的死锁。
发明内容
本发明的目的在于克服上述技术的缺陷,提供一种基于共享内存和域名套接字的主机内多进程间大规模数据交换方法和***。
具体地说,本发明公开了一种多进程间的数据交换方法,其中包括:
数据消费进程启动步骤,启动多个数据消费进程,并向操作***申请共享内存空间;
共享内存空间划分步骤,启动一个数据生产进程,该数据生产进程和该数据消费进程使用相同的规则定义数据管理单元,并将该共享内存空间按照该数据管理单元的格式划分为N个节点空间,其中N为正整数;
第一节点空间选取步骤,选取某一节点空间作为待写节点空间;
数据写入步骤,该数据生产进程访问该待写节点空间的标识位,若该待写节点空间的标识位为空闲状态,则将其置为在写状态,同时该数据生产进程向该待写节点空间写入数据,写入完成后将标识位置为空闲状态,若该待写节点空间的标识位为在读状态,则放弃该待写节点空间,选取下一个节点空间作为该待写节点空间;
同步数据元组发送步骤,重复调用该数据写入步骤,将该数据生产进程产生的数据依次写入N个节点空间中,并且每写完num个节点空间就通过域名套接字将同步数据元组发送到该数据消费进程,其中num为大于1小于N的正整数;
第二节点空间选取步骤,该数据消费进程通过解析该域名套接字,得到可用节点空间,并根据该可用节点空间,选取某一节点空间作为待读节点空间;
数据读取步骤,该数据消费进程访问该待读节点空间的标识位,若该待读节点空间的标识位为空闲状态或在读状态,则将其置为在读状态,同时该数据消费进程读取并处理该待读节点空间内数据,处理完成后将标识位置为空闲状态,若该待读节点空间的标识位为在写状态,则放弃该待读节点空间,根据该可用节点空间,选取下一个节点空间作为待读节点空间;
重复步骤,重复调用该数据读取步骤,直到所有该数据消费进程均完成数据的读取和处理。
该多进程间的数据交换方法,其中该数据写入步骤还包括,该数据生产进程向该待写节点空间写入数据时,若该待写节点空间已经写有数据,则直接写入新的数据覆盖原有的数据。
该多进程间的数据交换方法,其中该数据生产进程使用互斥锁访问该待写节点空间的标识位;且该数据消费进程使用互斥锁访问该待读节点空间的标识位。
该多进程间的数据交换方法,其中该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
本发明还公开了一种多进程间的数据交换***,其中包括:
数据消费进程启动模块,用于启动多个数据消费进程,并向操作***申请共享内存空间;
共享内存空间划分模块,用于启动一个数据生产进程,该数据生产进程和该数据消费进程使用相同的规则定义数据管理单元,并将该共享内存空间按照该数据管理单元的格式划分为N个节点空间,其中N为正整数;
第一节点空间选取模块,用于选取某一节点空间作为待写节点空间;
数据写入模块,用于使该数据生产进程访问该待写节点空间的标识位,若该待写节点空间的标识位为空闲状态,则将其置为在写状态,同时该数据生产进程向该待写节点空间写入数据,写入完成后将标识位置为空闲状态,若该待写节点空间的标识位为在读状态,则放弃该待写节点空间,选取下一个节点空间作为该待写节点空间;
同步数据元组发送模块,用于重复调用该数据写入模块,将该数据生产进程产生的数据依次写入N个节点空间中,并且每写完num个节点空间就通过域名套接字将同步数据元组发送到该数据消费进程,其中num为大于1小于N的正整数;
第二节点空间选取模块,用于使该数据消费进程解析该域名套接字,得到可用节点空间,并根据该可用节点空间,选取某一节点空间作为待读节点空间;
数据读取模块,用于使该数据消费进程访问该待读节点空间的标识位,若该待读节点空间的标识位为空闲状态或在读状态,则将其置为在读状态,同时该数据消费进程读取并处理该待读节点空间内数据,处理完成后将标识位置为空闲状态,若该待读节点空间的标识位为在写状态,则放弃该待读节点空间,根据该可用节点空间,选取下一个节点空间作为待读节点空间;
重复模块,用于重复调用该数据读取模块,直到所有该数据消费进程均完成数据的读取和处理。
该多进程间的数据交换***,其中该数据写入模块还包括,该数据生产进程向该待写节点空间写入数据时,若该待写节点空间已经写有数据,则直接写入新的数据覆盖原有的数据。
该多进程间的数据交换***,其中该数据生产进程使用互斥锁访问该待写节点空间的标识位;且该数据消费进程使用互斥锁访问该待读节点空间的标识位。
该多进程间的数据交换方法,其中该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
与现有技术相比,本发明的优点在于:
首先,使用共享内存相对于直接使用域名套接字交换数据,提高了多进程间数据交换的带宽。将共享内存划分为N个节点空间,提高了多进程间共享内存的使用效率。其次,扩展性好。由于使用域名套接字进行通信,使得大规模数据交换可以在多个进程间有序进行而不只限于两个进程间。同时,数据生产进程采用了直接覆盖原有数据的策略,即使在数据消费进程不能取走数据的情况下,数据生产进程任然可以在环形的共享内存中写入数据保持正常工作。数据消费进程恢复正常后立即可以得到数据继续工作。最后,由于每个进程在访问节点空间之前都使用互斥锁访问标识位,避免了读内存和写内存之间的冲突。节点空间的标识位和互斥锁的搭配使用,只要涉及标识位改写,都要使用互斥,先获取,再释放,使得数据生产进程和多个数据消费进程之间互斥,而多个数据消费进程之间可以同时访问同一片内存,这样的设计即使增加更多的数据消费进程也不会造成因加锁而造成的性能下降。
附图说明
图1为数据生产进程流程图;
图2为数据消费进程流程
图3为flag各个位的含义表格图;
图4为申请N个等长连续的共享内存空间时的环形共享内存示意图。
具体实施方式
本发明公开了一种多进程间的数据交换方法,其中包括:
数据消费进程启动步骤,启动多个数据消费进程,并向操作***申请共享内存空间;
共享内存空间划分步骤,启动一个数据生产进程,该数据生产进程和该数据消费进程使用相同的规则定义数据管理单元,并将该共享内存空间按照该数据管理单元的格式划分为N个节点空间,其中N为正整数;
第一节点空间选取步骤,选取某一节点空间作为待写节点空间;
数据写入步骤,该数据生产进程访问该待写节点空间的标识位,若该待写节点空间的标识位为空闲状态,则将其置为在写状态,同时该数据生产进程向该待写节点空间写入数据,写入完成后将标识位置为空闲状态,若该待写节点空间的标识位为在读状态,则放弃该待写节点空间,选取下一个节点空间作为该待写节点空间;
同步数据元组发送步骤,重复调用该数据写入步骤,将该数据生产进程产生的数据依次写入N个节点空间中,并且每写完num个节点空间就通过域名套接字将同步数据元组发送到该数据消费进程,其中num为大于1小于N的正整数;
第二节点空间选取步骤,该数据消费进程通过解析该域名套接字,得到可用节点空间,并根据该可用节点空间,选取某一节点空间作为待读节点空间;
数据读取步骤,该数据消费进程访问该待读节点空间的标识位,若该待读节点空间的标识位为空闲状态或在读状态,则将其置为在读状态,同时该数据消费进程读取并处理该待读节点空间内数据,处理完成后将标识位置为空闲状态,若该待读节点空间的标识位为在写状态,则放弃该待读节点空间,根据该可用节点空间,选取下一个节点空间作为待读节点空间;
重复步骤,重复调用该数据读取步骤,直到所有该数据消费进程均完成数据的读取和处理。
该多进程间的数据交换方法,其中该数据写入步骤还包括,该数据生产进程向该待写节点空间写入数据时,若该待写节点空间已经写有数据,则直接写入新的数据覆盖原有的数据。
该多进程间的数据交换方法,其中该数据生产进程使用互斥锁访问该待写节点空间的标识位;且该数据消费进程使用互斥锁访问该待读节点空间的标识位。
该多进程间的数据交换方法,其中该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
具体来说,本发明通过以下的技术方案实现:
a.首先启动多个数据消费进程,由多个数据消费进程中的一个向操作***申请共享内存空间,申请完成后所有的数据消费进程开始准备接收域名套接字。随后启动一个数据生产进程。
b.数据生产和消费进程使用相同的规则定义数据管理单元的结构体,结构体中包含互斥锁、标识位flag以及实际存储数据的数组(实际存放数据的内存空间)。数组的实际大小为Block(Block可以根据实际应用需求调整大小,例如5MB,100MB等)。将共享内存空间按照数据管理单元的格式划分为N个大小相同的节点空间,N为正整数。这N个节点空间从0开始按次序编好序号,最后一个节点空间的编号为N-1。
c.数据生产进程将数据写入一个节点空间。在将数据写入一个节点空间之前,使用互斥锁来访问该节点空间的标识位,如果标识位显示没有数据消费进程正在读数据,即读标识位为0,则将标识位置为在写状态,代表当前该节点空间处于写数据状态,释放互斥锁,然后开始向节点空间中写入数据。数据生产进程写完数据后同样获得互斥锁将标识位置为空闲状态然后释放互斥锁。按照这样的方法将产生的数据依次写入这N个节点空间中,每写完num个节点空间就通过域名套接字将同步数据元组<num,index_1,index_2,…,index_num>发送到对应的数据消费进程,同步数据元组中包含已经写入数据的各节点空间的编号。这里num为超参,可以根据应用数据交换的频度调整大小,num为大于1小于N的正整数,同时小于min(MTU/sizeof(int)-1,N),其中MTU为***设置的域名套接字使用的最大传输单元的大小(通常为1500字节)其中sizeof(int)表示整型数所占字节数,使用sizeof(int),使得计算方式独立于不同的平台。如果数据生产进程发现有数据消费进程正在读取将要写入数据的节点空间则放弃操作这个节点空间,换成下一个节点空间,以免发生冲突。数据生产进程循环依次在这N个节点空间中写入数据并发送同步数据元组。这样的策略使得N个节点空间在逻辑上形成一个环形区域如图4所示。如果节点空间已经写入了数据内容,则直接写入新的数据覆盖原有的内容。如此循环操作这N个节点空间。
d.数据消费进程接收到域名套接字后,将域名套接字中的内容写入自己的缓冲区。解析域名套接字的内容,得到待处理的各个节点空间的编号。处理节点空间数据之前首先使用互斥锁访问该节点空间的标识位,如果标识位显示有数据生产进程正在写入数据则放弃处理该节点空间的内容,直接处理下一个等待处理的节点空间。如果标识位显示为空闲或者在读状态,则读取该节点空间中的数据,并处理。处理完毕后使用互斥锁改变标识位的状态并释放互斥锁。
为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
在数据生产***A和数据消费***B,C同时定义相同的节点空间结构体:
其中,flag节点数据读写标识位,示例中声明为char类型,每个进程使用读、写标识各1位,最多可支持4个进程之间的数据交换,可根据需要,修改该字段的数据类型,以支持更多进程;pkt_len用来记录这个节点空间实际存储的数据大小,pkt_data[MTU_size]用来实际存储有效数据,pmutex为互斥锁。
现在假设一个数据交换的场景,包括一个数据生产进程A和两个数据消费进程为***B和C。
数据消费***B向操作***申请sizeof(_pkt_node)*N字节的共享内存(N为节点空间的个数),得到共享内存的ID和起始地址。其他的***通过相同的方式得到内存ID和起始地址。在每个***中,起始地址存储于(void*)shm中,通过语句struct_pkt_node*node=(struct_pkt_node*)shm,使得node+i可以访问序号为i的节点空间。
数据生产和消费***中还定义了相同的用于域名套接字发送数据的结构体:
其中pkt_num=NumOfpktPerTime表示数据生产***A每写满NumOfpktPerTime的节点空间就发送一次域名套接字。node_index
用于存储每个节点空间的序号。考虑到***A调用操作***发送域名套接字会造成软中断,如果发送域名套接字过于频繁会导致丢包使***性能下降,过慢又会导致数据还没来得及处理就被数据生产***A擦除写入新的数据,因此,经过反复实验,建议将NumOfpktPerTime设置为31。31并非一个始终固定的值,可以根据实际情况调整。为避免数据少的异常情况,可引入超时机制,超时后,及时数据量为达到预设值,将发送当时已有数据。
由于数据产生***A需要向数据消费***B,C发送域名套接字,因此在A中需要初始化域名套接字并绑定B,C的域名套接字地址。
如图1所示,完成共享内存和域名套接字初始化后,A***中实例化_pktnode_msg结构体为msg。数据生产***A判断是否有数据需要提供到数据消费***,如果没有继续等待,如果有则开始将数据写入每个节点空间。数据写入节点空间之前需要加锁访问该空间的flag,读取flag根据图3并判断该空间是否B,C在读,有***在读表示不可用,反之表示可用,同时将可用与否反映到一个布尔型变量。如果该空间可用则根据图3将相应的flag位置1.,然后对flag解锁。此过程的代码如下所示:
如果变量deal_or_not为false则表示这个节点空间不可用,则放弃对当前空间直接对下一个节点空间进行操作。如果为true,则在节点空间中写入相应的内容,并将实际写入的数据大小写入节点空间结构体的pkt_len中。同时将这个节点空间的序号写入msg的node_index中。之后,再次加锁对flag进行操作,如图3将相应位置1和置0。
pthread_mutex_lock(&((node+i)->pmutex));//lock
(node+i)->flag&=~1;
(node+i)->flag|=1<<1;
pthread_mutex_unlock(&((node+i)->pmutex));//unlock
如果已经写入的节点空间数目等于NumOfpktPerTime,则将结构体msg通过域名套接字发送到对应的数据消费程序中。
数据消费程序B,C的工作过程如图2所示。
和***A相似,B,C使用和A相同的一个正整数申请共享内存,得到共享内存ID和起始地址(void*)shm。初始化B,C的域名套接字并申请一个struct_pktnode_msg*类型的指针msg,并将其与char数组msg_buf绑定在一起,方便使用msg指针直接访问数据。使用头文件sys/socket.h中的recv函数接收域名套接字。如果没有收到消息就继续等待,收到消息后将域名套接字中的信息写入msg_buf缓冲区实现代码如下:
struct_pktnode_msg*msg=(struct_pktnode_msg*)msg_buf;
numBytes=recv(sockfd,msg_buf,1024,0);
其中numBytes为实际接收到的数据大小。
收到数据后依次读取msg->node_index数组中的节点空间序号并尝试处理。读取节点空间中数据之前需要加锁访问该空间的flag,读取flag,根据图3并判断该空间是否有***在写,在写表示不可用,在读或者空闲状态表示可用,同时将节点空间可用与否反映到一个布尔型变量。如果该空间可用则根据图3将相应的flag位置1,然后对flag解锁。此过程的代码如下所示:
pthread_mutex_unlock(&((node+msg->node_index[i])->pmutex));
如果deal_or_not为false则放弃对这个节点空间的处理,读取下一个节点空间的序号,deal_or_not为true则读取节点空间中的数据进行处理。读取完成后再加锁对flag进行操作。如此循环接收消息并处理。
以下为与上述方法实施例对应的***实施例,本实施***可与上述实施方式互相配合实施。上述施方式中提到的相关技术细节在本实施***中依然有效,为了减少重复,这里不再赘述。相应地,本实施***中提到的相关技术细节也可应用在上述实施方式中。
本发明还公开了一种多进程间的数据交换***,其中包括:
数据消费进程启动模块,用于启动多个数据消费进程,并向操作***申请共享内存空间;
共享内存空间划分模块,用于启动一个数据生产进程,该数据生产进程和该数据消费进程使用相同的规则定义数据管理单元,并将该共享内存空间按照该数据管理单元的格式划分为N个节点空间,其中N为正整数;
第一节点空间选取模块,用于选取某一节点空间作为待写节点空间;
数据写入模块,用于使该数据生产进程访问该待写节点空间的标识位,若该待写节点空间的标识位为空闲状态,则将其置为在写状态,同时该数据生产进程向该待写节点空间写入数据,写入完成后将标识位置为空闲状态,若该待写节点空间的标识位为在读状态,则放弃该待写节点空间,选取下一个节点空间作为该待写节点空间;
同步数据元组发送模块,用于重复调用该数据写入模块,将该数据生产进程产生的数据依次写入N个节点空间中,并且每写完num个节点空间就通过域名套接字将同步数据元组发送到该数据消费进程,其中num为大于1小于N的正整数;
第二节点空间选取模块,用于使该数据消费进程解析该域名套接字,得到可用节点空间,并根据该可用节点空间,选取某一节点空间作为待读节点空间;
数据读取模块,用于使该数据消费进程访问该待读节点空间的标识位,若该待读节点空间的标识位为空闲状态或在读状态,则将其置为在读状态,同时该数据消费进程读取并处理该待读节点空间内数据,处理完成后将标识位置为空闲状态,若该待读节点空间的标识位为在写状态,则放弃该待读节点空间,根据该可用节点空间,选取下一个节点空间作为待读节点空间;
重复模块,用于重复调用该数据读取模块,直到所有该数据消费进程均完成数据的读取和处理。
该多进程间的数据交换***,其中该数据写入模块还包括,该数据生产进程向该待写节点空间写入数据时,若该待写节点空间已经写有数据,则直接写入新的数据覆盖原有的数据。
该多进程间的数据交换***,其中该数据生产进程使用互斥锁访问该待写节点空间的标识位;且该数据消费进程使用互斥锁访问该待读节点空间的标识位。
该多进程间的数据交换方法,其中该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
虽然本发明以上述实施例公开,但具体实施例仅用以解释本发明,并不用于限定本发明,任何本技术领域技术人员,在不脱离本发明的构思和范围内,可作一些的变更和完善,故本发明的权利保护范围以权利要求书为准。
Claims (10)
1.一种多进程间的数据交换方法,其特征在于,包括:
数据消费进程启动步骤,启动多个数据消费进程,并向操作***申请共享内存空间;
共享内存空间划分步骤,启动一个数据生产进程,该数据生产进程和该数据消费进程使用相同的规则定义数据管理单元,并将该共享内存空间按照该数据管理单元的格式划分为N个节点空间,其中N为正整数;
第一节点空间选取步骤,选取某一节点空间作为待写节点空间;
数据写入步骤,该数据生产进程访问该待写节点空间的标识位,若该待写节点空间的标识位为空闲状态,则将其置为在写状态,同时该数据生产进程向该待写节点空间写入数据,写入完成后将标识位置为空闲状态,若该待写节点空间的标识位为在读状态,则放弃该待写节点空间,选取下一个节点空间作为该待写节点空间;
同步数据元组发送步骤,重复调用该数据写入步骤,将该数据生产进程产生的数据依次写入N个节点空间中,并且每写完num个节点空间就通过域名套接字将同步数据元组发送到该数据消费进程,其中num为大于1小于N的正整数;
第二节点空间选取步骤,该数据消费进程通过解析该域名套接字,得到可用节点空间,并根据该可用节点空间,选取某一节点空间作为待读节点空间;
数据读取步骤,该数据消费进程访问该待读节点空间的标识位,若该待读节点空间的标识位为空闲状态或在读状态,则将其置为在读状态,同时该数据消费进程读取并处理该待读节点空间内数据,处理完成后将标识位置为空闲状态,若该待读节点空间的标识位为在写状态,则放弃该待读节点空间,根据该可用节点空间,选取下一个节点空间作为待读节点空间;
重复步骤,重复调用该数据读取步骤,直到所有该数据消费进程均完成数据的读取和处理。
2.如权利要求1所述的多进程间的数据交换方法,其特征在于,该数据写入步骤还包括,该数据生产进程向该待写节点空间写入数据时,若该待写节点空间已经写有数据,则直接写入新的数据覆盖原有的数据。
3.如权利要求1或2所述的多进程间的数据交换方法,其特征在于,该数据生产进程使用互斥锁访问该待写节点空间的标识位;且该数据消费进程使用互斥锁访问该待读节点空间的标识位。
4.如权利要求3所述的多进程间的数据交换方法,其特征在于,该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
5.如权利要求1或2所述的多进程间的数据交换方法,其特征在于,该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
6.一种多进程间的数据交换***,其特征在于,包括:
数据消费进程启动模块,用于启动多个数据消费进程,并向操作***申请共享内存空间;
共享内存空间划分模块,用于启动一个数据生产进程,该数据生产进程和该数据消费进程使用相同的规则定义数据管理单元,并将该共享内存空间按照该数据管理单元的格式划分为N个节点空间,其中N为正整数;
第一节点空间选取模块,用于选取某一节点空间作为待写节点空间;
数据写入模块,用于使该数据生产进程访问该待写节点空间的标识位,若该待写节点空间的标识位为空闲状态,则将其置为在写状态,同时该数据生产进程向该待写节点空间写入数据,写入完成后将标识位置为空闲状态,若该待写节点空间的标识位为在读状态,则放弃该待写节点空间,选取下一个节点空间作为该待写节点空间;
同步数据元组发送模块,用于重复调用该数据写入模块,将该数据生产进程产生的数据依次写入N个节点空间中,并且每写完num个节点空间就通过域名套接字将同步数据元组发送到该数据消费进程,其中num为大于1小于N的正整数;
第二节点空间选取模块,用于使该数据消费进程解析该域名套接字,得到可用节点空间,并根据该可用节点空间,选取某一节点空间作为待读节点空间;
数据读取模块,用于使该数据消费进程访问该待读节点空间的标识位,若该待读节点空间的标识位为空闲状态或在读状态,则将其置为在读状态,同时该数据消费进程读取并处理该待读节点空间内数据,处理完成后将标识位置为空闲状态,若该待读节点空间的标识位为在写状态,则放弃该待读节点空间,根据该可用节点空间,选取下一个节点空间作为待读节点空间;
重复模块,用于重复调用该数据读取模块,直到所有该数据消费进程均完成数据的读取和处理。
7.如权利要求6所述的多进程间的数据交换***,其特征在于,该数据写入模块还包括,该数据生产进程向该待写节点空间写入数据时,若该待写节点空间已经写有数据,则直接写入新的数据覆盖原有的数据。
8.如权利要求6或7所述的多进程间的数据交换***,其特征在于,该数据生产进程使用互斥锁访问该待写节点空间的标识位;且该数据消费进程使用互斥锁访问该待读节点空间的标识位。
9.如权利要求8所述的多进程间的数据交换方法,其特征在于,该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
10.如权利要求7或8所述的多进程间的数据交换***,其特征在于,该数据生产进程循环依次在N个节点空间中写入数据并通过域名套接字将N个节点信息发送至数据消费进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711132105.2A CN107992368A (zh) | 2017-11-15 | 2017-11-15 | 一种多进程间的数据交换方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711132105.2A CN107992368A (zh) | 2017-11-15 | 2017-11-15 | 一种多进程间的数据交换方法和*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107992368A true CN107992368A (zh) | 2018-05-04 |
Family
ID=62030896
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711132105.2A Pending CN107992368A (zh) | 2017-11-15 | 2017-11-15 | 一种多进程间的数据交换方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107992368A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109508241A (zh) * | 2018-11-20 | 2019-03-22 | 中国电子科技集团公司第五十四研究所 | 一种进程间数据交换方法 |
CN109857698A (zh) * | 2019-02-26 | 2019-06-07 | 重庆零壹空间航天科技有限公司 | 一种火箭飞行数据处理方法、装置 |
CN109947575A (zh) * | 2019-03-21 | 2019-06-28 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关*** |
CN112631768A (zh) * | 2020-11-23 | 2021-04-09 | 北京思特奇信息技术股份有限公司 | 一种基于异步机制的资源共享方法及*** |
CN113132065A (zh) * | 2019-12-30 | 2021-07-16 | 西安诺瓦星云科技股份有限公司 | 数据通信方法、装置及***、存储介质和视频处理设备 |
CN113535414A (zh) * | 2021-05-31 | 2021-10-22 | 宁波三星医疗电气股份有限公司 | 适用于Linux容器应用的多进程同步方法 |
CN115113931A (zh) * | 2022-07-22 | 2022-09-27 | 瀚博半导体(上海)有限公司 | 数据处理***、方法、人工智能芯片、电子设备和介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8271336B2 (en) * | 1999-11-22 | 2012-09-18 | Accenture Global Services Gmbh | Increased visibility during order management in a network-based supply chain environment |
CN103049245A (zh) * | 2012-10-25 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种基于cpu多核平台的软件性能优化方法 |
CN103218176A (zh) * | 2013-04-02 | 2013-07-24 | 中国科学院信息工程研究所 | 数据处理方法及装置 |
CN103414582A (zh) * | 2013-07-26 | 2013-11-27 | 北京星网锐捷网络技术有限公司 | 主备用进程间的同步方法、装置及网络设备 |
CN103455380A (zh) * | 2012-06-05 | 2013-12-18 | 上海斐讯数据通信技术有限公司 | 多进程通信***及其建立和通信方法 |
CN104503734A (zh) * | 2014-12-31 | 2015-04-08 | 北京神舟航天软件技术有限公司 | 一种基于Kahn进程网络的程序并行框架提取技术 |
US20160196131A1 (en) * | 2014-07-07 | 2016-07-07 | Symphony Teleca Corporation | Remote Embedded Device Update Platform Apparatuses, Methods and Systems |
CN106126359A (zh) * | 2016-08-25 | 2016-11-16 | 成都交大光芒科技股份有限公司 | 进程间共享数据的快速传输方法 |
-
2017
- 2017-11-15 CN CN201711132105.2A patent/CN107992368A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8271336B2 (en) * | 1999-11-22 | 2012-09-18 | Accenture Global Services Gmbh | Increased visibility during order management in a network-based supply chain environment |
CN103455380A (zh) * | 2012-06-05 | 2013-12-18 | 上海斐讯数据通信技术有限公司 | 多进程通信***及其建立和通信方法 |
CN103049245A (zh) * | 2012-10-25 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种基于cpu多核平台的软件性能优化方法 |
CN103218176A (zh) * | 2013-04-02 | 2013-07-24 | 中国科学院信息工程研究所 | 数据处理方法及装置 |
CN103414582A (zh) * | 2013-07-26 | 2013-11-27 | 北京星网锐捷网络技术有限公司 | 主备用进程间的同步方法、装置及网络设备 |
US20160196131A1 (en) * | 2014-07-07 | 2016-07-07 | Symphony Teleca Corporation | Remote Embedded Device Update Platform Apparatuses, Methods and Systems |
CN104503734A (zh) * | 2014-12-31 | 2015-04-08 | 北京神舟航天软件技术有限公司 | 一种基于Kahn进程网络的程序并行框架提取技术 |
CN106126359A (zh) * | 2016-08-25 | 2016-11-16 | 成都交大光芒科技股份有限公司 | 进程间共享数据的快速传输方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109508241A (zh) * | 2018-11-20 | 2019-03-22 | 中国电子科技集团公司第五十四研究所 | 一种进程间数据交换方法 |
CN109508241B (zh) * | 2018-11-20 | 2021-04-20 | 中国电子科技集团公司第五十四研究所 | 一种进程间数据交换方法 |
CN109857698A (zh) * | 2019-02-26 | 2019-06-07 | 重庆零壹空间航天科技有限公司 | 一种火箭飞行数据处理方法、装置 |
CN109947575A (zh) * | 2019-03-21 | 2019-06-28 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关*** |
CN113132065A (zh) * | 2019-12-30 | 2021-07-16 | 西安诺瓦星云科技股份有限公司 | 数据通信方法、装置及***、存储介质和视频处理设备 |
CN112631768A (zh) * | 2020-11-23 | 2021-04-09 | 北京思特奇信息技术股份有限公司 | 一种基于异步机制的资源共享方法及*** |
CN113535414A (zh) * | 2021-05-31 | 2021-10-22 | 宁波三星医疗电气股份有限公司 | 适用于Linux容器应用的多进程同步方法 |
CN115113931A (zh) * | 2022-07-22 | 2022-09-27 | 瀚博半导体(上海)有限公司 | 数据处理***、方法、人工智能芯片、电子设备和介质 |
CN115113931B (zh) * | 2022-07-22 | 2023-02-14 | 瀚博半导体(上海)有限公司 | 数据处理***、方法、人工智能芯片、电子设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107992368A (zh) | 一种多进程间的数据交换方法和*** | |
CN100412848C (zh) | 计算机网络和计算机*** | |
CN108268208B (zh) | 一种基于rdma的分布式内存文件*** | |
JP4334901B2 (ja) | コンピュータ処理システム及びコンピュータで実行される処理方法 | |
JP4489399B2 (ja) | プロセッサでのデータ処理方法及びデータ処理システム | |
JP3696563B2 (ja) | コンピュータ・プロセッサ及び処理装置 | |
JP3687990B2 (ja) | メモリアクセス機構 | |
JP4768386B2 (ja) | 外部デバイスとデータ通信可能なインターフェイスデバイスを有するシステム及び装置 | |
TW544589B (en) | Loosely coupled-multi processor server | |
JP4499420B2 (ja) | スーパーチャージメッセージ交換装置 | |
JP5635521B2 (ja) | シリアルポートメモリ通信の待ち時間および信頼性を改善するための方法およびシステム | |
US5418913A (en) | System of two-way communication between processors using a single queue partitioned with pointers and limited overwrite privileges | |
CN112948318B (zh) | 一种Linux操作***下基于RDMA的数据传输方法及装置 | |
CN105183662B (zh) | 一种无cache一致性协议的分布式共享片上存储架构 | |
US10616333B2 (en) | System for the management of out-of-order traffic in an interconnect network and corresponding method and integrated circuit | |
WO2002069115A2 (en) | A security system with an intelligent dma controller | |
CN104699631A (zh) | Gpdsp中多层次协同与共享的存储装置和访存方法 | |
US20110276737A1 (en) | Method and system for reordering the request queue of a hardware accelerator | |
CN113032162B (zh) | 一种基于共享内存备份机制的多进程通讯方法 | |
CN111400307A (zh) | 支持远程并发访问的持久哈希表访问*** | |
US7035956B2 (en) | Transmission control circuit, reception control circuit, communications control circuit, and communications control unit | |
US11385900B2 (en) | Accessing queue data | |
CN117076344A (zh) | 数据共享方法、装置、***以及可读存储介质 | |
EP1915696A1 (en) | Dma simultaneous transfer to multiple memories | |
CN1287314A (zh) | 带有具用于一个共用存储器的接口的多个处理器的装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |