1.本发明涉及计算机技术领域,特别是一种基于协议的进程大数据内存共享方法及系统。
背景技术:
2.进程间通讯的方式有很多种,常用的有共享内存、命名管道和匿名管道、发送消息等几种方法来直接完成,另外还可以通过socket口、配置文件和注册表等来间接实现进程间数据通讯任务。以上这几种方法各有优缺点,具体到在进程间进行大数据量数据的快速交换问题上,则可以排除使用配置文件和注册表的方法;另外,由于管道和socket套接字的使用需要有网卡的支持,因此也可以不予考虑。这样,可供选择的通讯方式只剩下共享内存和发送消息两种。在交换数据量较大的情况下实现数据频繁而又快速的交换用发送消息的方法也是不合适的(因为发送消息有同步消息和异步消息两种方法,同步消息就是接收方进程处理完毕接收到的消息才返回结果给发送进程,发送进程可根据进程间返回的通迅结果进行下一步处理,但缺点时容易导致发送进程卡死,消息没返回之前不能进一步处理。异步消息处理则是发送进程发送完消息,不等待结果返回,就进行下一步消息处理,但是无法获取消息的执行结果,无法保证结果的正确性当数据传输过于频繁时将有可能导致数据的丢失。
3.比之以上几种进程间通讯方法,共享内存有着明显的优势。共享内存是通过直接操作内存映射文件来进行的,而内存映射文件又是进行单机数据共享的最低层机制,前面几种数据交换方式在低层都是通过内存映射文件来进行的。因此使用共享内存可以以较小的开销获取较高的性能,是进行大数据量数据快速交换的最佳方案。而且如果进程间需要共享的内存数据过大,比如大过2g很容易造成系统的不稳定。通常操作系统对应用程序是有内存大小限制的,比如32位系统内进程最大处理的内存就是4g。64位操作系统则会多一些,通常一个进程大过3g内存也很容易不稳定造成系统崩溃。缺点是共享内存的同题,这个可以通过好的系统流程解决问题。
技术实现要素:
4.为克服上述问题,本发明的目的是提供一种能够根据用户需要交互的进程间的大数据进行分指令类型,并对其中某个指令的的数据特别占用内存空间部分进行数据分段分任务处理的方法。
5.本发明采用以下方案实现:一种基于协议的进程大数据内存共享方法,所述方法包括以下步骤:
6.步骤s1、使进程a和进程b通信,在进程a和进程b中开辟两个共享内存区,用在读写指令及数据;
7.步骤s2、进程b接收指令线程操作等待进程a发送指令;
8.步骤s3、进程a发送指令线程操作指令进入操作队列;
9.步骤s4、进程b接收进程a发送指令的操作类型,并对指令的类型进行判断;
10.步骤s5、进程b针对进程a发送的指令执行操作,判断该指令是否为中断指令操作,是,则返回步骤s2,否,则执行指令操作;
11.步骤s6、进程b操作结束后,发送完成指令给操作进程a,从而能够实现根据用户需要交互的进程间的大数据进行分指令类型,完成对占用内存空间数据分段分任务进行处理。
12.进一步的,所述步骤s1进一步具体为:通过共享内存区实现进程a和进程b的通信,在进程a和进程b中开辟两个共享内存区,在一个共享内存区内进程a只能写数据,进程b只能读数据,另一个共享内存区内进程a只能读数据,进程b只能写数据。
13.进一步的,所述步骤s3进一步具体为:操作队列为根据进程a发送的指令线程操作具体指令数量。
14.本发明还提供了一种基于协议的进程大数据内存共享系统,包括通信模块、接收模块、发送模块、判断模块、执行模块和完成模块,所述通信模块,即使进程a和进程b通信,在进程a和进程b中开辟两个共享内存区,用在读写指令及数据;所述接收模块,即进程b接收指令线程操作等待进程a发送指令;所述发送模块,即进程a发送指令线程操作指令进入操作队列;所述判断模块,即进程b接收进程a发送指令的操作类型,并对指令的类型进行判断;所述执行模块,即进程b针对进程a发送的指令执行操作,判断该指令是否为中断指令操作,是,则返回步骤s2,否,则执行指令操作;所述完成模块,即进程b操作结束后,发送完成指令给操作进程a,从而能够实现根据用户需要交互的进程间的大数据进行分指令类型,完成对占用内存空间数据分段分任务进行处理。
15.进一步的,所述通信模块进一步具体为:通过共享内存区实现进程a和进程b的通信,在进程a和进程b中开辟两个共享内存区,在一个共享内存区内进程a只能写数据,进程b只能读数据,另一个共享内存区内进程a只能读数据,进程b只能写数据。
16.进一步的,所述发送模块进一步具体为:操作队列为根据进程a发送的指令线程操作具体指令数量。
17.本发明的有益效果在于:本发明能够根据用户需要交互的进程间的大数据进行分指令类型,并对其中某个指令的的数据特别占用内存空间部分进行数据分段分任务处理;由于用了共享内存区域映射技术并加入了共享内存区域映射技术的同步进制,使两个进程能快速准确的共享内容,减少的用户相同的操作,节省了时间,以及发生两次操作产生的错误率问题;保证了一份数据一次修改,两个使用的地方保持了当前的统一的同步信息。
附图说明
18.图1是本发明的方法流程示意图。
19.图2是本发明的系统原理框图。
具体实施方式
20.下面结合附图对本发明做进一步说明。
21.请参阅图1所示,本发明的一种基于协议的进程大数据内存共享方法,所述方法包括以下步骤:
22.步骤s1、使进程a和进程b通信,在进程a和进程b中开辟两个共享内存区,用在读写指令及数据;
23.步骤s2、进程b接收指令线程操作等待进程a发送指令;
24.步骤s3、进程a发送指令线程操作指令进入操作队列;
25.步骤s4、进程b接收进程a发送指令的操作类型,并对指令的类型进行判断;
26.步骤s5、进程b针对进程a发送的指令执行操作,判断该指令是否为中断指令操作,是,则返回步骤s2,否,则执行指令操作;
27.步骤s6、进程b操作结束后,发送完成指令给操作进程a,从而能够实现根据用户需要交互的进程间的大数据进行分指令类型,完成对占用内存空间数据分段分任务进行处理。
28.下面通过一具体实施例对本发明作进一步说明:
29.本发明主要包含以下六个步骤:
30.1、进程a,进程b开劈两个共享内存区1,2,分别用在读写指令及数据;
31.2、进程b接收指令线程操作等待进程a发送指令;
32.3、进程a发送指令线程操作指令进入操作队列;
33.如在进程a中选中一个物件,并进行copy c则表示要准备复制此物件,并把当前要复制的操作合并成一个指令,进入操作队列,则此时操作队列只有一个文件,如果同时选择多个物件,则操作队列中需要复制的指令则有多个。详细的复制指令如”五.具体应用场景例子”的步骤14、进程b接收进程a发送指令的操作类型,并对指令的类型进行判断;
34.指令除了复制,还可以同步选中物件的大小,方向,旋转角度。
35.如定义程序指令结构定义:
[0036][0037][0038]
如在进程a要复制一个物件(对应的文件路径是c:\\1.obj),则发送的指令如下:
[0039][0040]
如要同步选中物件的位置(对应的文件路径是c:\\1.obj),则发送指令如下:
[0041][0042]
5、进程b针对进程a指令做进一步的操作,一般是对数据的操作,也可能是中断本次操作(为了操作随时可中断,数据中加入了数据指令头,每个指令都有);
[0043]
6、如果是为中断指令操作,则在步骤2继续等待下一指令的操作;
[0044]
7、进程b操作结束后,发送完成指令给操作进程a;
[0045]
8、进程a收到进程b发送的完成指令表示进行了一回合的操作。
[0046]
在实际应用中,进程a和进程b是指同一电脑上的两个游戏编辑器,用户多开同款编辑器(同时编辑两个不同的游戏地图),因为游戏中有些相同的部分可以通过编辑器指令同步操作,节省用户重复操作时间。比如一个复杂的游戏中用到的多个房间布景,如在首张地图中需要慢慢布置,花时几天,在新地图中用到同样的布景只需要指令操作一下,同步到另一个地图编辑器即可。
[0047]
下面通过一个例子,说明本发明如何两个游戏地图编辑器的操作进行了优化:
[0048]
例子:打开地图编辑器进程a,并设置好共享内存区1,2,并写入指令到共享内存区1(共享内存区1进程a只写,共享内存区2进程a只读)。
[0049]
打开地图编辑器作为进程b,读入共享内存区1的指令,并解析数据头上的指令,在共享内存区2反馈给进程a,表示同意进程a我已经准备好接收实际指令,你可以开始发送实际要操作的指令了。(进程b设置共享内存区1只读,进程b设置共享内存区2只写)。
[0050]
1.然后在进程a中选中100个物件,假设每个物件关联物件又有15个关联物件(则此时需要操作的物件总数为100*15=1500个物件),然后按ctrl c表示要复制,此时写入指令到内存区1,并对任务总体情况写入到任务队列(包括当前是什么操作(如复制,删除),一共有多少文件
[0051]
2.到进程b按ctrl v,进程b表示我要准备接收数据了,并读入进程a写入的内存区1的数据,解析数据头,知道总任务一共是复制1500个物件。并把准备接收数据指令反馈给进程a(通过写入指令到内存区2)
[0052]
3.进程a接收到进程b可以开始的指令后。则开始拆分任务,并有多少个子任务,及当前是第几个子任务,及任务完成状态,当前任务的文件名,偏移量,数据长度,及真正需要操作的数据,并写入到内存区1
[0053]
4.进程b接收到任务后开始拆分指令头,分析当前的任务,并把数据按指令进行操作,此例子指令是复制文件,则是把数据存成进程b可用的文件。
[0054]
5.重复3,4直到总任务完成
[0055]
6.总任务完成后,进程b反馈给进程a表示任务已经完成
[0056]
7.进程a收到进程b的完成指令后,并把已经完成的子任务移出任务队列,开始下一个任务,如果有下一步操作则从1指令开始。
[0057]
8.进程a任务队列已经清空,本次操作完成。
[0058]
总之,本发明提供一种新的一种基于协议的进程间大数据共享方法和系统,能够根据用户需要交互的进程间的大数据进行分指令类型,并对其中某个指令的的数据特别占用内存空间部分进行数据分段分任务处理。从而实现比如需要从一个游戏地图编辑器拷贝当前的选中地图中的物件进行整体复制。(因为每个物件都是3d而且关联的物件及贴图,音效,特效都很多,所以会需要有非常大的内存,如果一次性复制大量的物件,可能直接造成两个进程间都需要大量有内存,一是会造成两个进行间的卡死,二是会造成内存占用过多可能导致程序崩溃)。
[0059]
请参阅图2所示,本发明还提供了一种基于协议的进程大数据内存共享系统,包括通信模块、接收模块、发送模块、判断模块、执行模块和完成模块,所述通信模块,即使进程a和进程b通信,在进程a和进程b中开辟两个共享内存区,用在读写指令及数据;所述接收模块,即进程b接收指令线程操作等待进程a发送指令;所述发送模块,即进程a发送指令线程操作指令进入操作队列;所述判断模块,即进程b接收进程a发送指令的操作类型,并对指令的类型进行判断;所述执行模块,即进程b针对进程a发送的指令执行操作,判断该指令是否为中断指令操作,是,则返回步骤s2,否,则执行指令操作;所述完成模块,即进程b操作结束后,发送完成指令给操作进程a,从而能够实现根据用户需要交互的进程间的大数据进行分指令类型,完成对占用内存空间数据分段分任务进行处理。
[0060]
所述通信模块进一步具体为:通过共享内存区实现进程a和进程b的通信,在进程a和进程b中开辟两个共享内存区,在一个共享内存区内进程a只能写数据,进程b只能读数据,另一个共享内存区内进程a只能读数据,进程b只能写数据。
[0061]
所述发送模块进一步具体为:操作队列为根据进程a发送的指令线程操作具体指令数量。
[0062]
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与
修饰,皆应属本发明的涵盖范围。
技术特征:
1.一种基于协议的进程大数据内存共享方法,其特征在于,所述方法包括以下步骤:步骤s1、使进程a和进程b通信,在进程a和进程b中开辟两个共享内存区,用在读写指令及数据;步骤s2、进程b接收指令线程操作等待进程a发送指令;步骤s3、进程a发送指令线程操作指令进入操作队列;步骤s4、进程b接收进程a发送指令的操作类型,并对指令的类型进行判断;步骤s5、进程b针对进程a发送的指令执行操作,判断该指令是否为中断指令操作,是,则返回步骤s2,否,则执行指令操作;步骤s6、进程b操作结束后,发送完成指令给操作进程a,从而能够实现根据用户需要交互的进程间的大数据进行分指令类型,完成对占用内存空间数据分段分任务进行处理。2.根据权利要求1所述的一种基于协议的进程大数据内存共享方法,其特征在于:所述步骤s1进一步具体为:通过共享内存区实现进程a和进程b的通信,在进程a和进程b中开辟两个共享内存区,在一个共享内存区内进程a只能写数据,进程b只能读数据,另一个共享内存区内进程a只能读数据,进程b只能写数据。3.根据权利要求1所述的一种基于协议的进程大数据内存共享方法,其特征在于:所述步骤s3进一步具体为:操作队列为根据进程a发送的指令线程操作具体指令数量。4.一种基于协议的进程大数据内存共享系统,其特征在于:包括通信模块、接收模块、发送模块、判断模块、执行模块和完成模块,所述通信模块,即使进程a和进程b通信,在进程a和进程b中开辟两个共享内存区,用在读写指令及数据;所述接收模块,即进程b接收指令线程操作等待进程a发送指令;所述发送模块,即进程a发送指令线程操作指令进入操作队列;所述判断模块,即进程b接收进程a发送指令的操作类型,并对指令的类型进行判断;所述执行模块,即进程b针对进程a发送的指令执行操作,判断该指令是否为中断指令操作,是,则返回步骤s2,否,则执行指令操作;所述完成模块,即进程b操作结束后,发送完成指令给操作进程a,从而能够实现根据用户需要交互的进程间的大数据进行分指令类型,完成对占用内存空间数据分段分任务进行处理。5.根据权利要求4所述的一种基于协议的进程大数据内存共享系统,其特征在于:所述通信模块进一步具体为:通过共享内存区实现进程a和进程b的通信,在进程a和进程b中开辟两个共享内存区,在一个共享内存区内进程a只能写数据,进程b只能读数据,另一个共享内存区内进程a只能读数据,进程b只能写数据。6.根据权利要求4所述的一种基于协议的进程大数据内存共享系统,其特征在于:所述发送模块进一步具体为:操作队列为根据进程a发送的指令线程操作具体指令数量。
技术总结
本发明提供了一种基于协议的进程大数据内存共享方法,所述方法包括以下步骤:步骤S1、使进程A和进程B通信,在进程A和进程B中开辟两个共享内存区,用在读写指令及数据;步骤S2、进程B接收指令线程操作等待进程A发送指令;步骤S3、进程A发送指令线程操作指令进入操作队列;步骤S4、进程B接收进程A发送指令的操作类型,并对指令的类型进行判断;步骤S5、进程B针对进程A发送的指令执行操作,判断该指令是否为中断指令操作,是,则返回步骤S2,否,则执行指令操作;步骤S6、进程B操作结束后,发送完成指令给操作进程A;本发明能够实现根据用户需要交互的进程间的大数据进行分指令类型,完成对占用内存空间数据分段分任务进行处理。用内存空间数据分段分任务进行处理。用内存空间数据分段分任务进行处理。
技术研发人员:刘德建 李佳 张延锋 郑成龙 柳旭辉
受保护的技术使用者:福建天晴在线互动科技有限公司
技术研发日:2022.02.17
技术公布日:2022/5/25
转载请注明原文地址:https://tc.8miu.com/read-11618.html