CN117931465A - 一种数据传输方法及相关装置 - Google Patents
一种数据传输方法及相关装置 Download PDFInfo
- Publication number
- CN117931465A CN117931465A CN202211267135.5A CN202211267135A CN117931465A CN 117931465 A CN117931465 A CN 117931465A CN 202211267135 A CN202211267135 A CN 202211267135A CN 117931465 A CN117931465 A CN 117931465A
- Authority
- CN
- China
- Prior art keywords
- data
- storage area
- memory
- node
- nodes
- 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/544—Buffers; Shared memory; Pipes
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
本申请公开了一种数据传输方法及相关装置。发送进程在共享内存中确定第一存储区域,该第一存储区域包括多个节点。发送进程获取该多个节点的节点信息,基于节点信息将任务数据分为多个数据段,并将该多个数据段并行写入第一存储区域的多个节点中。每个节点中存储的数据不同。在向第一存储区域写入任务数据时,发送进程获取任务数据的索引标识,索引标识用于表征第一存储区域在共享内存中的位置。发送进程可以通过进程间通信将任务数据的索引标识传输给接收进程。接收进程基于该索引标识获取第一存储区域中的任务数据。这样,当进行跨进程数据传输时,进程之间只需要传递索引标识,可以提高传输效率。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种数据传输方法及相关装置。
背景技术
随着通信技术的发展,人们日常生活与通信的联系愈发紧密,需要电子设备处理的信息也越来越多。在处理繁多的信息时,不仅需要不同电子设备之间进行通信,还需要电子设备中的不同进程之间进行通信。
当电子设备中的不同进程进行通信时,发送数据的进程要将数据拷贝到parcel中,再通过进程间通信(interprocess communication,IPC)将parcel传输给接收进程。接收进程再将数据从parcel中拷贝到接收进程的进程空间。
采用上述方法虽然可以实现进程间通信,但是在传输过程繁琐,数据的传输效率不高。
发明内容
本申请提供了一种数据传输方法及相关装置,实现了跨进程数据传输,提高了数据传输效率。
第一方面,本申请提供了,一种数据传输方法,应用于第一电子设备,第一电子设备包括第一进程、第二进程和共享内存,共享内存中包括第一存储区域,第一存储区域包括多个连续的节点;其特征在于,方法包括:第一进程获取第一存储区域的第一节点信息,第一节点信息包括第一存储区域中每个节点的起始地址和内存大小;第一进程基于第一节点信息对第一任务数据执行预处理操作,确定多个数据段;第一进程将多个数据段并行写入第一存储区域的多个节点,第一存储区域的每个节点写入的数据段不同;第一进程将第一任务数据的第一索引标识通过进程间通信IPC传递给第二进程,第一索引标识用于表征第一存储区域在共享内存中的位置;第二进程基于第一索引标识获取第一存储区域中的第一任务数据。
这样,可以提高跨进程数据的传输效率。
在一种可能的实现方式中,当多个数据段的数目多于多个节点的数目时,方法还包括:第一进程确定填缝数据,填缝数据包括多个数据段中未写入第一存储区域的一个或多个数据段;第一进程基于多个节点的数据填充情况确定多个节点中空白缝隙的存储信息,空白缝隙的存储信息包括第一存储区域中的每个空白缝隙的地址和内存大小,空白缝隙为每个节点中未填充数据的区域;第一进程基于空白缝隙的存储信息将填缝数据写入一个或多个空白缝隙。
这样,可以提高第一存储区域中内存的使用效率。
在一种可能的实现方式中,第一进程基于空白缝隙的存储信息将填缝数据写入一个或多个空白缝隙,具体包括:第一进程确定填缝数据中每个数据段的数据类型;第一进程基于空白缝隙的存储信息确定每个空白缝隙的数据类型标签,数据类型标签用于指示空白缝隙与数据类型的对应关系;第一进程基于填缝数据的数据类型、空白缝隙的数据类型标签和空白缝隙的存储信息将填缝数据填充到空白缝隙。
这样,可以提高填缝数据的填充效率。
在一种可能的实现方式中,多个节点的内存大小相同。
这样,可以方便对第一存储区域的节点进行管理。
在一种可能的实现方式中,第一任务数据包括多个数据单元,第一任务数据的多个数据单元包括第一数据单元、第二数据单元和第三数据单元;第一存储区域包括多个内存页,多个内存页包括第一内存页和第二内存页;第一进程将多个数据段并行写入第一存储区域的多个节点,具体包括:在第一时间,第一进程将第一数据单元的多个数据段并行写入第一内存页的多个节点;在第三时间,第一进程将第二数据单元的多个数据段并行写入第二内存页的多个节点;在第五时间,第一进程将第三数据单元的多个数据段并行写入第一内存页的多个节点;其中,第五时间晚于第三时间,第三时间晚于第一时间。
这样可以提高第一存储区域中内存的使用效率,还可以提高数据传输效率。
在一种可能的实现方式中,第二进程获取第一存储区域中的第一任务数据,具体包括:在第二时间,第二进程获取第一内存页中的第一数据单元;在第四时间,第二进程获取第二内存页中的第二数据单元;在第六时间,第二进程获取第一内存页中的第三数据单元;其中,第六时间晚于第五时间,第四时间晚于第三时间,第二时间晚于第一时间,第五时间晚于第二时间。
在一种可能的实现方式中,第一进程基于第一节点信息对第一任务数据执行预处理操作,确定多个数据段,具体包括:在第一时间之前,第一进程基于第一节点信息对第一数据单元执行预处理操作,确定第一数据单元的多个数据段;在第三时间之前,第一进程基于第一节点信息对第二数据单元执行预处理操作,确定第一数据单元的多个数据段;在第五时间之前,第一进程基于第一节点信息对第三数据单元执行预处理操作,确定第一数据单元的多个数据段。
在一种可能的实现方式中,第二进程获取第一内存页中的第一数据单元,具体包括:第二进程并行读取第一内存页中多个节点的第一数据单元的多个数据段;第二进程获取第二内存页中的第二数据单元,具体包括:第二进程并行读取第二内存页中多个节点的第二数据单元的多个数据段;第二进程获取第一内存页中的第三数据单元,具体包括:第二进程并行读取第一内存页中多个节点的第三数据单元的多个数据段。
在一种可能的实现方式中,在第二进程基于第一索引标识获取第一存储区域中的第一任务数据之后,方法还包括:第一进程将第二任务数据写入共享内存中的第一存储区域;第一进程将第一索引标识通过进程间通信IPC传递给第二进程;第二进程基于第一索引标识获取第一存储区域中的第二任务数据。
在一种可能的实现方式中,电子设备还包括第三进程,方法还包括:第三进程将第三任务数据写入共享内存中的第二存储区域;第三进程向第一电子设备的操作系统发送第一请求,第一请求包括第二索引标识和第二电子设备的设备标识,第二索引标识用于表征共享内存中第二存储区域的位置;响应于第一请求,操作系统向第二电子设备发送第二存储区域中的第三任务数据。
在一种可能的实现方式中,第二存储区域包括多个连续的节点,第三进程将第三任务数据写入共享内存中的第二存储区域,具体包括:第三进程获取第二存储区域的第二节点信息,第二节点信息包括第二存储区域中每个节点的起始地址和内存大小;第三进程基于第二节点信息对第三任务数据执行预处理操作;第三进程将预处理后的第三任务数据并行写入第二存储区域的多个节点,第二存储区域的每个节点写入的数据不同。
第二方面,本申请提供了一种电子设备,为第一电子设备,包括一个或多个处理器和一个或多个存储器。该一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,使得第一电子设备执行上述任一方面任一项可能的实现方式中的数据传输方法。
第三方面,本申请实施例提供了一种计算机存储介质,包括计算机指令,当计算机指令在第一电子设备上运行时,使得第一电子设备执行上述任一方面任一项可能的实现方式中的数据传输方法。
第四方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在第一电子设备上运行时,使得第一电子设备执行上述任一方面任一项可能的实现方式中的数据传输方法。
第二方面至第四方面的有益效果可以参考第一方面的有益效果。
附图说明
图1为本申请实施例提供的电子设备10的硬件结构示意图;
图2为本申请实施例提供的一种数据传输方法的流程示意图;
图3A为本申请实施例提供的一种第一存储区域的节点划分示意图;
图3B为本申请实施例提供的一种对任务数据进行预处理的示意图;
图3C示出了本申请实施例提供的一种将多个数据段并行写入第一存储区域的多个节点的示意图;
图3D-图3F示出了本申请实施例提供的将填缝数据写入空白缝隙的示意图;
图3G示出了本申请实施例提供的一种全局共享数据区与第一存储区域的关系示意图;
图4示出了本申请实施例提供的一种跨设备的数据传输方法的流程示意图;
图5A-图5C示出了本申请实施例提供的一种图形渲染场景的示意图;
图6示出了本申请实施例提供的一种电子设备20的功能模块示意图;
图7示出了本申请实施例提供的一种第一存储区域的模块示意图。
具体实施方式
下面将结合附图对本申请实施例中的技术方案进行清楚、详尽地描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;文本中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为暗示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
本申请以下实施例中的术语“用户界面(user interface,UI)”,是应用程序或操作系统与用户之间进行交互和信息交换的介质接口,它实现信息的内部形式与用户可以接受形式之间的转换。用户界面是通过java、可扩展标记语言(extensible markuplanguage,XML)等特定计算机语言编写的源代码,界面源代码在电子设备上经过解析,渲染,最终呈现为用户可以识别的内容。用户界面常用的表现形式是图形用户界面(graphicuser interface,GUI),是指采用图形方式显示的与计算机操作相关的用户界面。它可以是在电子设备的显示屏中显示的文本、图标、按钮、菜单、选项卡、文本框、对话框、状态栏、导航栏、Widget等可视的界面元素。
本申请实施例提供了一种数据传输方法。发送进程可以在共享内存中确定第一存储区域,该第一存储区域包括多个节点。在数据传输之前,发送进程可以获取该多个节点的节点信息,节点信息包括节点的起始地址、内存大小。发送进程可以基于节点信息将任务数据分为多个数据段,并将该多个数据段并行写入第一存储区域的多个节点中。其中,每个节点中存储的数据不同。在向第一存储区域写入任务数据时,发送进程可以获取任务数据的索引标识,索引标识用于表征第一存储区域在共享内存中的位置。发送进程可以通过进程间通信(interprocess communication,IPC)将任务数据的索引标识传输给接收进程。接收进程可以基于该索引标识获取第一存储区域中的任务数据。发送进程与接收进程所在的电子设备可以是同一个电子设备。这样,当进行跨进程数据传输时,进程之间只需要传递索引标识,可以提高传输效率。
图1示出了电子设备10的硬件结构示意图。
电子设备10可以是手机、平板电脑、桌面型计算机、膝上型计算机、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(augmentedreality,AR)设备、虚拟现实(virtual reality,VR)设备、人工智能(artificialintelligence,AI)设备、可穿戴式设备、车载设备、智能家居设备和/或智慧城市设备,本申请实施例对该电子设备的具体类型不作特殊限制。
电子设备10可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142。可选的,电子设备10还可以包括以下任一项或多项:天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中,传感器模块180可以包括以下任一项或多项:压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本发明实施例示意的结构并不构成对电子设备10的具体限定。在本申请另一些实施例中,电子设备10可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备10的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备10的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备10中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在电子设备10上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供应用在电子设备10上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号解调以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备10的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备10可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备10通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),显示面板还可以采用有机发光二极管(organiclight-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode的,AMOLED),柔性发光二极管(flexlight-emitting diode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot light emitting diodes,QLED)等制造。在一些实施例中,电子设备10可以包括1个或N个显示屏194,N为大于1的正整数。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备10的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
内部存储器121可以包括一个或多个随机存取存储器(random access memory,RAM)和一个或多个非易失性存储器(non-volatile memory,NVM)。
随机存取存储器可以包括静态随机存储器(static random-access memory,SRAM)、动态随机存储器(dynamic random access memory,DRAM)、同步动态随机存储器(synchronous dynamic random access memory,SDRAM)、双倍资料率同步动态随机存取存储器(double data rate synchronous dynamic random access memory,DDR SDRAM,例如第五代DDR SDRAM一般称为DDR5 SDRAM)等;非易失性存储器可以包括磁盘存储器件、快闪存储器(flash memory)。
随机存取存储器可以由处理器110直接进行读写,可以用于存储操作系统或其他正在运行中的程序的可执行程序(例如机器指令),还可以用于存储用户及应用程序的数据等。
非易失性存储器也可以存储可执行程序和存储用户及应用程序的数据等,可以提前加载到随机存取存储器中,用于处理器110直接进行读写。
外部存储器接口120可以用于连接外部的非易失性存储器,实现扩展电子设备10的存储能力。外部的非易失性存储器通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部的非易失性存储器中。
电子设备10可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
指纹传感器180H用于采集指纹。电子设备10可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
触摸传感器180K,也称“触控器件”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备10的表面,与显示屏194所处的位置不同。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备10可以接收按键输入,产生与电子设备10的用户设置以及功能控制有关的键信号输入。
需要说明的是,本申请以下实施例中的电子设备(例如电子设备100、电子设备200等等)的硬件结构都可以参考图1所示电子设备10的硬件结构。
下面介绍本申请实施例提供的一种数据传输方法的具体流程。
以发送进程和接收进程所在电子设备均为电子设备100为例,图2示出了一种数据传输方法的流程示意图。在本申请实施例中,电子设备100又可以称作第一电子设备。
如图2所示,同一个电子设备上不同进程之间是数据传输方法可以包括以下步骤:
S201,发送进程11在共享内存中确定第一存储区域,第一存储区域包括多个节点。
其中,共享内存是电子设备100中支持多个进程访问的内存区域,该多个进程包括发送进程11(又称第一进程)和接收进程12(又称第二进程)。
当发送进程11需要向接收进程12传输任务数据时,发送进程11可以通过电子设备100在共享内存中申请第一存储区域。在另一些实施例中,若发送进程11此前已经在共享内存中申请了一块内存区域,发送进程11可以将该块内存区域作为第一内存区域。
第一存储区域可以包括多个节点,该多个节点是连续的,即一个节点的结束地址和下一个节点的起始地址是相邻的。优选的,第一存储区域中的多个节点的内存大小相同,这样可以便于对第一存储区域中的节点进行管理。在一些实施例中,第一存储区域中的多个节点中可以包括根节点,根节点的内存大小可以与其他节点相同,也可以不同。该根节点用于存储第一存储区域中多个节点的节点信息。节点信息的具体内容可以参考下述步骤S202中的相关描述,此处暂不详述。
示例性的,图3A示出了一种第一存储区域的节点划分示意图。
第一存储区域可以包括图3A所示的连续内存(continuebuffer)30。如图3A所示,连续内存30可以包括多个节点,例如,节点301、节点302、节点303和节点304,等等。其中,上述多个节点是连续的,即,节点301的结束地址与节点302的起始地址相邻,节点302的结束地址与节点303的起始地址相邻,等等。连续内存30还可以包括一个根节点300,根节点300可以用于存储连续内存30中每个节点的节点信息。其中,节点301、节点302、节点303和节点304的内存大小相同。
可以理解的是,图3A只是示例性示出一种第一存储区域的多个节点的分布,在其他实施例中,第一存储区域还可以包括比图3A更多或更少的节点,本申请在此不做限定。
S202,发送进程11获取第一存储区域中多个节点的节点信息,节点信息包括起始地址和内存大小。
在一些实施例中,发送进程11可以从第一存储区域的根节点(例如图3A所示的根节点300)中获取第一存储区域中每个节点的节点信息。在另一些实施例中,发送进程11也可以在向共享内存申请第一存储区域时获取第一存储区域中每个节点的节点信息。
在另一些实施例中,节点信息还可以包括节点的结束地址。
以上述图3A所示的连续内存30为例,表1示例性的示出了一种连续内存30中多个节点的节点信息。
表1连续内存30中多个节点的节点信息
节点 | 起始地址 | 内存大小 |
根节点300 | H1 | 10KB |
节点301 | H2 | 10KB |
节点302 | H3 | 10KB |
节点303 | H4 | 10KB |
节点304 | H5 | 10KB |
如表1所示,连续内存30中每个节点的节点信息包括该节点的起始地址和内存大小。根据表1可知,根节点300的起始地址为H1,内存大小为10KB;节点301的起始地址为H2,内存大小为10KB;节点302的起始地址为H3,内存大小为10KB;节点303的起始地址为H4,内存大小为10KB;节点304的起始地址为H5,内存大小为10KB。
可以理解的是,表1只是示例性示出一种第一存储区域的多个节点的节点信息,在其他实施例中,第一存储区域还可以包括比表1更多或更少的节点,每个节点的节点信息也可以包括更多或不同的内容,本申请在此不做限定。
S203,发送进程11基于节点信息对任务数据进行预处理,得到多个数据段。
发送进程11可以基于第一存储区域中每个节点的内存大小将任务数据划分为多个数据段,使得每一个数据段都至少存在一个可以存储该数据段中所有数据的节点。优选的,在节点的内存相同的情况下,发送进程11可以基于固定的数据长度对任务数据进行划分,即如果将任务数据划分为N(N为正整数)个数据段,则至少有(N-1)个数据段具有相同的数据长度。需要说明的是,在上述情况下,该固定的数据长度应当小于或等于节点的内存大小。
在一些实施例中,当任务数据包括多个数据类型的数据时,发送进程11可以先将任务数据根据数据类型分类,再对任务数据中不同数据类型的数据划分数据段。数据类型可以包括数值型、字符型、日期型等等常见的数据类型,其中数值型又可以包括整型、浮点型等等。
优选的,在节点的内存相同的情况下,当对任务数据中每一个数据类型的数据进行划分时,发送进程11也可以基于固定的数据长度对任务数据进行划分。同样的,在上述情况下,该固定的数据长度应当小于或等于节点的内存大小。
示例性的,图3B示出了一种对任务数据进行预处理的示意图。
如图3B所示,任务数据可以包括整型(integer,int)数据310和字符串(string)数据320。其中,整型数据310的数据长度为15KB,字符串数据320的数据长度为18KB。以发送进程11获取的节点信息为表1所示的节点信息为例,发送进程11对任务数据进行预处理的具体流程可以包括以下步骤:
1.发送进程11基于整型数据310的数据长度将整型数据310划分为整型数据段311和整型数据段312,其中整型数据段311的数据长度为10KB,整型数据段312的数据长度为5KB。
2.发送进程11基于字符串数据320的数据长度将字符串数据320划分为字符串数据段321和字符串数据段322,其中字符串数据段321的数据长度为10KB,字符串数据段322的数据长度为8KB。
可以理解的是,图3B所示实施例只是一个范例,在本申请实施例中,任务数据还可以包括比图3B更多或更少的数据类型,或是可以划分为更多或更少的数据段,划分的数据段也可以有其他不同的数据长度,本申请在此不做限定。
S204,发送进程11基于节点信息将多个数据段并行写入多个节点,每个节点写入的数据段不同。
在将任务数据预处理,得到多个数据段之后,发送进程11可以基于节点信息通过并行方式将该多个数据段写入第一存储区域的多个节点中,且每个节点写入的数据段不同。
示例性的,图3C示出了一种将多个数据段并行写入第一存储区域的多个节点的示意图。
如图3C所示,任务数据可以包括整型数据段311、整型数据段312、字符串数据段321和字符串数据段322,各个数据段的数据类型和数据长度可以参考上述图3B所示实施例中的相关描述,此处不再赘述。第一存储区域可以包括连续内存30,连续内存30的节点分布可以参考上述图3A所示实施例中的内容,此处不再赘述。
发送进程11可以采用如图3C所示的并行写入的方式将任务数据的上述多个数据段分别写入第一存储区域的多个节点中,例如,发送进程11基于节点301的起始地址将整型数据段311写入节点301,发送进程11基于节点302的起始地址将整型数据段312写入节点302,发送进程11基于节点303的起始地址将字符串数据段321写入节点303,发送进程11基于节点304的起始地址将字符串数据段322写入节点304,等等。其中,发送进程11采用并行的方式,同时执行对上述节点301、节点302、节点303和节点304的写入操作。
采用并行写入的方式,可以更快地将任务数据写入第一存储区域中,提高数据传输的效率。
在一些实施例中,发送进程11可以在第一存储区域的根节点中写入数据结构信息,数据结构信息可用于指示第一存储区域中每个节点中存储的数据段之间的关系。示例性的,以上述图3C所示实施例为例,根节点300中存储的数据结构信息可以是表2所示的内容。
表2数据结构信息
数据类型 | 占用节点 | 各节点中数据段的关系 |
Int | 节点301、节点302 | 节点301-节点302 |
String | 节点303、节点304 | 节点303-节点304 |
示例性的,如表2所示,数据结构信息可以包括任务数据包括的一种或多种数据类型、每一种数据类型的任务数据的占用节点以及各节点中数据段的关系。根据表2可知,在连续内存30中,int数据所占用的节点为节点301和节点302,且节点301的数据段(整型数据段311)在节点302的数据段(整型数据段312)之前,即整型数据段311和整型数据段312按照该顺序合并后可以得到任务数据中的整型数据310。同样的,string数据占用的节点为节点303和节点304,且节点303的数据段(字符串数据段321)在节点304的数据段(字符串数据段322)之前,即字符串数据段321和字符串数据段322按照该顺序合并后可以得到任务数据中的字符串数据320。
可以理解的是,上述表2所示数据结构信息只是一种范例,在其他实施例中,数据结构信息还可以包括比表2更多、更少或其他不同的内容,本申请在此不做限定。
在另一些实施例中,发送进程11也可以在根节点以外的其他节点的固定位置处(例如节点的首端或末端)写入该节点内存储数据段的数据结构信息,用于指示该节点内存储的数据段与其他数据段之间的关系。示例性的,仍旧以图3C所示实施例为例,发送进程11可以在节点302的首端写入节点301的地址信息,用于指示节点301中存储的整型数据段311在节点302中存储的整型数据段312之前。
在一些实施例中,如果任务数据经过预处理之后得到的多个数据段的数目大于第一存储区域中节点的数目,则可以将并行写入结束之后未写入第一存储区域的一个或多个数据段称作填缝数据。发送进程11可以获取第一存储区域中空白缝隙的存储信息,空白缝隙是第一存储区域的节点中未写入数据的区域,空白缝隙的存储信息包括每个空白缝隙的地址和内存大小。发送进程11可以基于填缝数据的数据长度和空白缝隙的存储信息将填缝数据写入足够存放该填缝数据的空白缝隙之中。
示例性的,如图3D所示,连续内存30包括多个节点,该多个节点包括根节点300、节点301、节点302、节点303和节点304。连续内存30和各个节点的具体内存可以参考上述图3A实施例。任务数据在经过预处理之后,得到以下多个数据段:整型数据段331、整型数据段332、整型数据段333、字符串数据段334、字符串数据段335和浮点型(float)数据段336,等等。其中,各节点内存大小为10KB,整型数据段331的数据长度为10KB、整型数据段332的数据长度为8KB、整型数据段333的数据长度为5KB、字符串数据段334的数据长度为6KB、字符串数据段335的数据长度为3KB、浮点型(float)数据段336的数据长度为5KB。
在发送进程11对该多个节点并行写入多个数据段之后,连续内存30的各节点中数据分布示意图如图3E所示。
如图3E所示,节点301中存储的数据为整型数据段331、节点302中存储的数据为整型数据段332、节点303中存储的数据为整型数据段333、节点304中存储的数据为字符串数据段334。此时,填缝数据包括字符串数据段335和浮点型数据段336,其数据长度分别为3KB和5KB。连续内存30中的空白缝隙包括空白缝隙341、空白缝隙342和空白缝隙343,其中,空白缝隙341在节点302中,且内存大小为2KB,空白缝隙342在节点303中,且内存大小为5KB,空白缝隙343在节点304中,且内存大小为4KB。
发送进程11可以基于上述空白缝隙的地址和内存大小,确定将字符串数据段335写入空白缝隙343中,将浮点型数据段336写入空白缝隙342中,写入填缝数据之后,连续内存30的各节点中数据分布示意图如图3F所示。
如图3E所示,节点301中存储的数据为整型数据段331、节点302中存储的数据为整型数据段332、节点303中存储的数据依次为整型数据段333和浮点型数据段336、节点304中存储的数据依次为字符串数据段334和字符串数据段335。
在一些实施例中,为了提高填缝数据的填充效率,发送进程11在获取空白缝隙的存储信息之后,可以基于每个空白缝隙的内存大小对所有空白缝隙排序,得到排序结果。在填充填缝数据时,发送进程11可以基于该填缝数据的数据长度和排序结果,采用二分法查找内存不小于填缝数据的数据长度的空白缝隙,并将该填缝数据填充到该空白缝隙中。
示例性的,以图3E所示实施例为例,发送进程11可以对空白缝隙341、空白缝隙342和空白缝隙343的内存大小进行排序,得到由大到小的排序空白缝隙342、空白缝隙343、空白缝隙341。在填充字符串数据段335时,可以基于该数据段的数据长度3KB和空白缝隙343的内存大小(即4KB)比较,确定空白缝隙343的内存大于字符串数据段335的数据长度,此时,发送进程11可以确定将字符串数据段335填充到空白缝隙343中。同样的,在填充浮点型数据段336时,可以基于该数据段的数据长度5KB和空白缝隙343的内存大小(即4KB)比较,确定空白缝隙343的内存小于浮点型数据段336的数据长度,然后,发送进程11可以进一步比较空白缝隙342的内存大小与浮点型数据段336的数据长度,确定空白缝隙342的内存大于浮点型数据段336的数据长度,此时,发送进程11可以确定将浮点型数据段336填充到空白缝隙342中。
可以理解的是,此处的实施例只是一个范例,在本申请实施例中,第一存储区域中还可以包括更多或更少的空白缝隙,第一存储区域的多个空白缝隙中也可以填充更多或更少的填缝数据,本申请在此不做限定。
在一些实施例中,在获取空白缝隙的存储信息之后,发送进程11也可以对空白缝隙进行分类分配,确定每个空白缝隙的数据类型标签,并基于空白缝隙的数据类型标签和存储信息将填缝数据写入数据类型匹配的空白缝隙中。其中,发送进程11可以基于空白缝隙的内存大小确定空白缝隙的数据类型标签,也可以基于发送进程11以往发送的数据中各个数据类型的数据所占比例确定空白缝隙的数据类型标签,等等,在本申请在此不做限定。
示例性的,仍旧以图3E所示实施例为例,其中,空白缝隙341的内存地址为pEmpty1,空白缝隙342的内存地址为pEmpty2,空白缝隙343的内存地址为pEmpty3。发送进程11可以基于填缝数据的数据类型将空白缝隙341、空白缝隙342和空白缝隙343标记不同的数据类型标签。例如,可以将空白缝隙341和空白缝隙343标记为字符串数据,将空白缝隙342标记为浮点型数据。在这种情况下,发送进程11可以将浮点型数据段336写入空白缝隙342中,将字符串数据段335写入空白缝隙343中。
在上述情况下,空白缝隙与数据类型的对应关系可以参考表3所示内容。
表3空白缝隙与数据类型的对应关系
数据类型 | 空白缝隙的内存地址 |
浮点型数据 | pEmpty2 |
字符串数据 | pEmpty1、pEmpty3 |
如表3所示,填缝数据的数据类型可以包括浮点型数据和字符串数据,每个数据类型可以对应有一个或多个空白缝隙,且每个空白缝隙都有一个对应的数据类型标签。根据表3可知,内存地址为pEmpty1的空白缝隙341的数据类型标签为字符串数据,内存地址为pEmpty2的空白缝隙342的数据类型标签为浮点型数据,内存地址为pEmpty3的空白缝隙343的数据类型标签为字符串数据。
可以理解的是,表3所示的空白缝隙与数据类型的对应关系只是一个范例,在本申请实施例中,填缝数据也可以包括更多或更少的数据类型,或者,第一存储区域也可以包括更多或更少的空白缝隙,等等,本申请在此不做限定。
需要说明的是,当多个空白缝隙的数据类型标签相同时,发送进程11也可以将该多个空白缝隙基于内存大小排序,并基于二分法确定将填缝数据写入该多个空白缝隙中的一个空白缝隙中。
在一些实施例中,电子设备100还可以在共享内存中划分一段内存作为全局共享数据区,用于存储系统数据,全局共享数据区与第一存储区域不同。系统数据也可以包括任务数据中重复出现多次的数据(也称作重复数据),在这种情况下,当发送进程11向第一存储区域写入任务数据时,发送进程11可以将该重复数据替换为该重复数据在全局共享数据区的地址信息。
示例性的,如图3G所示,共享内存中包括连续内存30和全局共享数据区40,连续内存30为发送进程11确定的第一存储区域。其中,连续内存30的具体内容可以参考上述图3A所示实施例中的相关描述。待填充的多个数据段包括数据段350和数据段351,其中,数据段350包括重复数据360,且重复数据360位于数据段350的第一位置处;数据段351包括重复数据360,且重复数据360位于数据段351的第二位置处。
发送进程11可以基于上述数据段中重复数据的内容以及所处位置,确定将重复数据360写入全局共享数据区40中,且重复数据360的地址为地址361。此外,发送进程11还可以将数据段350的第一位置处的重复数据360替换为地址361,得到数据段352;将数据段351第二位置处的重复数据360替换为地址361,得到数据段353。之后,发送进程11可以将数据段352和数据段353采用并行方式分别写入节点301和节点302中。
可以理解的是,上述图3G所示实施例只是一个范例,在本申请实施例中,还可以包括更多或更少的重复数据,重复数据也可以位于不同的数据段的不同位置,本申请在此不做限定。
在一些实施例中,发送进程11也可以在对任务数据进行预处理的阶段将确定出重复数据,并将重复数据写入全局共享数据区,将任务数据的重复数据替换为重复数据对应的地址,本申请在此不做限定。
在一些实施例中,系统数据也可以包括存续时间长于进程存续时间(例如发送进程或接收进程的存续时间)的数据。示例性的,以渲染场景为例,全局共享数据区存储的数据可以包括桌面壁纸、桌面图标、常用控件图案等等。又示例性,全局共享数据也可以包括电子设备100中存储的多张图片,该多张图片可以被多个应用进程访问,等等。
通过定义全局共享数据区,接收进程可以从共享内存的全局共享数据区获取常用的系统数据,提高传输效率。而且还可以避免存储重复数据段造成的内存浪费,提高内存的使用效率。
S205,发送进程11可以获取任务数据的索引标识,用于在共享内存中确定出第一存储区域的位置。
索引标识可以包括文件描述符(filedescriptor,fd),在一些实施例中,也可以索引标识也可以是句柄。
发送进程11可以在申请第一存储区域之后,获取该索引标识。在一些实施例中,发送进程11也可以在向第一存储区域写入任务数据时,获取该索引标识。例如,发送进程11可以在第一存储区域中创建文件,该文件包括任务数据,在创建完该文件之后,发送进程11可以获取到该文件的文件描述符。
S206,发送进程11可以通过进程间通信将任务数据的索引标识传输至接收进程12。
在发送进程11获取任务数据的索引标识之后,发送进程11可以通过IPC将任务数据的索引标识传输至接收进程。
示例性的,发送进程可以将任务数据的索引标识拷贝到parcel中,并通过IPC将该parcel传送至接收进程,接收进程在接收到该parcel之后,可以从该parcel中拷贝出任务数据的索引标识。需要说明的是,parcel是一个容器,parcel中可以包含数据或者是对象引用,支持序列化以及跨进程之后的反序列化。
在一些实施例中,发送进程也可以采用其他方式(例如管道通信、消息队列、套接字(socket)等等)将任务数据的索引标识发送至接收进程,本申请在此不做限定。
S207,接收进程12基于任务数据的索引标识获取第一存储区域中的任务数据。
在接收进程12获取任务数据的索引标识之后,接收进程12可以基于索引标识获取第一存储区域中的任务数据。例如,当索引标识为文件描述符时,电子设备100可以基于该文件描述符确定出包括任务数据的文件,继而得到任务数据,等等。
在一些实施例中,接收进程12可以并行读取第一存储区域中多个节点的任务数据。接收进程12可以获取第一存储区域中每个节点的节点信息(节点的起始地址和内存大小,等等),并基于第一存储区域中每个节点的节点信息并行读取第一存储区域中多个节点的数据。发送进程12还可以获取第一存储区域中每个节点存储的数据段之间的关系,并基于数据段之间的关系将多个节点中存储的数据段恢复成任务数据。需要说明的是,上述节点信息和各节点的数据段之间的关系可以从第一存储区域的根节点中获取,也可以从其他节点中获取,具体的存储位置可以参考上述步骤S201和步骤S204中的相关描述,此处不再赘述。在一些实施例中,若任务数据存储在第一存储区域的文件中,上述信息还可以从该文件的文件头中获取,等等。
这样,采用并行读取的方式,可以提高数据传输的效率。
在一些实施例中,发送进程11对应的第一存储区域是共享内存中的一个固定区域,因此,发送进程11可以通过第一存储区域进行多次跨进程数据传输,无需在每次数据传输之前再从共享内存中申请内存区域。这样可以简化数据传输步骤,提高了数据传输的效率。
在一些实施例中,为了提高共享内存中内存的使用效率,还可以将第一存储区域划分为多个内存等大的内存页,发送进程11和接收进程12采用内存页轮转的方式按照一定顺序对内存页执行写入或读取的操作。内存页之间可以是连续的,也可以不连续,即内存页的结束地址与下一个内存页的开始地址可以连续,也可以不连续。需要说明的是,每个内存页可以包括多个节点,发送进程11对内存页的写入操作可以通过对内存页上多个节点并行写入数据段来实现,具体内容可以参考上述图2所示实施例中对多个节点并行写入的相关描述,此处不再赘述。
下面介绍一种内存页轮转的具体流程。
示例性的,第一存储区域可以包括多个内存页,该多个内存页可以包括页面1(即第一页面)和页面2(即第二页面)。发送进程11需要发送的任务数据可以包括数据单元1(即第一数据单元)、数据单元2(即第二数据单元)和数据单元3(即第三数据单元),每一个数据单元所占据的内存小于或等于一个内存页的内存。第一顺序为页面1、页面2。
在上述情况下,基于第一顺序执行内存页轮转的具体流程可以包括以下步骤:
1.在第一时间,发送进程11在页面1中写入数据单元1。
2.在第二时间,接收进程12读取页面1中的数据单元1,第二时间晚于第一时间。
3.在第三时间,发送进程11在页面2中写入数据单元2,第三时间不早于第一时间。
在一些实施例中,第三时间可以与第二时间相同。
4.在第四时间,接收进程12读取页面2中的数据单元2,第四时间晚于第三时间。
5.在第五时间,发送进程11在页面1中写入数据单元3,第五时间晚于第二时间。
第五时间要晚于第二时间,这样才可以确保页面1中的数据单元1在被接收进程12读取之后才被覆盖。在一些实施例中,第五时间可以与第四时间相同。
6.在第六时间,接收进程12读取页面1的数据单元3,第六时间晚于第五时间。
可以理解的是,当任务数据包括比上述实施例更多的数据时,在之后时间中,发送进程11可以按照第一顺序依次对内存页执行写入操作,接收进程12按照第一顺序依次对内存页执行读取操作。
可以理解的是,此处实施例只是一个范例,在其他实施例中,第一存储区域也可以划分为更多或更少的内存页,发送进程要发送的任务数据也可以包括比上述实施例更多或更少的数据单元,本申请在此不做限定。
这样,不仅可以提高共享内存的内存利用效率,也可以提高数据的传输效率。
在一些实施例中,每个数据单元可以是接收进程12的最小可处理数据单元。例如,以发送进程11为图库进程、接收进程为渲染服务进程为例,图库进程发送的数据单元可以是图库进程在一个时间帧内的渲染数据。在这种情况下,发送进程11还可以基于接收进程12处理一个数据单元的处理时间确定内存页的数目和/或内存页轮转频率,等等。这样,接收进程12可以一边处理数据单元,一边接收下一个待处理的数据单元,提高效率。
在一些实施例中,发送进程和接收进程所在的电子设备可以是不同的电子设备。下面以发送进程11所在电子设备为电子设备100,接收进程21所在电子设备为电子设备200为例,介绍分布式场景下数据传输方法的具体流程。
如图4所示,在分布式场景下,数据传输方法的具体流程可以包括以下步骤:
S401,发送进程11在共享内存确定第一存储区域,第一存储区域包括多个节点。
S402,发送进程11获取第一存储区域中多个节点的节点信息,节点信息包括起始地址和内存大小。
S403,发送进程11基于节点信息对任务数据进行预处理,得到多个数据段。
S404,发送进程11基于节点信息将多个数据段并行写入多个节点,每个节点写入的数据段不同。
S405,发送进程11获取任务数据的索引标识。
发送进程11获取的任务数据的索引标识用于表征第一存储区域在共享内存中的位置。在一些实施例中,发送进程11也可以替换为其他发送进程,此时该发送进程获取的索引标识也可以用于表征该发送进程对应的存储区域在共享内存中的位置,本申请在此不做限定。
步骤S401至步骤S405的具体内容可以参考上述图2所示实施例中步骤S201至步骤S205的相关描述,此处不再赘述。
S406,发送进程11向电子设备100的操作系统发送传输请求,包括任务数据的索引标识和电子设备200的设备标识。
传输请求(又称第一请求)可用于请求操作系统向电子设备200发送第一存储区域中的任务数据。任务数据的索引标识可用于在共享内存中确定出第一存储区域,从而获取任务数据。电子设备200的设备标识用于指示接收进程21所在的电子设备。
S407,电子设备100的操作系统基于传输请求向电子设备200发送任务数据。
电子设备100的操作系统可以基于电子设备100与电子设备200之间的通信连接向电子设备200发送任务数据。需要说明的是,电子设备100与电子设备200之间的通信连接可以是有线连接,也可以是无线连接。在一些实施例中,电子设备100与电子设备200之间的通信连接也可以是基于一个或多个其他电子设备的中转形成的通信连接(例如组网中的两个电子设备,等等)。
在电子设备200接收到任务数据之后,接收进程21可以获取电子设备200接收的任务数据。
这样,即便发送进程与接收进程位于不同电子设备,也可以采用图4所示方法传输数据。可以理解的是,在图4所示实施例中,发送进程也可以是电子设备100中的其他进程,,在这种情况下,该发送进程对应的共享内存中的区域可以是其他内存区域(例如第二内存区域),任务数据的索引标识可以是第二索引标识,本申请在此不做限定。在图4所示实施例中,发送进程又可以称作第三进程,接收进程又可以成为第四进程,发送进程所在的电子设备(即电子设备100)又可以称作第一电子设备,接收进程所在的电子设备,即电子设备200可以称作第二电子设备。
需要说明的是,采用图4所示方法传输数据时,电子设备100的操作系统在向电子设备200发送任务数据(例如多张图片)之前,需要将第一存储区域中的任务数据拷贝出来,由于任务数据是存储在第一存储区域这一个连续内存中,因此,只需要拷贝一次即可,且只需要向电子设备200发送一次数据。若不采用本申请实施例图4所示的数据传输方法,电子设备100会为发送进程11随机分配多个内存区域分别存储任务数据中的多张图片。在这种情况下,操作系统需要从该多个内存区域分别拷贝其存储的内容,即需要拷贝多次,并向电子设备200发送多次数据。因此,本申请实施例提供的数据传输方法可以减少寻址和拷贝的次数,并减少数据传输次数,具有更高的传输效率。
此处实施例只是示例性说明采用图4所示数据传输方法,可以减少数据拷贝的次数,在另一些实施例中,传输的数据也可以是视频、语音、文本等数据,本申请在此不做限定。
下面介绍本申请实施例提供的数据传输方法的应用场景。
图5A示出了一种图形渲染场景。
如图5A所示,电子设备接收并响应于用户在备忘录中添加文字和图片的操作,在显示屏中显示备忘录中文字和图片的渲染结果。
在上述场景下,发送进程包括图库进程510和备忘录进程520,接收进程包括渲染服务进程530。其中,图库进程510要向渲染服务进程530发送图库渲染数据511,备忘录进程520要向渲染服务进程530发送备忘录渲染数据521,渲染服务进程530则需要在接收图库渲染数据511和备忘录渲染数据521之后,确定出最终的渲染数据531,并基于渲染数据531进行渲染,并最终在屏幕上显示渲染结果500。
下面以图库进程510向渲染服务进程530发送图库渲染数据511为例,介绍在图形渲染场景下任务数据的传输示意图。
如图5B所示,图形渲染场景下的数据传输可以包括多个进程,例如用于发送数据的图库进程510和用于接收数据的渲染服务进程530。图库进程510向渲染服务进程530发送图库渲染数据511还需要以共享内存540为中介。其中,图库进程510中包括图库渲染数据511,图库渲染数据511可以是图5B所示的图库渲染树。共享内存540中包括多个连续内存区域,可以用于存储数据。该多个连续内存区域可以包括连续内存区域541,用于存储图库进程510的任务数据(例如图库渲染数据511)。渲染服务进程530可以用于将渲染数据531渲染,得到渲染结果,并将渲染结果发送至图形处理器GPU550。
图库进程510可以采用并行写入的方式,将图库渲染数据511填充至共享内存540中。在图库进程510开始向共享内存540中并行写入图库渲染数据511之前,图库进程510可以获取索引标识,该索引标识可以用于在共享内存中确定出图库渲染数据511。索引标识可以是图5B所示的文件描述符(fd)。图库进程510在获取到fd之后,可以将该fd拷贝到parcel中,并通过进程间通信(IPC)的方式将该parcel发送到渲染服务进程530。渲染服务进程530在接收到包括fd的parcel之后,可以从该parcel中拷贝出fd,并将fd发送至共享内存540,基于fd并行读取共享内存540中的图库渲染数据511,并基于图库渲染数据511确定出最终的渲染数据531。
此外,在一些实施例中,共享内存540中的多个连续内存区域还可以包括全局共享数据区542,用于存储有系统数据(systemdata),系统数据可以采用预加载的方式写入全局共享数据区542中,也可以是在图库进程510确定重复数据之后,将该重复数据写入全局共享数据区542中。图库进程510也可以确定该重复数据在全局共享数据区542中的地址,并以该地址替换图库渲染数据511中的重复数据。
可以理解的是,在图形渲染场景下,其他需要渲染服务的进程例如备忘录进程520等等)也可以采用上述方法将数据传输至渲染服务进程530。
下面以图库进程510向渲染服务进程530发送图库渲染数据511为例,介绍在图形渲染场景下的硬件交互示意图。
电子设备100执行数据传输方法时,电子设备100中的中央处理器(CentralProcess Unit,CPU)51、存储器52和图形处理器(Graphic Process Unit,GPU)53之间可以进行如图5C所示的交互。
如图5C所示,图库进程510、内存分配器(memoryallocator)560、后台线程加载器(workloader)570、IPC通信580和渲染服务进程530可以运行在电子设备100的CPU51之中。共享内存540则位于电子设备100的存储器52中。在一些实施例中,共享内存540可以包括直接存储器访问(direct memory access,DMA)和/或匿名共享内存(Ashmem)。
其中,图库进程510可以通过内存分配器560调用共享内存的接口(API)从共享内存540中划分一段连续内存作为图库进程510的第一存储区域。
在图库进程510确定出其对应的第一存储区域之后,内存分配器560可以基于第一存储区域划分出多个节点,之后,图库进程510可以通过后台线程加载器570加载多个并行的写线程,将图库进程510中的图库渲染数据511写入第一存储区域的多个节点中。
在图库进程510向第一存储区域中写入图库渲染数据511的过程中,图库进程510可以通过内存分配器560获取共享内存540中图库渲染数据511的索引标识(例如文件描述符)。
在获取图库渲染数据511的索引标识之后,图库进程510可以将索引标识封装,例如,CPU可以调用datafacotryset封装该索引标识。图库进程510可以将封装好的索引标识通过IPC通信580发送至渲染服务进程530。在一些实施例中,IPC通信580中还可以包括flowbuffer,在这种情况下,可以直接对该索引标识进行IPC,将索引标识传输给渲染服务进程530。
渲染服务进程530在接收到索引标识之后,可以基于索引标识,通过后台线程加载器570并行读取共享内存540中的图库渲染数据511,并基于图库渲染数据511确定出最终的渲染数据531。渲染服务进程530可以基于渲染数据531确定出渲染结果,并将渲染结果发送至GPU53。
需要说明的是,CPU51可以是上述图1所示实施例中电子设备100的处理器110或处理器110的一部分,存储器52可以是图1所示实施例中电子设备100的内部存储器121,GPU53也可以是处理器110的一部分。
可以理解的是,图5C所示实施例只是一个范例,在其他实施例中,上述模块也可以位于不同的硬件中,本申请在此不做限定。
可以理解的是,图5A至图5C只是示例性说明本申请提供的数据传输方法可以应用于图形渲染场景,在其他实施例中,数据传输方法也可以应用于其他场景,例如音频播放场景、分布式场景,等等,本申请在此不做限定。
图6示出了本申请实施例提供的电子设备20的功能模块示意图。
如图6所示,电子设备20包括数据发送端610、传输框架、共享内存模块640和数据接收端650。其中,传输框架可以包括数据传输模块620和跨进程传输模块630。示例性的,若应用场景为图5A所示的图形渲染场景,则数据发送端610可以包括图库进程,也可以包括备忘录进程,数据接收端则可以包括渲染服务进程。
其中,数据发送端610可以通过数据传输模块620将任务数据存储到共享内存模块640中,并获取任务数据的索引标识,索引标识可以是文件描述符。数据发送端610还可以通过跨进程传输模块630向数据接收端650发送任务数据的索引标识。
数据传输模块620可以包括传输模块621和内存分配模块622,可选的,还可以包括数据结构模块623。传输模块621可以将数据发送端610发送的任务数据填充到共享内存模块640中。传输模块621可以采用并行填充(并行写入)的方式将任务数据写入到共享内存模块640中。内存分配模块622可以为数据发送端610在共享内存模块640中划分一个连续内存区域作为数据发送端610的第一存储区域,该第一存储区域可用于存储任务数据。在一些实施例中,内存分配模块622还可以管理内存页的轮转。数据结构模块623可以定义不同类型数据对应的数据格式,还可以定义不同类型数据的分区,也可以定义数据的压缩方式,等等。
跨进程传输模块630可以执行跨进程通信,即可以将数据发送端610发送的索引标识发送至数据接收端650。在一些实施例中,跨进程传输模块630可以包括通道(channel)631、缓冲器(buffer)632和序列化(marshalling)模块633。其中,序列化模块633可以将索引标识序列化,得到索引标识对应的字节序列。在得到索引标识对应的字节序列之后,通道631或缓存器632可以将该字节序列发送至数据接收端650。
共享内存模块640可以包括文件描述符模块641和数据存储模块642。数据存储模块642可以存储数据发送端610的任务数据。在一些实施例中,数据存储模块642还可以划分出一段内存作为全局共享数据区,用于存储系统数据。文件描述符模块641可以基于任务数据在数据存储模块642中的存储地址确定出任务数据对应的文件描述符,并将文件描述符通过数据传输模块620返回给数据发送端610。文件描述符模块641还可以基于数据接收端650发送的文件描述符,从数据存储模块642确定出任务数据,并允许数据接收端650访问该任务数据。
在一些实施例中,共享内存模块640还可以包括栅栏(fence)模块643和/或预留(reservation)模块644。其中,fence模块643可以执行同步功能,即可以控制多个进程对同一个内存段的访问时间,避免由于多进程同时访问造成的错误。在一些实施例中,在内存页轮转的情况下,fence模块643还可以用于确定内存页是否被数据接收端650读取。确保内存页中未被读取的数据不会被新的数据覆盖。reservation模块644是可增添功能模块,即可以通过reservation模块644在共享内存模块640中增添其他功能。例如,可以通过设置reservation模块644实现对共享内存模块640中数据的安全保护功能,等等。
在另一些实施例中,数据传输模块620中的部分功能模块或所有功能模块也可以设置在共享内存模块640中,本申请在此不做限定。
可以理解的是,上述图6所示的电子设备100的功能模块结构只是一个范例,电子设备100还可以包括比图6所示的更多或更少的功能模块,本申请在此不做限定。
需要说明的是,在本申请实施例中,电子设备200或其他电子设备的功能模块也可以参考图6所示电子设备100的功能模块。
在一些实施例中,共享内存模块640中的第一存储区域可以是图7所示的连续内存模块700。
如图7所示,连续内存模块700可以包括内存分配器710、节点分配器720、数据结构模块730、序列化模块740和深度拷贝模块750。
其中,内存分配器710可用于分配第一存储区域的内存。节点分配器720可用于划分第一存储区域的多个节点,并为任务数据的数据段分配内存大小合适的节点。节点分配器720中可以存储有节点压缩算法,节点分配器720可以基于节点压缩算法确定第一存储区域的节点划分。数据结构模块730可用于存储不同数据类型的数据与该类型数据的数据段长度的对应关系,发送进程11可以基于不同数据类型的数据段长度对该类型数据进行预处理,确定一个或多个数据段。序列化模块740可用于将任务数据由对象转化为字节序列。深度拷贝模块750可用于辅助接收进程12对第一存储区域的任务数据进程深度拷贝。
可以理解的是,上述图7所示的第一存储区域只是一个范例,在其他实施例中,第一存储区域还可以包括比图7所示的更多或更少的功能模块,本申请在此不做限定。
本申请的各实施方式可以任意进行组合,以实现不同的技术效果。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solidstate disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
总之,以上所述仅为本发明技术方案的实施例而已,并非用于限定本发明的保护范围。凡根据本发明的揭露,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1.一种数据传输方法,应用于第一电子设备,所述第一电子设备包括第一进程、第二进程和共享内存,所述共享内存中包括第一存储区域,所述第一存储区域包括多个连续的节点;其特征在于,所述方法包括:
所述第一进程获取所述第一存储区域的第一节点信息,所述第一节点信息包括所述第一存储区域中每个节点的起始地址和内存大小;
所述第一进程基于所述第一节点信息对所述第一任务数据执行预处理操作,确定多个数据段;
所述第一进程将所述多个数据段并行写入所述第一存储区域的多个节点,所述第一存储区域的每个节点写入的数据段不同;
所述第一进程将所述第一任务数据的第一索引标识通过进程间通信IPC传递给所述第二进程,所述第一索引标识用于表征所述第一存储区域在所述共享内存中的位置;
所述第二进程基于所述第一索引标识获取所述第一存储区域中的所述第一任务数据。
2.根据权利要求1所述的方法,其特征在于,当所述多个数据段的数目多于所述多个节点的数目时,所述方法还包括:
所述第一进程确定填缝数据,所述填缝数据包括所述多个数据段中未写入所述第一存储区域的一个或多个数据段;
所述第一进程基于所述多个节点的数据填充情况确定所述多个节点中空白缝隙的存储信息,所述空白缝隙的存储信息包括所述第一存储区域中的每个空白缝隙的地址和内存大小,所述空白缝隙为每个节点中未填充数据的区域;
所述第一进程基于所述空白缝隙的存储信息将所述填缝数据写入一个或多个所述空白缝隙。
3.根据权利要求2所述的方法,其特征在于,所述第一进程基于所述空白缝隙的存储信息将所述填缝数据写入一个或多个所述空白缝隙,具体包括:
所述第一进程确定所述填缝数据中每个数据段的数据类型;
所述第一进程基于所述空白缝隙的存储信息确定每个空白缝隙的数据类型标签,所述数据类型标签用于指示所述空白缝隙与数据类型的对应关系;
所述第一进程基于所述填缝数据的数据类型、所述空白缝隙的数据类型标签和所述空白缝隙的存储信息将所述填缝数据填充到所述空白缝隙。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述多个节点的内存大小相同。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述第一任务数据包括多个数据单元,所述第一任务数据的多个数据单元包括第一数据单元、第二数据单元和第三数据单元;所述第一存储区域包括多个内存页,所述多个内存页包括第一内存页和第二内存页;
所述第一进程将所述多个数据段并行写入所述第一存储区域的多个节点,具体包括:
在第一时间,所述第一进程将所述第一数据单元的多个数据段并行写入所述第一内存页的多个节点;
在第三时间,所述第一进程将所述第二数据单元的多个数据段并行写入所述第二内存页的多个节点;
在第五时间,所述第一进程将所述第三数据单元的多个数据段并行写入所述第一内存页的多个节点;
其中,所述第五时间晚于所述第三时间,所述第三时间晚于所述第一时间。
6.根据权利要求5所述的方法,其特征在于,所述第二进程获取所述第一存储区域中的所述第一任务数据,具体包括:
在第二时间,所述第二进程获取所述第一内存页中的所述第一数据单元;
在第四时间,所述第二进程获取所述第二内存页中的所述第二数据单元;
在第六时间,所述第二进程获取所述第一内存页中的所述第三数据单元;
其中,所述第六时间晚于所述第五时间,所述第四时间晚于所述第三时间,所述第二时间晚于所述第一时间,所述第五时间晚于所述第二时间。
7.根据权利要求5或6所述的方法,其特征在于,所述第一进程基于所述第一节点信息对所述第一任务数据执行预处理操作,确定多个数据段,具体包括:
在第一时间之前,所述第一进程基于所述第一节点信息对所述第一数据单元执行预处理操作,确定所述第一数据单元的多个数据段;
在第三时间之前,所述第一进程基于所述第一节点信息对所述第二数据单元执行预处理操作,确定所述第一数据单元的多个数据段;
在第五时间之前,所述第一进程基于所述第一节点信息对所述第三数据单元执行预处理操作,确定所述第一数据单元的多个数据段。
8.根据权利要求6所述的方法,其特征在于,所述第二进程获取所述第一内存页中的所述第一数据单元,具体包括:
所述第二进程并行读取所述第一内存页中多个节点的所述第一数据单元的多个数据段;
所述第二进程获取所述第二内存页中的所述第二数据单元,具体包括:
所述第二进程并行读取所述第二内存页中多个节点的所述第二数据单元的多个数据段;
所述第二进程获取所述第一内存页中的所述第三数据单元,具体包括:
所述第二进程并行读取所述第一内存页中多个节点的所述第三数据单元的多个数据段。
9.根据权利要求1-8中任一项所述的方法,其特征在于,在所述第二进程基于所述第一索引标识获取所述第一存储区域中的所述第一任务数据之后,所述方法还包括:
所述第一进程将第二任务数据写入所述共享内存中的第一存储区域;
所述第一进程将所述第一索引标识通过进程间通信IPC传递给所述第二进程;
所述第二进程基于所述第一索引标识获取所述第一存储区域中的所述第二任务数据。
10.根据权利要求1-9中任一项所述的方法,其特征在于,所述电子设备还包括第三进程,所述方法还包括:
所述第三进程将第三任务数据写入所述共享内存中的第二存储区域;
所述第三进程向所述第一电子设备的操作系统发送第一请求,所述第一请求包括所述第二索引标识和所述第二电子设备的设备标识,所述第二索引标识用于表征所述共享内存中所述第二存储区域的位置;
响应于所述第一请求,所述操作系统向所述第二电子设备发送所述第二存储区域中的所述第三任务数据。
11.根据权利要求10所述的方法,其特征在于,所述第二存储区域包括多个连续的节点,所述第三进程将第三任务数据写入所述共享内存中的第二存储区域,具体包括:
所述第三进程获取所述第二存储区域的第二节点信息,所述第二节点信息包括所述第二存储区域中每个节点的起始地址和内存大小;
所述第三进程基于所述第二节点信息对所述第三任务数据执行预处理操作;
所述第三进程将预处理后的所述第三任务数据并行写入所述第二存储区域的多个节点,所述第二存储区域的每个节点写入的数据不同。
12.一种电子设备,为第一电子设备,其特征在于,包括:一个或多个处理器、一个或多个存储器;所述一个或多个存储器与所述一个或多个处理器耦合,所述一个或多个存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,当所述一个或多个处理器执行所述计算机指令时,使得所述第一电子设备执行上述权利要求1-11中任一项所述的方法。
13.一种计算机可读存储介质,包括计算机指令,其特征在于,当所述计算机指令在第一电子设备上运行时,使得所述第一电子设备执行上述权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211267135.5A CN117931465A (zh) | 2022-10-17 | 2022-10-17 | 一种数据传输方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211267135.5A CN117931465A (zh) | 2022-10-17 | 2022-10-17 | 一种数据传输方法及相关装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117931465A true CN117931465A (zh) | 2024-04-26 |
Family
ID=90759751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211267135.5A Pending CN117931465A (zh) | 2022-10-17 | 2022-10-17 | 一种数据传输方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117931465A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118714142A (zh) * | 2024-08-28 | 2024-09-27 | 三维通信股份有限公司 | 网络层的数据传输方法和装置、存储介质及电子装置 |
-
2022
- 2022-10-17 CN CN202211267135.5A patent/CN117931465A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118714142A (zh) * | 2024-08-28 | 2024-09-27 | 三维通信股份有限公司 | 网络层的数据传输方法和装置、存储介质及电子装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113434288B (zh) | 内存管理的方法及电子设备 | |
CN116136826B (zh) | 内存访问方法、芯片、电子设备及计算机可读存储介质 | |
CN114461375B (zh) | 内存资源管理方法及电子设备 | |
CN111382087A (zh) | 一种内存管理方法及电子设备 | |
CN117130541B (zh) | 存储空间配置方法及相关设备 | |
CN114968836A (zh) | 垃圾回收的方法及电子设备 | |
CN117931465A (zh) | 一种数据传输方法及相关装置 | |
CN116315667B (zh) | 数据传输方法、装置、设备及存储介质 | |
CN118153110B (zh) | 一种数据处理方法及相关装置 | |
CN116627855B (zh) | 内存处理方法及相关装置 | |
CN116661987B (zh) | 内存申请方法和电子设备 | |
CN116662270B (zh) | 文件解析方法及相关装置 | |
CN113760191B (zh) | 数据读取方法、装置、存储介质和程序产品 | |
CN114489471B (zh) | 一种输入输出处理方法和电子设备 | |
WO2023274025A1 (zh) | 消息处理方法及相关装置 | |
CN117992397A (zh) | 一种冷热数据预估的方法和电子设备 | |
CN116860429A (zh) | 内存管理方法及电子设备 | |
CN113760192A (zh) | 数据读取方法、装置、存储介质和程序产品 | |
CN116719633B (zh) | 管理内存交换分区的方法和电子设备 | |
CN117707453B (zh) | 一种节点信息的读取方法、设备及存储介质 | |
CN119884512A (zh) | 页面加载方法、系统及相关装置 | |
CN119182768A (zh) | 一种访问网络的方法及电子设备 | |
CN119251880A (zh) | 人物标注方法及相关设备 | |
CN117170856A (zh) | 一种内存管理方法及相关装置 | |
WO2024179306A1 (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 |