CN116560878A - 一种内存共享方法和相关装置 - Google Patents

一种内存共享方法和相关装置 Download PDF

Info

Publication number
CN116560878A
CN116560878A CN202310831321.5A CN202310831321A CN116560878A CN 116560878 A CN116560878 A CN 116560878A CN 202310831321 A CN202310831321 A CN 202310831321A CN 116560878 A CN116560878 A CN 116560878A
Authority
CN
China
Prior art keywords
shared
data
memory
memory space
identifier
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
Application number
CN202310831321.5A
Other languages
English (en)
Other versions
CN116560878B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202310831321.5A priority Critical patent/CN116560878B/zh
Publication of CN116560878A publication Critical patent/CN116560878A/zh
Application granted granted Critical
Publication of CN116560878B publication Critical patent/CN116560878B/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/544Buffers; Shared memory; Pipes
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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/547Remote procedure calls [RPC]; Web services

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

一种内存共享方法和相关装置
技术领域
本申请涉及数据处理领域,特别是涉及一种内存共享方法和相关装置。
背景技术
前端开发者可以基于编程语言在运行环境中开发服务端应用,例如Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以用于开发高性能、可伸缩的网络应用程序,其编程语言可以为JavaScript语言。然而,在运行环境中存在需要大量传递数据的场景,应用性能较低。
发明内容
为了解决上述技术问题,本申请提供了一种内存共享方法和相关装置,在基于第一编程语言的运行环境中,可以通过编程接口加载基于第二编程语言的可执行文件,以利用第二编程语言实现内存共享,提高进程间通信效率,利于提高应用性能。
本申请实施例公开了如下技术方案:
一方面,本申请提供一种内存共享方法,所述方法包括:
在基于第一编程语言的运行环境中,通过编程接口加载基于第二编程语言的可执行文件,所述第二编程语言为相比于所述第一编程语言更底层的编程语言;
通过所述可执行文件,为目标内存标识确定对应的共享内存空间,将所述运行环境的内存中的待共享数据复制到所述共享内存空间,将所述目标内存标识和所述共享内存空间的内存区域信息存储到全局变量;所述共享内存空间用于供所述运行环境中的多个进程访问。
另一方面,本申请提供一种内存共享装置,所述装置包括:
文件加载单元,用于在基于第一编程语言的运行环境中,通过编程接口加载基于第二编程语言的可执行文件,所述第二编程语言为相比于所述第一编程语言更底层的编程语言;
内存确定单元,用于通过所述可执行文件,为目标内存标识确定对应的共享内存空间;所述共享内存空间用于供所述运行环境中的多个进程访问;
数据复制单元,用于将所述运行环境的内存中的待共享数据复制到所述共享内存空间;
内存信息存储单元,用于将所述目标内存标识和所述共享内存空间的内存区域信息存储到全局变量。
可选的,所述数据复制单元,包括:
数据信息获取单元,用于获取所述待共享数据在所述运行环境的内存中的栈中的字节起始地址,以及所述待共享数据的字节长度;
复制子单元,用于根据所述字节起始地址和所述字节长度,将所述待共享数据复制到所述共享内存空间。
可选的,若所述待共享数据的数据类型为引用类型,所述数据信息获取单元,包括:
字节长度获取单元,用于确定所述运行环境的内存中的堆中的待共享数据的字节长度;
空间分配单元,用于根据所述字节长度,在所述运行环境中的内存中的栈中为所述待共享数据分配中间存储空间,并获取所述中间存储空间的字符串指针;
写入单元,用于将所述待共享数据写入所述中间存储空间;
起始地址确定单元,用于利用所述中间存储空间的字符串指针,确定所述待共享数据在所述中间存储空间中的字节起始地址。
可选的,所述字节长度获取单元具体用于:
根据所述运行环境的内存中的堆中的待共享数据的各个属性值的字节长度,确定所述待共享数据的字节长度。
可选的,所述复制子单元具体用于:
根据所述字节起始地址和所述字节长度,利用所述栈中的字符串指针和所述共享内存空间中的字符串指针,将所述待共享数据中的各个位依次复制到所述共享内存空间。
可选的,所述装置还包括:
数据读取单元,用于获取所述共享内存空间中的待读取数据;
格式还原单元,用于若所述待读取数据的原始数据类型为引用类型,则将所述待读取数据进行格式还原得到具有引用类型的待处理数据,所述引用类型为对象类型或函数类型;若所述待读取数据的原始数据类型为基本类型,则将所述待读取数据进行格式还原得到具有基本类型的待处理数据,所述基本类型为数字类型或字符串类型。
可选的,所述装置还包括:
内存信息删除单元,用于通过所述可执行文件,删除所述全局变量中的目标内存信息,所述目标内存信息包括所述目标内存标识中的待删除标识和所述待删除标识对应的共享内存空间的内存区域信息,以释放所述待删除标识对应的共享内存空间。
可选的,所述内存确定单元具体用于:
创建初始共享内存空间,从所述初始共享内存空间中确定所述目标内存标识对应的共享内存空间;或,
为所述目标内存标识创建对应的共享内存空间。
可选的,所述内存确定单元具体用于:
若不存在目标内存标识,为目标内存标识确定对应的共享内存空间;
若存在目标内存标识,获取所述目标内存标识对应的共享内存空间或为所述目标内存标识更新对应的共享内存空间。
可选的,所述内存确定单元具体用于:
在存储空间中创建目标内存标识对应的文件,所述文件所在位置作为所述目标内存标识对应的共享内存空间。
可选的,所述多个进程用于进行图像处理、音视频编解码和网络通信中的至少一项。
另一方面,本申请提供一种计算机设备,所述设备包括处理器以及存储器:
所述存储器用于存储计算机程序,并将所述计算机程序传输给所述处理器;
所述处理器用于根据所述计算机程序中的指令执行上述方面所述的内存共享方法。
另一方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行上述方面所述的内存共享方法。
另一方面,本申请实施例提供了一种包括计算机程序的计算机程序产品,当其在计算机设备上运行时,使得所述计算机设备执行所述的内存共享方法。
由上述技术方案可以看出,在基于第一编程语言的运行环境中,可以通过编程接口加载基于第二编程语言的可执行文件,第二编程语言为相比于第一编程语言更底层的编程语言,通过基于第二编程语言的可执行文件,可以为目标内存标识确定对应的共享内存空间,将运行环境的内存中的待共享数据复制到共享内存空间,由于共享内存空间用于供运行环境中的多个进程访问,因此多个进程可以通过访问共享内存空间中的同一数据从而实现数据的共享,提高进程间数据传输效率,利于提高应用性能。此外,还可以将目标内存标识和共享内存空间的内存区域信息存储到全局变量中,这样即使可执行文件执行完毕,目标内存标识和共享内存空间的内存区域信息也得到保留,共享内存空间不会被释放,其内存储的数据不会被删除,因此即使可执行文件执行完毕也不会影响多个进程对共享内存空间中的数据的访问。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种内存共享方法的应用场景的示意图;
图2为本申请实施例提供的一种内存共享方法的流程图;
图3为本申请实施例提供的一种通过Rust程序创建共享内存空间的过程示意图;
图4为本申请实施例提供的另一种内存共享方法的流程示意图;
图5为本申请实施例提供的一种通过Rust程序的字节起始地址获取方式示意图;
图6为本申请实施例提供的一种通过Rust程序的数据复制的过程示意图;
图7为本申请实施例提供的又一种内存共享方法的流程示意图;
图8为本申请实施例提供的一种通过Rust程序的获取待共享数据的字节长度的过程示意图;
图9为本申请实施例提供的一种通过Rust程序的获取待共享数据在栈中的字节起始地址的过程示意图;
图10为本申请实施例提供的另一种通过Rust程序的数据复制的过程示意图;
图11为本申请实施例提供的一种通过Rust程序的创建全局变量的过程示意图;
图12为本申请实施例提供的一种通过Rust程序的存储内存区域信息的过程示意图;
图13为本申请实施例提供的一种通过Rust程序的格式还原过程示意图;
图14为本申请实施例提供的一种通过Rust程序的释放内存的过程示意图;
图15为本申请实施例提供的一种内存共享装置的结构框图;
图16为本申请实施例提供的一种终端设备的结构图;
图17为本申请实施例提供的一种服务器的结构图。
具体实施方式
下面结合附图,对本申请的实施例进行描述。
目前前端开发者可以基于编程语言在运行环境中开发服务端应用,然而,在运行环境中存在需要大量传递数据的场景,应用性能较低。
为了解决上述技术问题,本申请提供了一种内存共享方法和相关装置,在基于第一编程语言的运行环境中,可以通过编程接口加载基于第二编程语言的可执行文件,以利用第二编程语言实现内存共享,提高进程间通信效率,利于提高应用性能。
本申请实施例所提供的内存共享方法可以通过计算机设备实施,该计算机设备可以是终端设备或服务器,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云计算服务的云服务器。终端设备包括但不限于手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等。终端设备以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
为了便于理解本申请提供的技术方案,接下来,将结合一种实际应用场景,对本申请实施例提供的一种内存共享方法进行介绍。
图1示出了本申请实施例提供的一种内存共享方法的应用场景的示意图,该场景中,包括服务器10,服务器10可以作为前述计算机设备,用于实现基于第一编程语言的运行环境中的内存共享。
服务器10在基于第一编程语言的运行环境中,可以通过编程接口加载基于第二编程语言的可执行文件,第二编程语言为相比于第一编程语言更底层的编程语言,通过基于第二编程语言的可执行文件,可以为目标内存标识确定对应的共享内存空间,将运行环境的内存中的待共享数据复制到共享内存空间,由于共享内存空间用于供运行环境中的多个进程访问,因此多个进程可以通过访问共享内存空间中的同一数据从而实现数据的共享,提高进程间数据传输效率,利于提高应用性能。
此外,服务器10还可以将目标内存标识和共享内存空间的内存区域信息存储到全局变量中,这样即使可执行文件执行完毕,目标内存标识和共享内存空间的内存区域信息也得到保留,共享内存空间不会被释放,其内存储的数据不会被删除,因此即使可执行文件执行完毕也不会影响多个进程对共享内存空间中的数据的访问。
图2为本申请实施例提供的一种内存共享方法的流程图,本实施例中,以服务器作为前述计算机设备进行说明,该内存共享方法可以包括:
S101,在基于第一编程语言的运行环境中,通过编程接口加载基于第二编程语言的可执行文件。
前端开发者可以基于编程语言在运行环境中开发服务端应用,例如Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以用于开发高性能、可伸缩的网络应用程序,其编程语言可以为JavaScript语言。应用可以由计算机设备运行,应用可以包括PC客户端程序、移动客户端程序、后台程序等。计算机设备为应用分配计算资源来执行应用程序相关的数据处理逻辑,计算资源可以包括进程,每个进程可以包括多个线程,每个线程可以用于执行相应的数据处理逻辑。计算机设备还可以为应用分配内存空间,内存空间可以包括为应用分配的堆和为线程分配的栈,堆用于存储应用运行过程中的数据,栈用于存储线程所执行的函数的参数、局部变量等。
然而,在运行环境中存在需要大量传递数据的场景,例如包括多个进程的应用用于进行图像处理、音视频编解码或网络通信中的至少一种,相应的多个进程用于进行图像处理、音视频编解码或网络通信中的至少一种,不同进程可以实现不同的功能,各个进程之间协同进行数据处理,因此需要进程间进行大量数据传输。例如各个进程将独立的结果通过消息通信的形式传递给主进程,由主进程进行最终结果的返回,实现图像处理、音视频编解码或网络通信功能。
共享内存是一种进程间通信(Inter Process Communication,IPC)的方式,它允许多个进程共享同一块内存区域,这样多个进程均可以访问同一块共享的内存区块来访问同一块数据,实现数据的共享和传递,从而节省不同进程间的通信开销。然而运行环境中的编程语言(例如Node.js)是上层的应用语言,对硬件的可控性较低,缺少直接操作***内存的能力,因此构建的运行环境中无法实现内存的共享,各个进程之间通过消息通信的形式进行数据传输,不利于提高应用性能。例如子进程在将数据序列化之后传递给父进程,由父进程进行反序列化,存在较大的开销,且无法被序列化的数据无法实现进程间通信。
本申请实施例中,在基于第一编程语言的运行环境中,可以通过编程接口加载基于第二编程语言的可执行文件,由基于第二编程语言的可执行文件所指示的代码实现内存共享,使第一编程语言的运行环境中可以实现内存共享,节省不同进程间的通信开销,提高应用性能。在基于第一编程语言的运行环境中的多进程架构中编写代码更加自然,无需通过进程通信来互相传递数据,在代码编写上仿佛所有的代码都运行在同一块内存空间,提高代码编写便利性。
基于第二编程语言的可执行文件可以实现内存共享,第二编程语言为相比于第一编程语言更底层的编程语言,其对硬件的可控性较高,这样结合第一编程语言和第二编程语言可以兼顾应用总体功能和对硬件的可控性,编程接口可以将基于第二编程语言的程序进行编译得到可执行文件,使可执行文件能够在基于第一编程豫园的运行环境中被执行。
举例来说,第一编程语言可以为Node.js,第二编程语言可以为Rust,Rust是一种***级编程语言,由Mozilla 公司开发,它的设计目标是提供一种安全、并发、高效的编程语言,编程接口可以为应用程序编辑接口(Application Programming Interface,API),具体的可以为N-API(Node.js API),N-API是一组用于编写Node.js C++扩展的API,,它提供了一种稳定、跨版本的编程接口,使得C++扩展可以在不同版本的Node.js 上运行,而不需要重新编译,更加容易地开发、维护和分发。这样,可以通过Rust语言编程实现不同进程之间内存共享的操作,并且借助N-API将Rust语言代码编译为可以在Node.js环境调用的可执行文件,这样可以在Node.js环境中实现多进程的代码架构下共享同一块内存的能力。
S102,通过可执行文件,为目标内存标识确定对应的共享内存空间。
本申请实施例中,可以通过可执行文件,为目标内存标识确定对应的共享内存空间,目标内存标识用于唯一指示共享内存空间,共享内存空间可以供运行环境中的多个进程访问,实现多个进程之间的数据共享。可执行文件通过对基于第二编程语言的程序编译得到,基于第二编程语言的程序例如为Rust程序。
内存标识可以表示为mem_id,内存标识可以包括一个或多个,多个内存标识用于指示不同的共享内存空间,内存标识被传入值后,该值作为目标内存标识,例如mem_id为memory.link,对应第一个共享内存空间,mem_id为其他值,对应其他共享内存空间。
为目标内存标识确定对应的共享内存空间之前,可以确定是否存在目标内存标识,若是,可以利用已有的目标内存标识对应的共享内存空间,则在该共享内存空间被利用时,该共享内存空间中的内存数据将被新的内存数据覆盖,或者为目标内存标识重新确定对应的共享内存空间。即可以获取目标内存标识对应的共享内存空间作为为目标内存标识确定的共享内存空间,或在为目标内存标识重新分配共享内存空间之后为目标内存标识更新对应的共享内存空间。若不存在目标内存标识,可以为目标内存标识确定对应的共享内存空间。这样可以对共享内存空间进行有效管理,提高空间利用率。
为目标内存标识确定对应的共享内存空间,可以具体为,创建(create)初始共享内存空间,从初始共享内存空间中确定目标内存标识对应的共享内存空间,即可以从已创建的初始共享内存空间中为目标内存标识分配对应的共享内存空间。或者,可以为目标内存标识创建对应的共享内存空间。共享内存空间的确定方式可以根据实际情况确定,提高内存空间的利用率。
共享内存空间或初始共享内存空间的创建,可以通过Rust生态中的共享内存(shared_memory,SHmem)模块来实现,创建的共享内存空间或初始共享内存空间为空的共享内存区域,可以用于存放待共享的数据。参考图3所示,为本申请实施例中一种通过Rust程序创建共享内存空间的过程示意图,创建共享内存空间时,可以定义共享内存空间对应的目标内存标识(mem_id)、共享内存空间的容量(size)等。
在为目标内存标识确定对应的共享内存空间的过程中,可以在存储空间中创建目标内存标识对应的文件,该文件所在位置作为目标内存标识对应的共享内存空间,例如目标内存标识对应的文件,可以以目标内存标识作为文件名称,例如当mem_id为memory.link时,可以创建一个路径为 /user/memory.link 的文件,当做目标内存标识对应的共享内存空间。
S103,将运行环境的内存中的待共享数据复制到共享内存空间。
在为目标内存标识确定共享内存空间之后,可以将待分享数据复制(copy)到共享内存空间中,对待分享数据的复制通过可执行文件实现。待分享数据可以由开发人员定义,也可以根据预设规则定义,这样共享内存空间中的待分享数据可以被多个进程访问,实现了不同进程之间的内存共享和数据共享。
共享内存空间中可以存放一个待共享数据,也可以存放多个待共享数据,或者取决于目标内存标识与待共享数据的关联关系,即与目标内存标识对应的待共享数据可以存放到目标内存标识对应的共享内存空间中。由于共享内存空间用于供运行环境中的多个进程访问,因此多个进程可以通过访问共享内存空间中的同一数据从而实现数据的共享,提高进程间数据传输效率,利于提高应用性能。
参考图4所示,为本申请实施例中另一种内存共享方法的流程示意图,待共享数据可以存储在运行环境的内存中,将运行环境的内存中的待共享数据复制到共享内存空间,可以具体为,S1031,获取待共享数据在运行环境的内存中的栈中的字节起始地址,以及待共享数据的字节长度,S1032,根据字节起始地址和字节长度,将待共享数据复制到共享内存空间,这样可以将非共享的栈中的待共享数据复制到可共享的共享内存空间,实现了待共享数据在多个进程间的共享。
实际操作中,运行环境为Node.js环境时,待共享数据的数据类型可以包括基本类型和引用类型。同一共享内存空间中可以存储相同数据类型的数据,也可以存储不同数据类型的数据。
其中,基本类型包括数字类型和字符串类型,数据类型为基本类型的待共享数据通常存储在内存中的栈中,则可以通过前述方式将其复制到共享内存空间中。在将待共享数据复制到共享内存空间的过程中,S1032可以具体为,根据字节起始地址和字节长度,利用栈中的字符串指针和共享内存空间中的字符串指针,将待共享数据中的各个位依次复制到共享内存空间,具体的,可以利用Rust编程语言提供的内存复制能力,将栈中的字符串指针所指向的字符复制到共享内存空间中的字符串指针指向的内存位置,经过复制的待共享数据在共享内存空间中以二进制的形式存在。
参考图5所示,为本申请实施例中一种通过Rust程序的字节起始地址获取方式示意图,其中可以将基本类型的数据转换为目标格式,从而获取到待共享数据在栈中的字节起始地址,目标格式可以为uint8(u8)格式。参考图6所示,为本申请实施例中一种通过Rust程序的数据复制的过程示意图,栈中的字符串指针可以表示为js字符串指针,共享内存空间中的字符串指针可以表示为ptr字符串指针,在数据复制过程中,可以将js字符串指针所指向的字符复制到ptr指向的共享内存位置。
引用类型可以包括函数类型和对象类型,对象类型的待共享数据可以包括多个属性,数据类型为引用类型的待共享数据通常存储在内存中的堆中,较难从堆中直接复制到共享内存空间,因此可以先将待共享数据从堆中复制到栈中,再从栈中复制到共享内存空间中,这里用存放待共享数据的栈可以记为中间存储空间。其中,在将待共享数据从栈中复制到共享内存空间之前,可以获取待共享数据的字节长度,以及其在栈中的字节起始地址。
具体的,参考图7所示,为本申请实施例中又一种内存共享方法的流程示意图,S1031可以具体为,S1031A,确定运行环境的内存中的堆中的待共享数据的字节长度,S1031B,根据该字节长度,在运行环境中的内存中的栈中为待共享数据分配中间存储空间,并获取中间存储空间的字符串指针,S1031C,将待共享数据写入中间存储空间,S1031D,利用中间存储空间的字符串指针,确定待共享数据在中间存储空间中的字节起始地址。待共享数据在中间存储空间中的字节起始地址即为待共享数据在运行环境的内存中的栈中的字节起始地址,而后再根据字节起始地址和字节长度,将待共享数据复制到共享内存空间。其中根据字节长度分配的中间存储空间可以适配待共享数据的大小,提高存储空间的利用效率。通过中间存储空间的字符串指针可以辅助获取字节起始地址,以及辅助待共享数据的复制,从而实现数据类型为引用类型的待共享数据的共享。
这样可以将数据类型为引用类型的待共享数据存储到共享内存空间,实现引用类型的数据的进程间共享,克服传统方案中进程间只能通过消息通信的方式传输可序列化的数据的限制,使各个进程之间可以通过共享内存的方式共享不可序列化的引用类型的数据,子进程可以直接访问父进程内存中的任意数据,从而可以访问父进程中引用类型的数据所支持的服务,克服了需要进行序列化才能进行进程间数据传输的限制。
由于待共享数据的数据类型为引用类型时,待共享数据可以包括多个属性,因此运行环境的内存中的堆中的待共享数据的字节长度,可以根据运行环境中的内存中的堆中的待共享数据的各个属性值的字节长度确定,例如待共享数据的字节长度可以为各个属性值的字节长度之和。待共享数据的数据类型为对象类型时,可以表示为jsObject,可以通过Rust的布局接口(layout api),来动态获取待共享数据在堆中的实际字节长度。
在将待共享数据复制到共享内存空间的过程中,S1032可以具体为,根据字节起始地址和字节长度,利用栈(即中间存储空间)中的字符串指针和共享内存空间中的字符串指针,将待共享数据中的各个位依次复制到共享内存空间,具体的,可以利用Rust编程语言提供的内存复制能力,将栈中的字符串指针所指向的字符复制到共享内存空间中的字符串指针指向的内存位置,经过复制的待共享数据在共享内存空间中以二进制的形式存在。
参考图8所示,为本申请实施例中一种通过Rust程序的获取待共享数据的字节长度的过程示意图,通过Rust程序的layout方法可以获取jsObject的实际字节长度。参考图9所示,为本申请实施例中一种通过Rust程序的获取待共享数据在栈中的字节起始地址的过程示意图,具体的,可以为待共享数据分配中间存储空间并获取中间存储空间的字符串指针,将待共享数据复制到中间存储空间中后,借助字符串指针获取待共享数据在栈中的字节起始地址,以便根据字节起始地址和字节长度进行待共享数据的复制。参考图10所示,为本申请实施例中另一种通过Rust程序的数据复制的过程示意图,可以将中间存储空间中的字符串指针可以表示为js字符串指针,共享内存空间中的字符串指针可以表示为ptr字符串指针,在数据复制过程中,可以将js字符串指针所指向的字符复制到ptr指向的共享内存位置。
S104,将目标内存标识和共享内存空间的内存区域信息存储到全局变量。
本申请实施例中,还可以将目标内存标识和共享内存空间的内存区域信息存储到全局变量中,对目标内存标识和共享内存空间的内存区域信息的存储可以通过可执行文件实现,这样即使可执行文件执行完毕,目标内存标识和共享内存空间的内存区域信息也得到保留,共享内存空间不会被***释放,其内部的待共享数据不会被删除,因此即使可执行文件执行完毕也不会影响多个进程对共享内存空间的访问。当然,也可以在共享内存空间创建完成之后将目标内存标识和共享内存空间的内存区域信息存储到全局变量,以保留共享内存空间,供后续使用。
具体的,可以预先创建Rust内存中的全局变量用于保存内存区域信息,全局变量的类型可以为哈希表(HashMap),其键(key)为字符串(string)类型,为内存标识,值为内存标识对应的共享内存空间的内存区域信息,通过全局变量可以存储目标内存标识和共享内存空间的内存区域信息之间的键值对,每个键值对用于维护一块共享内存空间。参考图11所示,为本申请实施例中一种通过Rust程序的创建全局变量的过程示意图,在创建全局变量时,全局变量经过初始化设置,以供后续使用。参考图12所示,为本申请实施例中一种通过Rust程序的存储内存区域信息的过程示意图,向全局变量***(insert)目标内存标识和共享内存空间的内存区域信息。
本申请实施例中,在共享内存空间中存储的数据以二进制的形式存储,因此在获取共享内存空间中的待读取数据之后,还可以对待读取数据进行格式还原得到原始数据类型的待处理数据,具体的,若待读取数据的原始数据类型为引用类型,可以将待读取数据进行格式还原得到具有运用类型的待处理数据,若待读取数据的原始数据类型为基本类型,则可以将待读取数据进行格式还原得到具有基本类型的待处理数据。对待读取数据的格式还原可以通过可执行文件实现。参考图13所示,为本申请实施例中一种通过Rust程序的格式还原过程示意图,通过str::from_utf8 可以将待读取数据还原为字符串类型的待处理数据。
本申请实施例中,还可以通过执行文件,删除全局变量中的目标内存信息,目标内存信息包括目标内存标识中的待删除标识和待删除标识对应的共享内存空间的内存区域信息,以释放待删除标识对应的共享内存空间,实现对共享内存空间的控制。参考图14所示,为本申请实施例中一种通过Rust程序的释放内存的过程示意图,Rust提供clear方法,用于删除待删除标识和待删除标识对应的共享内存空间的内存区域信息,这样该共享内存空间被释放,所存储的数据被删除。
基于本申请实施例提供的一种内存共享方法,本申请实施例还提供了一种内存共享装置,参考图15所示,为本申请实施例提供的一种内存共享装置的结构框图,该内存共享装置1300包括:
文件加载单元1301,用于在基于第一编程语言的运行环境中,通过编程接口加载基于第二编程语言的可执行文件,所述第二编程语言为相比于所述第一编程语言更底层的编程语言;
内存确定单元1302,用于通过所述可执行文件,为目标内存标识确定对应的共享内存空间;所述共享内存空间用于供所述运行环境中的多个进程访问;
数据复制单元1303,用于将所述运行环境的内存中的待共享数据复制到所述共享内存空间;
内存信息存储单元1304,用于将所述目标内存标识和所述共享内存空间的内存区域信息存储到全局变量。
可选的,所述数据复制单元1303,包括:
数据信息获取单元,用于获取所述待共享数据在所述运行环境的内存中的栈中的字节起始地址,以及所述待共享数据的字节长度;
复制子单元,用于根据所述字节起始地址和所述字节长度,将所述待共享数据复制到所述共享内存空间。
可选的,若所述待共享数据的数据类型为引用类型,所述数据信息获取单元,包括:
字节长度获取单元,用于确定所述运行环境的内存中的堆中的待共享数据的字节长度;
空间分配单元,用于根据所述字节长度,在所述运行环境中的内存中的栈中为所述待共享数据分配中间存储空间,并获取所述中间存储空间的字符串指针;
写入单元,用于将所述待共享数据写入所述中间存储空间;
起始地址确定单元,用于利用所述中间存储空间的字符串指针,确定所述待共享数据在所述中间存储空间中的字节起始地址。
可选的,所述字节长度获取单元具体用于:
根据所述运行环境的内存中的堆中的待共享数据的各个属性值的字节长度,确定所述待共享数据的字节长度。
可选的,所述复制子单元具体用于:
根据所述字节起始地址和所述字节长度,利用所述栈中的字符串指针和所述共享内存空间中的字符串指针,将所述待共享数据中的各个位依次复制到所述共享内存空间。
可选的,所述装置还包括:
数据读取单元,用于获取所述共享内存空间中的待读取数据;
格式还原单元,用于若所述待读取数据的原始数据类型为引用类型,则将所述待读取数据进行格式还原得到具有引用类型的待处理数据,所述引用类型为对象类型或函数类型;若所述待读取数据的原始数据类型为基本类型,则将所述待读取数据进行格式还原得到具有基本类型的待处理数据,所述基本类型为数字类型或字符串类型。
可选的,所述装置还包括:
内存信息删除单元,用于通过所述可执行文件,删除所述全局变量中的目标内存信息,所述目标内存信息包括所述目标内存标识中的待删除标识和所述待删除标识对应的共享内存空间的内存区域信息,以释放所述待删除标识对应的共享内存空间。
可选的,所述内存确定单元1302具体用于:
创建初始共享内存空间,从所述初始共享内存空间中确定所述目标内存标识对应的共享内存空间;或,
为所述目标内存标识创建对应的共享内存空间。
可选的,所述内存确定单元1302具体用于:
若不存在目标内存标识,为目标内存标识确定对应的共享内存空间;
若存在目标内存标识,获取所述目标内存标识对应的共享内存空间或为所述目标内存标识更新对应的共享内存空间。
可选的,所述内存确定单元1302具体用于:
在存储空间中创建目标内存标识对应的文件,所述文件所在位置作为所述目标内存标识对应的共享内存空间。
可选的,所述多个进程用于进行图像处理、音视频编解码和网络通信中的至少一项。
由上述技术方案可以看出,在基于第一编程语言的运行环境中,可以通过编程接口加载基于第二编程语言的可执行文件,第二编程语言为相比于第一编程语言更底层的编程语言,通过基于第二编程语言的可执行文件,可以为目标内存标识确定对应的共享内存空间,将运行环境的内存中的待共享数据复制到共享内存空间,由于共享内存空间用于供运行环境中的多个进程访问,因此多个进程可以通过访问共享内存空间中的同一数据从而实现数据的共享,提高进程间数据传输效率,利于提高应用性能。此外,还可以将目标内存标识和共享内存空间的内存区域信息存储到全局变量中,这样即使可执行文件执行完毕,目标内存标识和共享内存空间的内存区域信息也得到保留,共享内存空间不会被释放,其内存储的数据不会被删除,因此即使可执行文件执行完毕也不会影响多个进程对共享内存空间中的数据的访问。
本申请实施例还提供了一种计算机设备,该计算机设备为前述介绍的计算机设备,可以包括终端设备或服务器,前述的内存共享装置可以配置在该计算机设备中。下面结合附图对该计算机设备进行介绍。
若该计算机设备为终端设备,请参见图16所示,本申请实施例提供了一种终端设备,以终端设备为手机为例:
图16示出的是与本申请实施例提供的终端设备相关的手机的部分结构的框图。参考图16,手机包括:射频(Radio Frequency,简称RF)电路1410、存储器1420、输入单元1430、显示单元1440、传感器1450、音频电路1460、无线保真(简称WiFi)模块1470、处理器1480、以及电源1490等部件。本领域技术人员可以理解,图16中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图16对手机的各个构成部件进行具体的介绍:
RF电路1410可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1480处理;另外,将设计上行的数据发送给基站。
存储器1420可用于存储软件程序以及模块,处理器1480通过运行存储在存储器1420的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1430可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1430可包括触控面板1431以及其他输入设备1432。
显示单元1440可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1440可包括显示面板1441。
手机还可包括至少一种传感器1450,比如光传感器、运动传感器以及其他传感器。
音频电路1460、扬声器1461,传声器1462可提供用户与手机之间的音频接口。
WiFi属于短距离无线传输技术,手机通过WiFi模块1470可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。
处理器1480是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1420内的软件程序和/或模块,以及调用存储在存储器1420内的数据,执行手机的各种功能和处理数据。
手机还包括给各个部件供电的电源1490(比如电池)。
在本实施例中,该终端设备所包括的处理器1480还具有以下功能:
在基于第一编程语言的运行环境中,通过编程接口加载基于第二编程语言的可执行文件,所述第二编程语言为相比于所述第一编程语言更底层的编程语言;
通过所述可执行文件,为目标内存标识确定对应的共享内存空间,将所述运行环境的内存中的待共享数据复制到所述共享内存空间,将所述目标内存标识和所述共享内存空间的内存区域信息存储到全局变量;所述共享内存空间用于供所述运行环境中的多个进程访问。
若计算机设备为服务器,本申请实施例还提供一种服务器,请参见图17所示,图17为本申请实施例提供的服务器1500的结构图,服务器1500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器1522,如中央处理器(Central ProcessingUnits,简称CPU),存储器1532,一个或一个以上存储应用程序1542或数据1544的存储介质1530(例如一个或一个以上海量存储设备)。其中,存储器1532和存储介质1530可以是短暂存储或持久存储。存储在存储介质1530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,处理器1522可以设置为与存储介质1530通信,在服务器1500上执行存储介质1530中的一系列指令操作。
服务器1500还可以包括一个或一个以上电源1526,一个或一个以上有线或无线网络接口1550,一个或一个以上输入输出接口1558,和/或,一个或一个以上操作***1541,例如Windows ServerTM,Mac OS XTM,UnixTM, LinuxTM,FreeBSDTM等等。
上述实施例中由服务器所执行的步骤可以基于图17所示的服务器结构。
另外,本申请实施例还提供了一种存储介质,所述存储介质用于存储计算机程序,所述计算机程序用于执行上述实施例提供的方法。
本申请实施例还提供了一种包括指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例提供的方法。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质可以是下述介质中的至少一种:只读存储器(英文:Read-only Memory,缩写:ROM)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备及***实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的设备及***实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本申请的一种具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。而且本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。因此,本申请的保护范围应该以权利要求的保护范围为准。

Claims (15)

1.一种内存共享方法,其特征在于,所述方法包括:
在基于第一编程语言的运行环境中,通过编程接口加载基于第二编程语言的可执行文件,所述第二编程语言为相比于所述第一编程语言更底层的编程语言;
通过所述可执行文件,为目标内存标识确定对应的共享内存空间,将所述运行环境的内存中的待共享数据复制到所述共享内存空间,将所述目标内存标识和所述共享内存空间的内存区域信息存储到全局变量;所述共享内存空间用于供所述运行环境中的多个进程访问。
2.根据权利要求1所述的方法,其特征在于,所述将所述运行环境的内存中的待共享数据复制到所述共享内存空间,包括:
获取所述待共享数据在所述运行环境的内存中的栈中的字节起始地址,以及所述待共享数据的字节长度;
根据所述字节起始地址和所述字节长度,将所述待共享数据复制到所述共享内存空间。
3.根据权利要求2所述的方法,其特征在于,若所述待共享数据的数据类型为引用类型,所述获取所述待共享数据在所述运行环境的内存中的栈中的字节起始地址,以及所述待共享数据的字节长度,包括:
确定所述运行环境的内存中的堆中的待共享数据的字节长度;
根据所述字节长度,在所述运行环境中的内存中的栈中为所述待共享数据分配中间存储空间,并获取所述中间存储空间的字符串指针;
将所述待共享数据写入所述中间存储空间;
利用所述中间存储空间的字符串指针,确定所述待共享数据在所述中间存储空间中的字节起始地址。
4.根据权利要求3所述的方法,其特征在于,所述确定所述运行环境的内存中的堆中的待共享数据的字节长度,包括:
根据所述运行环境的内存中的堆中的待共享数据的各个属性值的字节长度,确定所述待共享数据的字节长度。
5.根据权利要求2所述的方法,其特征在于,所述根据所述字节起始地址和所述字节长度,将所述待共享数据复制到所述共享内存空间,包括:
根据所述字节起始地址和所述字节长度,利用所述栈中的字符串指针和所述共享内存空间中的字符串指针,将所述待共享数据中的各个位依次复制到所述共享内存空间。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
获取所述共享内存空间中的待读取数据;
若所述待读取数据的原始数据类型为引用类型,则将所述待读取数据进行格式还原得到具有引用类型的待处理数据,所述引用类型为对象类型或函数类型;
若所述待读取数据的原始数据类型为基本类型,则将所述待读取数据进行格式还原得到具有基本类型的待处理数据,所述基本类型为数字类型或字符串类型。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
通过所述可执行文件,删除所述全局变量中的目标内存信息,所述目标内存信息包括所述目标内存标识中的待删除标识和所述待删除标识对应的共享内存空间的内存区域信息,以释放所述待删除标识对应的共享内存空间。
8.根据权利要求1-6任一项所述的方法,其特征在于,所述为目标内存标识确定对应的共享内存空间,包括:
创建初始共享内存空间,从所述初始共享内存空间中确定所述目标内存标识对应的共享内存空间;或,
为所述目标内存标识创建对应的共享内存空间。
9.根据权利要求1-6任一项所述的方法,其特征在于,所述为目标内存标识确定对应的共享内存空间,包括:
若不存在目标内存标识,为目标内存标识确定对应的共享内存空间;
若存在目标内存标识,获取所述目标内存标识对应的共享内存空间或为所述目标内存标识更新对应的共享内存空间。
10.根据权利要求1-6任一项所述的方法,其特征在于,所述为目标内存标识确定对应的共享内存空间,包括:
在存储空间中创建目标内存标识对应的文件,所述文件所在位置作为所述目标内存标识对应的共享内存空间。
11.根据权利要求1-6任一项所述的方法,其特征在于,所述多个进程用于进行图像处理、音视频编解码和网络通信中的至少一项。
12.一种内存共享装置,其特征在于,所述装置包括:
文件加载单元,用于在基于第一编程语言的运行环境中,通过编程接口加载基于第二编程语言的可执行文件,所述第二编程语言为相比于所述第一编程语言更底层的编程语言;
内存确定单元,用于通过所述可执行文件,为目标内存标识确定对应的共享内存空间;所述共享内存空间用于供所述运行环境中的多个进程访问;
数据复制单元,用于将所述运行环境的内存中的待共享数据复制到所述共享内存空间;
内存信息存储单元,用于将所述目标内存标识和所述共享内存空间的内存区域信息存储到全局变量。
13.一种计算机设备,其特征在于,所述计算机设备包括处理器以及存储器:
所述存储器用于存储计算机程序,并将所述计算机程序传输给所述处理器;
所述处理器用于根据所述计算机程序中的指令执行权利要求1-11中任意一项所述的内存共享方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行权利要求1-11中任意一项所述的内存共享方法。
15.一种包括计算机程序的计算机程序产品,其特征在于,当其在计算机设备上运行时,使得所述计算机设备执行权利要求1-11中任意一项所述的内存共享方法。
CN202310831321.5A 2023-07-07 2023-07-07 一种内存共享方法和相关装置 Active CN116560878B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310831321.5A CN116560878B (zh) 2023-07-07 2023-07-07 一种内存共享方法和相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310831321.5A CN116560878B (zh) 2023-07-07 2023-07-07 一种内存共享方法和相关装置

Publications (2)

Publication Number Publication Date
CN116560878A true CN116560878A (zh) 2023-08-08
CN116560878B CN116560878B (zh) 2024-03-22

Family

ID=87486518

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310831321.5A Active CN116560878B (zh) 2023-07-07 2023-07-07 一种内存共享方法和相关装置

Country Status (1)

Country Link
CN (1) CN116560878B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117077115A (zh) * 2023-10-13 2023-11-17 沐曦集成电路(上海)有限公司 芯片验证阶段跨语言多进程交互方法、电子设备和介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160285970A1 (en) * 2015-03-27 2016-09-29 International Business Machines Corporation Network communication between virtual machine applications via direct memory access
CN114168269A (zh) * 2021-12-15 2022-03-11 工银科技有限公司 WebAssembly的数据执行方法、装置、设备及介质
CN114518969A (zh) * 2022-02-18 2022-05-20 杭州朗和科技有限公司 进程间通信方法、***、存储介质和计算机设备
CN114764426A (zh) * 2021-01-15 2022-07-19 腾讯科技(深圳)有限公司 数据访问方法和装置、数据存储方法和装置
CN115576716A (zh) * 2022-10-28 2023-01-06 珠海一微半导体股份有限公司 一种基于多进程的内存管理方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160285970A1 (en) * 2015-03-27 2016-09-29 International Business Machines Corporation Network communication between virtual machine applications via direct memory access
CN114764426A (zh) * 2021-01-15 2022-07-19 腾讯科技(深圳)有限公司 数据访问方法和装置、数据存储方法和装置
CN114168269A (zh) * 2021-12-15 2022-03-11 工银科技有限公司 WebAssembly的数据执行方法、装置、设备及介质
CN114518969A (zh) * 2022-02-18 2022-05-20 杭州朗和科技有限公司 进程间通信方法、***、存储介质和计算机设备
CN115576716A (zh) * 2022-10-28 2023-01-06 珠海一微半导体股份有限公司 一种基于多进程的内存管理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
ZHANGYUANG: "在Node.js不同进程间共享内存", pages 1 - 25, Retrieved from the Internet <URL:https://github.com/zhangyuang/sharedMemory> *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117077115A (zh) * 2023-10-13 2023-11-17 沐曦集成电路(上海)有限公司 芯片验证阶段跨语言多进程交互方法、电子设备和介质
CN117077115B (zh) * 2023-10-13 2023-12-15 沐曦集成电路(上海)有限公司 芯片验证阶段跨语言多进程交互方法、电子设备和介质

Also Published As

Publication number Publication date
CN116560878B (zh) 2024-03-22

Similar Documents

Publication Publication Date Title
US12019652B2 (en) Method and device for synchronizing node data
US20210342071A1 (en) Input/output processing in a distributed storage node with rdma
US11093148B1 (en) Accelerated volumes
CN111475235B (zh) 函数计算冷启动的加速方法、装置、设备及存储介质
CN111787126B (zh) 容器创建方法、服务器及存储介质
CN108628688B (zh) 一种消息处理方法、装置及设备
US10817312B2 (en) Programming model for performant computing in document-oriented storage services
CN116560878B (zh) 一种内存共享方法和相关装置
CN112578997A (zh) 一种数据迁移方法、***及相关设备
US20120254355A1 (en) System and method for migrating an application
CN111240766A (zh) 应用启动方法、装置、电子设备及计算机可读存储介质
CN111694639B (zh) 进程容器地址的更新方法、装置和电子设备
CN110750221B (zh) 卷克隆方法、装置、电子设备及机器可读存储介质
CN115421787A (zh) 指令执行方法、装置、设备、***、程序产品及介质
CN109918381B (zh) 用于存储数据的方法和装置
CN110545313A (zh) 消息推送控制方法、装置及电子设备
JP2005228183A (ja) プログラム実行方法、および、プログラム実行のための計算機システム
CN113127430B (zh) 镜像信息处理方法、装置、计算机可读介质及电子设备
EP4086781A1 (en) Data reading method and terminal
JP2019523480A (ja) Nandストレージデバイスのためのプリエンプティブ圧縮解除スケジューリング
WO2023066246A1 (zh) 云手机安装应用的方法、***和客户端云手机
CN115562871A (zh) 内存分配管理的方法和装置
CN112631609B (zh) 编译方法、装置、终端及存储介质
CN115426375A (zh) 一种数据处理方法和数据处理***
CN114595080A (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