CN106126359B - 进程间共享数据的快速传输方法 - Google Patents

进程间共享数据的快速传输方法 Download PDF

Info

Publication number
CN106126359B
CN106126359B CN201610721830.2A CN201610721830A CN106126359B CN 106126359 B CN106126359 B CN 106126359B CN 201610721830 A CN201610721830 A CN 201610721830A CN 106126359 B CN106126359 B CN 106126359B
Authority
CN
China
Prior art keywords
data
store
semaphore
transmission
block
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.)
Active
Application number
CN201610721830.2A
Other languages
English (en)
Other versions
CN106126359A (zh
Inventor
鲁云灿
陈奇志
王倩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd
Original Assignee
CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd filed Critical CHENGDU JIAODA GUANGMANG TECHNOLOGY Co Ltd
Priority to CN201610721830.2A priority Critical patent/CN106126359B/zh
Publication of CN106126359A publication Critical patent/CN106126359A/zh
Application granted granted Critical
Publication of CN106126359B publication Critical patent/CN106126359B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/543User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/543Local

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

本发明公开了进程间共享数据的快速传输方法,包括以下步骤:1)对内存进行设计并分为发送数据区和接收数据区;2)根据步骤1)的内存分区进行内存的申请及初始化;3)进行数据的发送;4)进行数据的接收;所述步骤1)包括以下具体步骤:1‑1)数据分类:将传输的数据按数据类型进行分类;1‑2)数据分块:根据分类的数据类型,给每一种数据类型分配一块内存,并形成数据内存块;1‑3)数据分区:将步骤1‑2)所述的内存分成发送数据区和接收数据区;克服现有技术进程间共享数据的传输方法的不足之处,用于传输进程间的共享数据,能够满足在数据量大、数据类型多的数据传输时的实时性要求。

Description

进程间共享数据的快速传输方法
技术领域
本发明涉及数据处理等技术领域,具体的说,是进程间共享数据的快速传输方法。
背景技术
分布式工业监控基础平台分为框架层和服务层。框架层是以数据总线为基础,构建整个基础平台的框架,主要功能是为上层服务或应用提供基础的数据交互。服务层是构建在框架层之上,提供基础平台所需的服务,服务主要有报警及事件、历史存储、业务逻辑、授权、数据交换与共享和数据采集服务。
分布式工业监控基础平台是由多个功能模块组成,并且它们运行在本机不同的进程中,进程的用户空间是互相独立的,然而分布式工业监控基础平台对数据的实时性要求很高,很多共享数据需要在不同的进程间传输,提高共享数据的传输效率是很有必要的。
现有技术进程间共享数据的传输方法主要有管道、信号量、套接字和共享内存。
管道是一种半双工的通信方式,数据只能单向流动。无名管道可用于具有亲缘关系进程间的数据通信;有名管道克服了没有管道名字的限制,因此除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段。
套接字是一种进程间通信机制,它是把数据发送到网络,其它的进程再从网络上去获取数据,与其他通信机制不同的是,它可用于不同机器间的进程通信。
共享内存是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,它是针对其他进程间通信方式运行效率低而专门设计的。
现有技术进程间的数据传输大多都采用管道或者套接字作为低层数据的方法,其优点主要是可以在本机或者局域网中传输,并且编写程序比较简单,操作系统直接提供了API函数,程序直接调用API函数完成数据的传输;其缺点传输的效率比较低,传输数据时需要先把传输的数据序列化为二进制数据,再调用系统API函数操作I/O把数据发送出去,另外的进程再从相应的系统API函数获得二进制数据再反序列化成数据对象。采用这些方法的数据传输的层级比较多,同时要需要操作I/O,从而降低了数据的传输速度。
共享内存的传输方法不能在局域网中传输数据,但是在本机的进程间传输的效率很高。然而,共享内存在使用时不能超出了共享内存的大小,如果超出共享内存的大小会把其它的数据给覆盖,从而导致读取的数据错误或者程序出现异常;同一个共享内存块不能同时传输不同类型的数据;同时写入共享内存块的数据必须要等另一进程把数据读走后才能再写入,不然数据就会被覆盖,但是共享内存没有相应通知机制。由于共享内存有诸多限制在使用时很不方便容易出错。
对于分布式工业监控基础平台需要传输数据的实时性要求很高,而且数据量大,数据类型比较多,从而上述方法不适合本系统。需要根据系统特点采用一种新的方法来传输进程间的共享数据。
发明内容
本发明的目的在于提供进程间共享数据的快速传输方法,克服现有技术进程间共享数据的传输方法的不足之处,用于传输进程间的共享数据,能够满足在数据量大、数据类型多的数据传输时的实时性要求。
本发明通过下述技术方案实现:进程间共享数据的快速传输方法,包括以下步骤:
1)对内存进行设计并分为发送数据区和接收数据区;
2)根据步骤1)的内存分区进行内存的申请及初始化;
3)进行数据的发送;
4)进行数据的接收。
进一步的为更好的实现本发明,特别采用下述设置方式:所述步骤1)包括以下具体步骤:
1-1)数据分类:将传输的数据按数据类型进行分类;
1-2)数据分块:根据分类的数据类型,给每一种数据类型分配一块内存,并形成数据内存块;
1-3)数据分区:将步骤1-2)所述的内存分成发送数据区和接收数据区;为了快速的传输数据把发送的数据和接收的数据在内存中分为两个数据区,一个数据区(发送数据区)用于存放本进程发送的数据,另一个数据区(接收数据区)用于存放本进程接收的数据。
进一步的为更好的实现本发明,特别采用下述设置方式:所述数据内存块包括4块数据,其中,第一块数据用来存放访问本数据内存块的互斥锁(用英文字母Mutex表示);第二块数据用来存放已经存放数据量的信号量(用英文字母Store表示);第三块数据为用来存放可存放数据量的信号量(用英文字母Empty表示);第四块为数据存放的缓存区(用英文字母Vector表示),在缓存区内存储的是本类型的共享数据。
进一步的为更好的实现本发明,特别采用下述设置方式:所述步骤2)包括以下具体步骤:
2-1)确定数据类型:确定进程间要共享的数据类型,并根据数据的流向对发送的数据类型和接收的数据类型进行统计,统计发送的数据类型和接收的数据类型;
2-2)计算申请数据内存块大小:根据数据类型确认数据的大小和数据存储的个数,而后确定数据内存块中数据缓存的大小;
2-3)申请内存:根据所有数据类型的数据内存块大小之和,申请内存区并用作数据区,而后按照数据类型依次分配给每一种数据类型一块数据内存块;
2-4)初始化:对数据区进行初始化操作。
进一步的为更好的实现本发明,特别采用下述设置方式:所述数据内存块的大小=数据存储个数*数据大小+互斥锁大小+两个信号量大小;如果数据的长度(数据大小)为可变长度按最大长度来确认。
进一步的为更好的实现本发明,特别采用下述设置方式:所述申请数据内存块大小=数据内存块的大小*(1+10%)。
为了使数据的访问安全而不越界,在计算数据内存块的大小再增加10%作为防错数据块,既得申请数据内存块大小=数据内存块的大小*(1+10%)。
进一步的为更好的实现本发明,特别采用下述设置方式:所述数据区包括发送数据区和接收数据区;在发送数据区,用于本进程发送数据的共享内存区的名称定义为“接收进程名称_本进程名称”;在接收数据区,用于本进程接收数据的共享内存区的名称定义为“本进程名称_接收进程名称”;在每个数据区中的每一块数据内存块的名称为数据类型的名称。
进一步的为更好的实现本发明,特别采用下述设置方式:所述步骤2-4)包括以下步骤:
2-4-1)根据每一种数据类型的数据缓存所能存储的数据个数来设置可存放数据量的信号量的初始值;当可存放数据量的信号量为0时写入数据的进程被挂起,当可存放数据量的信号量为设置的缓存数据个数的最大值时读取数据的进程被挂起;
2-4-2)对已经存放数据量的信号量的初始值进行设置且设置为0;当已经存放数据量的信号量为0时读取数据的进程被挂起,当已经存放数据量的信号量为可存放数据量的信号量设置的最大值时写入数据的进程被挂起;
2-4-3)设置访问本数据内存块的互斥锁的初始值;Mutex是数据类型块中数据缓存的锁,那个进程先拿到就可以操作数据缓存。
进一步的为更好的实现本发明,特别采用下述设置方式:所述步骤3)包括以下步骤:
3-1)根据发送的数据获得发送数据类型;
3-2)根据发送数据和接收数据的进程名称找到发送数据区;
3-3)根据步骤3-1)的发送数据类型,在步骤3-2)的发送数据区中找到该发送数据类型的数据内存块;
3-4)根据步骤3-3)获得可存放数据量的信号量,再可存放数据量的信号量Empyt.wait()操作,如果操作立即返回到步骤3-5),否则一直等待操作返回;
3-5)根据步骤3-3)获得访问本数据内存块的互斥锁,再访问本数据内存块的互斥锁Mutex.lock()操作,如果操作立即返回到步骤3-6),否则一直等待操作返回;
3-6)把发送的数据写入该发送数据类型的发送数据区的数据缓存中;即Vector.push_back()发送的数据,再Mutex.unlock()操作释放锁;
3-7)根据步骤3-3)获得已经存放数据量的信号量,再已经存放数据量的信号量Store.post()操作,把读取步骤3-6)所述数据缓存的数据加1,并通知等待读取该内存块的接收进程读取数据;
3-8)返回步骤3-1),发送下一条数据。
进一步的为更好的实现本发明,特别采用下述设置方式:所述步骤4)包括以下具体步骤:
4-1)根据发送数据进程名称找到接收数据区;
4-2)根据步骤4-1)读取数据类型的数据内存块到步骤4-3),如果所有数据类型的数据区都读取完成后等待100ms再循环步骤4-2);
4-3)根据步骤4-2)获得已经存放数据量的信号量,再已经存放数据量的信号量Store.try_wait()操作;当操作返回true,则数据缓存中有数据可以读取到步骤4-4);否则返回false,即没有数据能够读取,返回到步骤4-2);
4-4)根据步骤4-3)获得访问本数据内存块的互斥锁,再访问本数据内存块的互斥锁Mutex.lock()操作,如果操作立即返回到步骤4-5),否则一直等待操作返回;
4-5)读取数据类型区的数据缓存中的数据并清除缓存的数据;每读取一个数据可存放数据量的信号量进行可存放数据量的信号量Empty.post()操作,把写入该数据缓存的数据加1,并通知等待写入该数据内存块的发送进程写入数据;同时每读取一个数据已经存放数据量的信号量进行已经存放数据量的信号量Store.wait()操作已存储数减1;读取完成后到步骤4-6);
4-6)根据步骤4-2)获得访问本数据内存块的互斥锁,再访问本数据内存块的互斥锁Mutex.unlock()操作,解锁读取数据内存块的锁,再返回到步骤4-2)。
本发明与现有技术相比,具有以下优点及有益效果:
本发明克服现有技术进程间共享数据的传输方法的不足之处,用于传输进程间的共享数据,能够满足在数据量大、数据类型多的数据传输时的实时性要求。
本发明在设计内存可以根据传输数据类型分开传输数据,同时可以根据数据类型传送数据频繁度来设置数据缓存的大小,简化了传输和数据的处理过程。
本发明在写入数据缓存和读取数据缓存时采用了信号量的通知机制,提高数据传输的效率,同时也提高了CPU的使用效率,无数据操作时可处理其它事务。
本发明在读取数据缓存时一次性读取完所有的数据减少了对数据缓存锁的占用时间。
本发明在读取数据时采用try_wait()操作来检查数据缓存中是否有数据,如果没有就读取下一种数据类型的数据,从而让进程不必等待,大大提高数据的处理效率。
本发明在内存设计中增加了防错区,防止可能意外出现的错误。
附图说明
图1为本发明设计的内存数据结构示意图。
图2为本发明所述的数据的发送流程图。
图3为本发明所述的数据的接收流程图。
图4为本发明进行数据采集进程的内存设计图。
具体实施方式
下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
名词解释:
“Mutex”指的是访问本数据内存块的互斥锁;
“Store”指的是已经存放数据量的信号量;
“Empty”指的是可存放数据量的信号量;
“Vector”用于表示数据存放的缓存区。
实施例1:
进程间共享数据的快速传输方法,克服现有技术进程间共享数据的传输方法的不足之处,用于传输进程间的共享数据,能够满足在数据量大、数据类型多的数据传输时的实时性要求,如图1-4所示,包括以下步骤:
1)对内存进行设计并分为发送数据区和接收数据区;
2)根据步骤1)的内存分区进行内存的申请及初始化;
3)进行数据的发送;
4)进行数据的接收。
在设计内存可以根据传输数据类型分开传输数据,同时可以根据数据类型传送数据频繁度来设置数据缓存的大小,简化了传输和数据的处理过程。
实施例2:
本实施例是在上述实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述步骤1)包括以下具体步骤:
1-1)数据分类:为了数据的传输方便把传输的数据按数据类型进行分类;
1-2)数据分块:根据分类的数据类型,给每一种数据类型分配一块内存,并形成数据内存块;
1-3)数据分区:为了快速的传输数据把发送的数据和接收的数据在内存中分为两个数据区(发送数据区和接收数据区),一个数据区(发送数据区)用于存放本进程发送的数据,另一个数据区(接收数据区)用于存放本进程接收的数据。
在设计使用时,将内存设计的数据结构设计为图1所示的内存数据结构。
实施例3:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述数据内存块包括4块数据,其中,第一块数据为访问本数据内存块的Mutex(互斥锁);第二块数据为已经存放多少数据的Store(信号量);第三块数据为可以再存放多少数据的Empty(信号量);第四块为数据存放的缓存区Vector,在缓存区Vector内存储的是本类型的共享数据。
实施例4:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述步骤2)包括以下具体步骤:
2-1)确定数据类型:确定进程间要共享的数据类型,并根据数据的流向对发送的数据类型和接收的数据类型进行统计;
2-2)计算申请数据内存块大小:根据数据类型确认数据的大小和数据存储的个数,而后确定数据内存块中数据缓存的大小;
2-3)申请内存:根据所有数据类型的数据内存块大小之和,申请内存区并用作数据区(发送数据区或接收数据区),而后按照数据类型依次分配给每一种数据类型一块数据内存块;
2-4)初始化:对数据区进行初始化操作。
实施例5:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述数据内存块的大小=数据存储个数*数据大小+互斥锁大小+两个信号量大小;如果数据的长度(数据大小)为可变长度按最大长度来确认。
实施例6:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述申请数据内存块大小=数据内存块的大小*(1+10%)。
为了使数据的访问安全而不越界,在计算数据内存块的大小再增加10%作为防错数据块,既得申请数据内存块大小=数据内存块的大小*(1+10%)。
实施例7:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述数据区包括发送数据区和接收数据区;为了操作的方便给每个数据区命名,在发送数据区,用于本进程发送数据的共享内存区的名称定义为“接收进程名称_本进程名称”;在接收数据区,用于本进程接收数据的共享内存区的名称定义为“本进程名称_接收进程名称”;在每个数据区中的每一块数据内存块的名称为数据类型的名称。
实施例8:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述步骤2-4)包括以下步骤:
2-4-1)根据每一种数据类型的数据缓存所能存储的数据个数来设置Empty(信号量)的初始值;当Empty为0时写入数据的进程被挂起,当Empty为设置的最大值时读取数据的进程被挂起;Empty(信号量)表示数据缓存中还可以存储多少个数据,当信号量为0时写入数据的进程被挂起,当信号量为设置缓存数据个数的最大值时读取数据的进程被挂起;
2-4-2)对Store的初始值进行设置且设置为0;当Store为0时读取数据的进程被挂起,当Store为Empty设置的最大值时写入数据的进程被挂起;Store(信号量)表示数据缓存中可以读取多少个数据,其初始值为0,当Store(信号量)为0时读取数据的进程被挂起,当Store(信号量)为Empty(信号量)设置的最大值时写入数据的进程被挂起。
2-4-3)设置Mutex的初始值;Mutex(互斥锁)是数据类型块中数据缓存的锁,那个进程先拿到就可以操作数据缓存。
实施例9:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述步骤3)包括以下步骤:
3-1)根据发送的数据获得发送数据类型;
3-2)根据发送数据和接收数据的进程名称找到发送数据区;
3-3)根据步骤3-1)的发送数据类型,在步骤3-2)的发送数据区中找到该发送数据类型的数据内存块;
3-4)根据步骤3-3)获得Empty(信号量),再Empty.wait()操作,如果操作立即返回到步骤3-5),否则一直等待操作返回;
3-5)根据步骤3-3)获得Mutex(互斥锁),再Mutex.lock()操作,如果操作立即返回到步骤3-6),否则一直等待操作返回;
3-6)把发送的数据写入该发送数据类型的发送数据区的数据缓存中;即Vector.push_back()发送的数据,再Mutex.unlock()操作释放锁;
3-7)根据步骤3-3)获得Store(信号量),再Store.post()操作,把读取步骤3-6)所述数据缓存的数据加1,并通知等待读取该内存块的接收进程读取数据;
3-8)返回步骤3-1),发送下一条数据。
或简单来说如图3所示,进程发送数据,根据接收数据的进程名称,获取发送数据内存区(即找到发送数据区),根据发送数据类型,存储到数据类型的内存块(即存储到该发送数据类型的数据内存块),判断内存块Empty.wait()操作,含等待或返回两种操作;上步返回后或等待或判断内存块Mutex.Lock(),当判断内存块Mutex.Lock()后返回时,发送的数据写入数据块(发送数据区)的数据缓存Vector.push_back();再进行Mutex.unlock()解锁操作;通知读取进程读取数据Store.post(),发送下一个数据。
实施例10:
本实施例是在上述任一实施例的基础上进一步优化,进一步的为更好的实现本发明,如图1-4所示,特别采用下述设置方式:所述步骤4)包括以下具体步骤:
4-1)根据发送数据进程名称找到接收数据区;
4-2)根据步骤4-1)读取数据类型的数据内存块到步骤4-3),如果所有数据类型的数据区都读取完成后等待100ms再循环步骤4-2);
4-3)根据步骤4-2)获得Store(信号量),再Store.try_wait()操作;当操作返回true,则数据缓存中有数据可以读取到步骤4-4);否则返回false,即没有数据能够读取,返回到步骤4-2);
4-4)根据步骤4-3)获得Mutex(互斥锁),再Mutex.lock()操作,如果操作立即返回到步骤4-5),否则一直等待操作返回;
4-5)读取数据类型区的数据缓存中的数据并清除缓存的数据;每读取一个数据Empty(信号量)进行Empty.post()操作,把写入该数据缓存的数据加1,并通知等待写入该数据内存块的发送进程写入数据;同时每读取一个数据Store(信号量)进行Store.wait()操作已存储数减1;读取完成后到步骤4-6);
4-6)根据步骤4-2)获得Mutex(互斥锁),再Mutex.unlock()操作,解锁读取数据内存块的锁,再返回到步骤4-2)。
或简单来说如图4所示,进程读取数据,发送数据进程名,读取数据内存区,是否读取完所有数据类型的内存区(所有数据类型的数据区),若为YES则暂停100MS,而后进行进程读取数据;若为NO,则获取数据类型数据块,获得Store(信号量),Store.try_wait(),当YES时,获得Mutex(互斥锁)或等待,或Mutex.lock();返回,并读取缓存中的所有数据,每读取一个数据Empty(信号量)进行Empty.post()操作可存储数加1,每读取一个数据Store(信号量)进行Store.wait()操作已存储数减1;而后Mutex.unlock()解锁操作,或进行是否读取完所有数据类型的内存区的检测,或NO,进入Store.try_wait()。
实施例11:
本实施例是在上述任一实施例的基础上进一步优化,进程间共享数据的快速传输方法,结合图1-图4所示,在设计使用时,分布式工业监控基础平台中有数据采集和数据转换两个模块,它们以单独的进程运行在本机,它们之间有大量的实时数据需要传输,其中数据采集模块用于与RTU设备进行通信并采集数据,进程名称为DPLIEC104Master;数据转换模块用于接收数据采集模块的数据并缓存同时分发给客户端,进程名称为PluginGMBPDIM;两个模块中传输的数据类型有6种分别是BOOL、Int、Uint、R4、BST和COMMAND;发送数据区和接收数据区分别申请了12M的内存空间,其中每种数据类型占用2M的内存空间;对于数据采集进程而言其发送数据区的名称为PluginGMBPDIM_DPLIEC104Master,接收数据区的名称为DPLIEC104Master_PluginGMBPDIM;对于数据转换进程而言其发送和接收刚好相反,发送数据区的名称为DPLIEC104Master_PluginGMBPDIM,接收数据区的名称为PluginGMBPDIM_DPLIEC104Master。数据类型块的名称为数据类型的名称。其中BOOL、Int、Uint和R4数据类型的数据块缓存可存储5000个,BST和COMMAND数据类型的数据是可变的且数据较大,所以数据块缓存可存储500个,数据采集和数据转换进程的内存设计(数据采集进程的内存设计图)如图4所示。
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。

Claims (7)

1.进程间共享数据的快速传输方法,其特征在于:包括以下步骤:
1)对内存进行设计并分为发送数据区和接收数据区,包括以下具体步骤:
1-1)数据分类:将传输的数据按数据类型进行分类;
1-2)数据分块:根据分类的数据类型,给每一种数据类型分配一块内存,并形成数据内存块;
1-3)数据分区:将步骤1-2)所述的内存分成发送数据区和接收数据区;
2)根据步骤1)的内存分区进行内存的申请及初始化,包括以下具体步骤:
2-1)确定数据类型:确定进程间要共享的数据类型,并根据数据的流向对发送的数据类型和接收的数据类型进行统计;
2-2)计算申请数据内存块大小:根据数据类型确认数据的大小和数据存储的个数,而后确定数据内存块中数据缓存的大小;
2-3)申请内存:根据所有数据类型的数据内存块大小之和,申请内存区并用作数据区,而后按照数据类型依次分配给每一种数据类型一块数据内存块;
2-4)初始化:对数据区进行初始化操作;
3)进行数据的发送,包括以下步骤:
3-1)根据发送的数据获得发送数据类型;
3-2)根据发送数据和接收数据的进程名称找到发送数据区;
3-3)根据步骤3-1)的发送数据类型,在步骤3-2)的发送数据区中找到该发送数据类型的数据内存块;
3-4)根据步骤3-3)获得可存放数据量的信号量,再可存放数据量的信号量Empyt.wait()操作,如果操作立即返回到步骤3-5),否则一直等待操作返回;
3-5)根据步骤3-3)获得访问本数据内存块的互斥锁,再访问本数据内存块的互斥锁Mutex.lock()操作,如果操作立即返回到步骤3-6),否则一直等待操作返回;
3-6)把发送的数据写入该发送数据类型的发送数据区的数据缓存中;
3-7)根据步骤3-3)获得已经存放数据量的信号量,再已经存放数据量的信号量Store.post()操作,把读取步骤3-6)所述数据缓存的数据加1,并通知等待读取该内存块的接收进程读取数据;
3-8)返回步骤3-1),发送下一条数据;
4)进行数据的接收。
2.根据权利要求1所述的进程间共享数据的快速传输方法,其特征在于:所述数据内存块包括4块数据,其中,第一块数据用来存放访问本数据内存块的互斥锁;第二块数据用来存放已经存放数据量的信号量;第三块数据为用来存放可存放数据量的信号量;第四块为数据存放的缓存区,在缓存区内存储的是本类型的共享数据。
3.根据权利要求1所述的进程间共享数据的快速传输方法,其特征在于:所述数据内存块的大小=数据存储个数*数据大小+互斥锁大小+两个信号量大小。
4.根据权利要求3所述的进程间共享数据的快速传输方法,其特征在于:所述申请数据内存块大小=数据内存块的大小*(1+10%)。
5.根据权利要求1所述的进程间共享数据的快速传输方法,其特征在于:所述数据区包括发送数据区和接收数据区;在发送数据区,用于本进程发送数据的共享内存区的名称定义为“接收进程名称_本进程名称”;在接收数据区,用于本进程接收数据的共享内存区的名称定义为“本进程名称_接收进程名称”;在每个数据区中的每一块数据内存块的名称为数据类型的名称。
6.根据权利要求1所述的进程间共享数据的快速传输方法,其特征在于:所述步骤2-4)包括以下步骤:
2-4-1)根据每一种数据类型的数据缓存所能存储的数据个数来设置可存放数据量的信号量的初始值;当可存放数据量的信号量为0时写入数据的进程被挂起,当可存放数据量的信号量为设置的缓存数据个数的最大值时读取数据的进程被挂起;
2-4-2)对已经存放数据量的信号量的初始值进行设置且设置为0;当已经存放数据量的信号量为0时读取数据的进程被挂起,当已经存放数据量的信号量为可存放数据量的信号量设置的最大值时写入数据的进程被挂起;
2-4-3)设置访问本数据内存块的互斥锁的初始值。
7.根据权利要求1所述的进程间共享数据的快速传输方法,其特征在于:所述步骤4)包括以下具体步骤:
4-1)根据发送数据进程名称找到接收数据区;
4-2)根据步骤4-1)读取数据类型的数据内存块到步骤4-3),如果所有数据类型的数据区都读取完成后等待100ms再循环步骤4-2);
4-3)根据步骤4-2)获得已经存放数据量的信号量,再已经存放数据量的信号量Store.try_wait()操作;当操作返回true,则数据缓存中有数据可以读取到步骤4-4);否则返回false,即没有数据能够读取,返回到步骤4-2);
4-4)根据步骤4-3)获得访问本数据内存块的互斥锁,再访问本数据内存块的互斥锁Mutex.lock()操作,如果操作立即返回到步骤4-5),否则一直等待操作返回;
4-5)读取数据类型区的数据缓存中的数据并清除缓存的数据;每读取一个数据可存放数据量的信号量进行可存放数据量的信号量Empty.post()操作,把写入该数据缓存的数据加1,并通知等待写入该数据内存块的发送进程写入数据;同时每读取一个数据已经存放数据量的信号量进行已经存放数据量的信号量Store.wait()操作已存储数减1;读取完成后到步骤4-6);
4-6)根据步骤4-2)获得访问本数据内存块的互斥锁,再访问本数据内存块的互斥锁Mutex.unlock()操作,解锁读取数据内存块的锁,再返回到步骤4-2)。
CN201610721830.2A 2016-08-25 2016-08-25 进程间共享数据的快速传输方法 Active CN106126359B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610721830.2A CN106126359B (zh) 2016-08-25 2016-08-25 进程间共享数据的快速传输方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610721830.2A CN106126359B (zh) 2016-08-25 2016-08-25 进程间共享数据的快速传输方法

Publications (2)

Publication Number Publication Date
CN106126359A CN106126359A (zh) 2016-11-16
CN106126359B true CN106126359B (zh) 2019-10-18

Family

ID=57274481

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610721830.2A Active CN106126359B (zh) 2016-08-25 2016-08-25 进程间共享数据的快速传输方法

Country Status (1)

Country Link
CN (1) CN106126359B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107992368A (zh) * 2017-11-15 2018-05-04 国家计算机网络与信息安全管理中心 一种多进程间的数据交换方法和系统
CN109117268A (zh) * 2018-07-20 2019-01-01 首钢集团有限公司 一种轧机控制系统通信中间件的实现方法和装置
CN112559196B (zh) * 2019-09-10 2024-03-26 航天科工惯性技术有限公司 一种进程间通讯数据共享的传输方法
CN111338583B (zh) * 2020-05-19 2020-08-25 北京数字绿土科技有限公司 一种高频数据存储方法、装置、计算机
CN111858258A (zh) * 2020-07-29 2020-10-30 浪潮电子信息产业股份有限公司 一种内存监控方法、装置及电子设备和存储介质
CN112506676B (zh) * 2020-12-02 2024-04-05 深圳市广和通无线股份有限公司 进程间的数据传输方法、计算机设备和存储介质
CN112506684A (zh) * 2021-02-05 2021-03-16 全时云商务服务股份有限公司 一种跨进程快速传送大数据的方法、系统及存储介质
CN114610506B (zh) * 2022-03-09 2023-03-24 奥特酷智能科技(南京)有限公司 基于分离式数据分发服务的域内共享内存传输架构及机制

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1928825A (zh) * 2005-09-09 2007-03-14 腾讯科技(深圳)有限公司 一种服务器的实现方法以及服务器系统
CN101853238A (zh) * 2010-06-01 2010-10-06 华为技术有限公司 通信处理器间消息通信方法和系统
CN103218174A (zh) * 2013-03-29 2013-07-24 航天恒星科技有限公司 一种用于遥感图像的io双缓存交互多核处理方法
CN103376772A (zh) * 2012-04-27 2013-10-30 沈阳高精数控技术有限公司 一种嵌入式数控系统性能监测的方法
CN105335155A (zh) * 2015-10-20 2016-02-17 华东师范大学 一种仅需配置云端脚本即可实现不同IoT应用的方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030084196A1 (en) * 2001-11-01 2003-05-01 Chang Cheng Tsung Message passing method for computer system
US8667504B2 (en) * 2008-06-20 2014-03-04 Netapp, Inc. System and method for achieving high performance data flow among user space processes in storage system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1928825A (zh) * 2005-09-09 2007-03-14 腾讯科技(深圳)有限公司 一种服务器的实现方法以及服务器系统
CN101853238A (zh) * 2010-06-01 2010-10-06 华为技术有限公司 通信处理器间消息通信方法和系统
CN103376772A (zh) * 2012-04-27 2013-10-30 沈阳高精数控技术有限公司 一种嵌入式数控系统性能监测的方法
CN103218174A (zh) * 2013-03-29 2013-07-24 航天恒星科技有限公司 一种用于遥感图像的io双缓存交互多核处理方法
CN105335155A (zh) * 2015-10-20 2016-02-17 华东师范大学 一种仅需配置云端脚本即可实现不同IoT应用的方法

Also Published As

Publication number Publication date
CN106126359A (zh) 2016-11-16

Similar Documents

Publication Publication Date Title
CN106126359B (zh) 进程间共享数据的快速传输方法
CN101996147B (zh) 一种双口ram互斥访问的实现方法
CN1133943C (zh) 高速远程存储簇接口控制器
CN111190553B (zh) 使用混合存储器立方体链路的互连系统及方法
CN104050091B (zh) 基于非一致性内存访问系统的网络设备及其设置方法
CN102904729B (zh) 根据协议、端口分流支持多应用的智能加速网卡
CN103827842B (zh) 向控制器存储器空间写入消息
CN103914399B (zh) 一种并行计算系统中的磁盘缓存方法及装置
CN103765380B (zh) 用于事件的安全排队的方法和系统
CN102064977A (zh) 基于gpu的高速网络报文内容检测方法
CN107124286A (zh) 一种海量数据高速处理、交互的系统及方法
CN106095604A (zh) 一种多核处理器的核间通信方法及装置
CN112035388B (zh) 一种基于PCI-e通道的高性能加解密方法
CN107357648A (zh) 一种多核cpu访问资源时自旋锁的实现方法
CN106372008B (zh) 一种数据缓存方法及装置
CN102724035A (zh) 一种加密卡的加解密方法
US9400692B2 (en) System and method for managing the allocating and freeing of objects in a multi-threaded system
CN103731364B (zh) 基于x86平台实现万兆大流量快速收包的方法
CN103488717A (zh) 一种无锁数据汇聚方法及装置
CN104094241B (zh) 一种传达与高速缓存相干性相关的信息的方法及系统
US9304706B2 (en) Efficient complex network traffic management in a non-uniform memory system
CN104461957A (zh) 一种异构多核cpu共享片上高速缓存的方法及装置
CN103093446A (zh) 基于多处理器片上系统的多源图像融合装置和方法
CN105094993B (zh) 一种多核处理器、数据同步的方法及装置
CN109525510A (zh) 一种处理数据的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant