CN112559196A - 一种进程间通讯数据共享的传输方法 - Google Patents
一种进程间通讯数据共享的传输方法 Download PDFInfo
- Publication number
- CN112559196A CN112559196A CN201910851645.9A CN201910851645A CN112559196A CN 112559196 A CN112559196 A CN 112559196A CN 201910851645 A CN201910851645 A CN 201910851645A CN 112559196 A CN112559196 A CN 112559196A
- Authority
- CN
- China
- Prior art keywords
- data
- shared memory
- module
- memory data
- counter 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.)
- Granted
Links
- 238000004891 communication Methods 0.000 title claims abstract description 67
- 238000000034 method Methods 0.000 title claims abstract description 39
- 230000005540 biological transmission Effects 0.000 title claims abstract description 15
- 238000011161 development Methods 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/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)
- Multi Processors (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种进程间通讯数据共享的传输方法,该方法包括:创建共享内存接收数据模块和共享内存发送数据模块;通讯模块将接收的数据写入到共享内存接收数据模块;其他模块读取共享内存接收数据模块中的数据;其他模块将要发送的数据写入共享内存发送数据模块;通讯模块读取共享内存发送数据模块中的数据。当程序模块间串行或者网络端口被占用时,采用此种传输方法依然可以进行通讯数据的共享。
Description
技术领域
本发明涉及通讯数据传输技术领域,尤其涉及一种进程间通讯数据共享的传输方法。
背景技术
当软件项目开发越来越复杂的时候,模块化开发可以提升开发效率,方便后期维护。每个程序模块独立运行时即启动一个进程,进程之间的信息传递只能通过进程间通讯来完成。
进程通信常使用的方法是共享内存,其原理是将一份物理内存映射到不同的进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信,因此是一种高效的数据交换方式。
在进行串口通讯和网络通讯时,同一时间只有一个进程能占用某一个端口进行数据通讯,其他进程无法获得通讯数据,无法满足模块化开发需求。
发明内容
本发明提供了一种进程间通讯数据共享的传输方法,解决了程序模块间串行或者网络端口被占用时,通讯数据无法共享的技术问题。
为解决上述技术问题,本发明提出如下技术方案:
一种进程间通讯数据共享的传输方法,该方法包括:
创建共享内存接收数据模块和共享内存发送数据模块;
通讯模块将接收的数据写入到共享内存接收数据模块;
其他模块读取共享内存接收数据模块中的数据;
其他模块将要发送的数据写入共享内存发送数据模块;
通讯模块读取共享内存发送数据模块中的数据。
优选的,共享内存接收数据模块包括存数计数器部分和存储数据部分。
优选的,通讯模块将接收的数据写入共享内存接收数据模块时采用先进先出的方式。
优选的,其他模块读取共享内存接收数据模块中的数据包括如下具体步骤:
S11,其他模块读取共享内存接收数据模块的当前计数器值a;
S12,将当前计数器值a与上一次计数器值a0比较;
S13,当a>a0时,其他模块从共享内存接收数据模块中读取更新数据,否则直接跳到步骤S15;;
S14,将a赋值给a0;
S15,判断其他模块是否接收到停止指令,如果是结束,否则返回步骤S11。
优选的,共享内存发送数据模块包括Y个子块,每一个子块存储大小为Z。
优选的,每一个子块包括存数计数器部分和存储数据部分。
优选的,其他模块的数量为多个,每一个其他模块对应一个共享内存发送数据模块的子块,并将数据写入到对应的子块中,然后对应的子块更新计数器值并更新存储数据。
优选的,通讯模块读取共享内存发送数据模块中的数据包括如下具体步骤:
S21,初始化i=0;
S22,当i<Y时,获取第i个子块的计数器值a(i),否则返回步骤S21;
S23,将当前计数器值a(i)与上一次计数器值a0(i)比较;
S24,当a(i)>a0(i)时,通讯模块从共享内存发送数据模块的子块中读取更新数据;
S25,将a(i)赋值给a0(i);
S26,令i=i+1;
S27,判断通讯模块是否接收到停止指令,如果是结束,否则返回步骤S22;
其中i表示Y个子块中的第i个子块,a0(i)表示共享内存发送数据模块Y个子块中第i个子块的上一次计数器值,a(i)表示共享内存发送数据模块Y个子块中第i个子块的当前计数器值。
与现有技术相比,本发明的有益效果是:
分别创建共享内存接收数据模块和共享内存发送数据模块,通讯模块将接收的数据写入到共享内存接收数据模块,其他模块读取共享内存接收数据模块中的数据;同时,其他模块将要发送的数据写入共享内存发送数据模块,通讯模块读取共享内存发送数据模块中的数据。当程序模块间串行或者网络端口被占用时,采用此种传输方法依然可以进行通讯数据的共享。
附图说明
图1是本发明通讯模块将接收的数据写入共享内存接收数据模块的流程图。
图2是本发明其他模块读取共享内存接收数据模块中数据的流程图。
图3是本发明其他模块将要发送的数据写入共享内存发送模块的流程图。
图4是本发明通讯模块读取共享内存发送模块中数据的流程图。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
本发明所述的一种进程间通讯数据共享的传输方法,包括:
创建共享内存接收数据模块和共享内存发送数据模块;
通讯模块将接收的数据写入到共享内存接收数据模块;
其他模块读取共享内存接收数据模块中的数据;
其他模块将要发送的数据写入共享内存发送数据模块;
通讯模块读取共享内存发送数据模块中的数据。
下面结合附图对本发明做进一步介绍。
在通讯模块与其他模块共享数据之前对共享内存接收数据模块和共享内存发送数据模块的计数器值进行初始化。
如图1所示,是通讯模块将接收的数据写入共享内存接收数据模块的流程图。本发明中共享内存接收数据模块包括存数计数器部分和存储数据部分,通讯模块接收串口通讯或网络通讯的数据,并将接收到的数据写入共享内存接收数据模块中,共享内存接收数据模块更新计数器值a,同时更新存数数据。通讯模块将接收的数据写入共享内存接收数据模块时采用先进先出的方式。
如图2所示,是其他模块读取共享内存接收数据模块中数据的流程图。其他模块读取共享内存接收数据模块中的数据包括如下具体步骤:
S11,其他模块读取共享内存接收数据模块的当前计数器值a;
S12,将当前计数器值a与上一次计数器值a0比较;
S13,当a>a0时,其他模块从共享内存接收数据模块中读取更新的a-a0字节的数据,否则直接跳到步骤S15;
S14,将a赋值给a0;
S15,判断其他模块是否接收到停止指令,如果是结束,否则返回步骤S11。
如图3所示,是其他模块将要发送的数据写入共享内存发送模块的流程图。本发明中共享内存发送数据模块包括Y个子块,每一个子块存储大小为Z,其中每一个子块包括存数计数器部分和存储数据部分,其他模块的数量为多个,每一个其他模块对应一个共享内存发送数据模块的子块,并将需要发送的数据写入到对应的子块中,然后对应的子块更新计数器值并更新存储数据。
如图4所示,是通讯模块读取共享内存发送模块中数据的流程图。通讯模块轮询共享内存发送模块中的Y个子块,判断每一个子块是否有数据更新,如果是,则从共享子块中读取最新更新的数据字节,然后将数据发送给串口通讯或者网络通讯。本发明中通讯模块读取共享内存发送数据模块中的数据包括如下具体步骤:
S21,初始化i=0;
S22,当i<Y时,获取第i个子块的计数器值a(i),否则返回步骤S21;
S23,将当前计数器值a(i)与上一次计数器值a0(i)比较;
S24,当a(i)>a0(i)时,通讯模块从共享内存发送数据模块的子块中读取更新的a(i)-a0(i)字节的数据;
S25,将a(i)赋值给a0(i);
S26,令i=i+1;
S27,判断通讯模块是否接收到停止指令,如果是结束,否则返回步骤S22;
其中i表示Y个子块中的第i个子块,a0(i)表示共享内存发送数据模块Y个子块中第i个子块的上一次计数器值,a(i)表示共享内存发送数据模块Y个子块中第i个子块的当前计数器值。
下面介绍本发明的具体实施例。
在通讯模块与其他模块共享数据之前对共享内存接收数据模块和共享内存发送数据模块的计数器值进行初始化。
通讯模块将接收到的数据共享给其他模块的传输方式包括如下步骤:
创建一个容量为M字节的共享内存接收数据模块;
将M字节的共享内存分为两部分:前N字节用于存储计数器值,后M-N字节用于存储数据;
通讯模块接收串口通讯或网络通讯的数据,再将接收到的数据写入共享内存接收数据模块;
如果通讯模块接收到的数据字节总和超过M-N字节,则采用先进先出的方式,将最后进入的M-N字节的数据写入到共享内存接收数据模块中;
其他模块找到共享内存接收数据模块的地址,读取M字节的共享数据,并从中获得当前存储计数器值为a;
启动其他模块的通讯数据处理线程,判断当前存储计数器值a是否大于上一次计数器值a0,如果是,则从共享内存接收数据模块中读取最新更新的a-a0字节的数据。
其他模块将要发送的数据共享给通讯模块的传输方式包括如下步骤:
创建一个容量为X字节的共享内存发送数据模块;
将X字节的共享内存发送数据模块分为Y个子块,每一个子块存储大小为Z,其中X=Y*Z;每一个子块的存储格式与共享内存接收数据模块相似,前K字节用于存储计数器值,后Z-K字节用于存储数据;
其他模块如果需要发送数据,则将发送数据字节和数据长度写入到相应的子块中,其他模块的数量为多个,每一个其他模块对应一个共享内存发送数据模块的子块;
通讯模块找到共享内存发送数据模块的地址,启动通讯数据发送线程;
轮询Y个子块,判断每一个子块是否有数据更新,如果是,则从子块中读取最新更新的a(i)-a0(i)字节的数据;
最后通过串口通讯或网络通讯将数据发送出去。
本发明分别创建共享内存接收数据模块和共享内存发送数据模块,通讯模块将接收的数据写入到共享内存接收数据模块,其他模块读取共享内存接收数据模块中的数据;同时,其他模块将要发送的数据写入共享内存发送数据模块,通讯模块读取共享内存发送数据模块中的数据。当程序模块间串行或者网络端口被占用时,依然可以进行通讯数据的共享。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的技术人员在本发明所揭露的技术范围内,可不经过创造性劳动想到的变化或替换,都应涵盖在本发明的保护范围内。因此,本发明的保护范围应该以权利要求书所限定的保护范围为准。
Claims (8)
1.一种进程间通讯数据共享的传输方法,其特征在于,该方法包括:
创建共享内存接收数据模块和共享内存发送数据模块;
通讯模块将接收的数据写入到共享内存接收数据模块;
其他模块读取共享内存接收数据模块中的数据;
其他模块将要发送的数据写入共享内存发送数据模块;
通讯模块读取共享内存发送数据模块中的数据。
2.根据权利要求1所述的一种进程间通讯数据共享的传输方法,其特征在于:所述共享内存接收数据模块包括存数计数器部分和存储数据部分。
3.根据权利要求1所述的一种进程间通讯数据共享的传输方法,其特征在于:所述通讯模块将接收的数据写入共享内存接收数据模块时采用先进先出的方式。
4.根据权利要求2所述的一种进程间通讯数据共享的传输方法,其特征在于:所述其他模块读取共享内存接收数据模块中的数据包括如下具体步骤:
S11,其他模块读取共享内存接收数据模块的当前计数器值a;
S12,将当前计数器值a与上一次计数器值a0比较;
S13,当a>a0时,其他模块从共享内存接收数据模块中读取更新数据,否则直接跳到步骤S15;
S14,将a赋值给a0;
S15,判断其他模块是否接收到停止指令,如果是结束,否则返回步骤S11。
5.根据权利要求1所述的一种进程间通讯数据共享的传输方法,其特征在于:所述共享内存发送数据模块包括Y个子块,每一个子块存储大小为Z。
6.根据权利要求5所述的一种进程间通讯数据共享的传输方法,其特征在于:所述每一个子块包括存数计数器部分和存储数据部分。
7.根据权利要求6所述的一种进程间通讯数据共享的传输方法,其特征在于:所述其他模块的数量为多个,每一个其他模块对应一个共享内存发送数据模块的子块,并将数据写入到对应的子块中,然后对应的子块更新计数器值并更新存储数据。
8.根据权利要求5所述的一种进程间通讯数据共享的传输方法,其特征在于:所述通讯模块读取共享内存发送数据模块中的数据包括如下具体步骤:
S21,初始化i=0;
S22,当i<Y时,获取第i个子块的计数器值a(i),否则返回步骤S21;
S23,将当前计数器值a(i)与上一次计数器值a0(i)比较;
S24,当a(i)>a0(i)时,通讯模块从共享内存发送数据模块的子块中读取更新数据;
S25,将a(i)赋值给a0(i);
S26,令i=i+1;
S27,判断通讯模块是否接收到停止指令,如果是结束,否则返回步骤S22;
其中i表示Y个子块中的第i个子块,a0(i)表示共享内存发送数据模块Y个子块中第i个子块的上一次计数器值,a(i)表示共享内存发送数据模块Y个子块中第i个子块的当前计数器值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910851645.9A CN112559196B (zh) | 2019-09-10 | 2019-09-10 | 一种进程间通讯数据共享的传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910851645.9A CN112559196B (zh) | 2019-09-10 | 2019-09-10 | 一种进程间通讯数据共享的传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559196A true CN112559196A (zh) | 2021-03-26 |
CN112559196B CN112559196B (zh) | 2024-03-26 |
Family
ID=75028815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910851645.9A Active CN112559196B (zh) | 2019-09-10 | 2019-09-10 | 一种进程间通讯数据共享的传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559196B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0689137A2 (en) * | 1994-06-22 | 1995-12-27 | International Business Machines Corporation | Message control structure registration method and apparatus for a microkernel data processing system |
CN102609217A (zh) * | 2012-01-13 | 2012-07-25 | 广州从兴电子开发有限公司 | 一种io设备的高速存储方法及系统 |
CN103150220A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 进程间的通信方法和通信系统 |
CN103176852A (zh) * | 2011-12-22 | 2013-06-26 | 腾讯科技(深圳)有限公司 | 一种用于进程间通信的方法及装置 |
US20160132369A1 (en) * | 2014-11-07 | 2016-05-12 | Samsung Electronics Co., Ltd. | Multi-processor device |
WO2016082594A1 (zh) * | 2014-11-26 | 2016-06-02 | 中兴通讯股份有限公司 | 数据更新处理方法及装置 |
CN106126359A (zh) * | 2016-08-25 | 2016-11-16 | 成都交大光芒科技股份有限公司 | 进程间共享数据的快速传输方法 |
CN106293973A (zh) * | 2016-08-17 | 2017-01-04 | 深圳市金证科技股份有限公司 | 无锁消息队列通信方法及系统 |
US20190073316A1 (en) * | 2017-09-05 | 2019-03-07 | NGINX, Inc. | Using Shared Memory To Transport Data Between Server Processes |
-
2019
- 2019-09-10 CN CN201910851645.9A patent/CN112559196B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0689137A2 (en) * | 1994-06-22 | 1995-12-27 | International Business Machines Corporation | Message control structure registration method and apparatus for a microkernel data processing system |
CN103150220A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 进程间的通信方法和通信系统 |
CN103176852A (zh) * | 2011-12-22 | 2013-06-26 | 腾讯科技(深圳)有限公司 | 一种用于进程间通信的方法及装置 |
CN102609217A (zh) * | 2012-01-13 | 2012-07-25 | 广州从兴电子开发有限公司 | 一种io设备的高速存储方法及系统 |
US20160132369A1 (en) * | 2014-11-07 | 2016-05-12 | Samsung Electronics Co., Ltd. | Multi-processor device |
WO2016082594A1 (zh) * | 2014-11-26 | 2016-06-02 | 中兴通讯股份有限公司 | 数据更新处理方法及装置 |
CN106293973A (zh) * | 2016-08-17 | 2017-01-04 | 深圳市金证科技股份有限公司 | 无锁消息队列通信方法及系统 |
CN106126359A (zh) * | 2016-08-25 | 2016-11-16 | 成都交大光芒科技股份有限公司 | 进程间共享数据的快速传输方法 |
US20190073316A1 (en) * | 2017-09-05 | 2019-03-07 | NGINX, Inc. | Using Shared Memory To Transport Data Between Server Processes |
Also Published As
Publication number | Publication date |
---|---|
CN112559196B (zh) | 2024-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102377682B (zh) | 基于定长单元存储变长分组的队列管理方法及设备 | |
EP4220415A2 (en) | Method and apparatus for compressing addresses | |
US20080162860A1 (en) | Dynamic allocation of message buffers | |
JP6763984B2 (ja) | インフィニバンド(IB)上で仮想ホストバスアダプタ(vHBA)を管理およびサポートするためのシステムおよび方法、ならびに単一の外部メモリインターフェイスを用いてバッファの効率的な使用をサポートするためのシステムおよび方法 | |
CN101877666B (zh) | 基于零拷贝方式的多应用程序报文接收方法和装置 | |
US20220066636A1 (en) | Memory system and controlling method | |
CN107783727B (zh) | 一种内存设备的访问方法、装置和系统 | |
JP2015515678A (ja) | テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法 | |
CN110046114B (zh) | 基于pcie协议的dma控制器及dma数据传输方法 | |
EP2219114A1 (en) | Method and apparatus for allocating storage addresses | |
CN113900974B (zh) | 一种存储装置、数据存储方法及相关设备 | |
CN105094691A (zh) | 一种数据操作的方法、设备和系统 | |
CN103942149B (zh) | 用户态程序与内核交互报文的方法及系统 | |
CN113204515B (zh) | Pcie应用层数据接收过程中的流控系统及方法 | |
CN103731364A (zh) | 基于x86平台实现万兆大流量快速收包的方法 | |
CN112559196A (zh) | 一种进程间通讯数据共享的传输方法 | |
CN105117353A (zh) | 带有通用数据交互模块的fpga及采用该fpga的信息处理系统 | |
CN101576865B (zh) | 保证存储器读交易带宽的方法和装置 | |
CN114827151A (zh) | 一种异构服务器集群以及数据转发方法、装置和设备 | |
US20020066000A1 (en) | Transporting data transmission units of different sizes using segments of fixed sizes | |
US20140064300A1 (en) | Data transfer apparatus, data transfer method, and computer-readable recording medium storing data transfer program | |
CN107861887A (zh) | 一种串行易失性存储器的控制方法 | |
CN113709061A (zh) | 一种报文转发的方法和电路 | |
CN114490106A (zh) | 信息交换系统与方法 | |
CN1280731C (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |