CN115729716B - 多线程内存管理方法及系统、计算机设备、存储介质 - Google Patents
多线程内存管理方法及系统、计算机设备、存储介质 Download PDFInfo
- Publication number
- CN115729716B CN115729716B CN202310036979.7A CN202310036979A CN115729716B CN 115729716 B CN115729716 B CN 115729716B CN 202310036979 A CN202310036979 A CN 202310036979A CN 115729716 B CN115729716 B CN 115729716B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory page
- thread
- page
- event
- 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
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请实施例提供了一种多线程内存管理方法及系统、计算机设备、存储介质,属于计算机技术领域。该方法包括:对目标内存进行内存初始化处理得到初始内存页;根据候选线程对初始内存页进行线程内存分配,得到每个候选线程的候选内存页;根据线程共享内存页得到包括候选共享内存页的内存中心池;根据线程独占内存页生成内存页申请信号,通过内存中心池响应内存页申请信号,以根据内存页申请信号和预设分配条件对候选共享内存页进行共享内存页分配,得到目标内存页事件,目标内存页事件包括线程缓存内存页和内存引用计数值;根据事件回收时间阈值和内存引用计数值对目标内存页事件进行内存页回收。本申请实施例能够提高多线程内存的存储性能。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种多线程内存管理方法及系统、计算机设备、存储介质。
背景技术
目前,相关技术的多线程内存管理方法通常采用有锁机制访问可被多个线程访问的系统底层资源,而这种方法会加大输入/输出(Input/Output,IO)时延,且访问系统的底层资源会产生用户态到内核态的上下文切换,从而造成极大的中央处理器(CentralProcessing Unit,CPU)资源浪费。此外,在无锁的情况下,多个线程同时访问共享的数据又容易导致数据紊乱、引发未定义行为等问题,且最严重的导致系统宕机,从而降低了多线程的存储性能。因此,如何有效的提高多线程内存的存储性能,成为了亟待解决的技术问题。
发明内容
本申请实施例的主要目的在于提出了一种多线程内存管理方法及系统、计算机设备、存储介质,能够有效避免用户态到内核态的上下文切换带来的性能问题,且更好地提高了多线程内存的存储性能。
为实现上述目的,本申请实施例的第一方面提出了一种多线程内存管理方法,所述方法包括:
对目标内存进行内存初始化处理,得到初始内存页,所述目标内存包括候选线程;
根据所述候选线程对所述初始内存页进行线程内存分配,得到每个所述候选线程的候选内存页,所述候选内存页包括线程独占内存页和线程共享内存页;
根据所述线程共享内存页得到所述目标内存的内存中心池,所述内存中心池包括候选共享内存页;
根据所述线程独占内存页生成所述候选线程的内存页申请信号,并将所述内存页申请信号发送至所述内存中心池;
通过所述内存中心池响应于所述内存页申请信号,以根据所述内存页申请信号和预设分配条件对所述候选共享内存页进行共享内存页分配,得到目标内存页事件,所述目标内存页事件包括线程缓存内存页和所述线程缓存内存页的内存引用计数值;
根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收。
在一些实施例中,所述对目标内存进行内存初始化处理,得到初始内存页,包括:
获取预设页分配数量和预设页存储单位;
根据所述预设页分配数量和所述预设页存储单位对所述目标内存进行内存页划分,得到所述初始内存页。
在一些实施例中,所述候选线程包括线程缓存器,所述线程缓存器用于存储进行无锁操作的线程缓存内存页,所述根据所述线程独占内存页生成所述候选线程的内存页申请信号,包括:
接收内存页请求信号,所述内存页请求信号包括目标线程和内存页请求数量;
根据所述内存页请求信号获取所述目标线程的所述线程缓存内存页,并对所述线程缓存内存页进行数量统计,得到独占内存页数量;
根据所述内存页请求数量和所述独占内存页数量进行内存页数量比较,得到第一数量比较结果;
若所述第一数量比较结果表示所述独占内存页数量小于所述内存页请求数量,生成所述内存页申请信号,所述内存页申请信号包括所述独占内存页数量和所述内存页请求数量间的内存页数量差值。
在一些实施例中,所述根据所述内存页申请信号和预设分配条件对所述候选共享内存页进行共享内存页分配,得到目标内存页事件,包括:
根据所述预设分配条件对所述候选共享内存页进行第一内存页分配,确定目标共享内存页;
将所述目标共享内存页存储于所述线程缓存器,以更新所述线程缓存器的所述线程缓存内存页;
获取更新后的所述线程缓存内存页,并对更新后的所述线程缓存内存页进行数量统计,得到线程缓存内存页数量;
对所述内存页请求数量和所述线程缓存内存页数量进行内存数量比较,得到第二数量比较结果;
若所述第二数量比较结果表示所述线程缓存内存页数量小于所述内存页请求数量,则再次生成所述内存页申请信号;
根据所述线程缓存内存页数量和所述内存页请求数量更新所述内存页数量差值,并将所述内存页申请信号再次发送至所述内存中心池。
在一些实施例中,在所述若所述第二数量比较结果表示所述线程缓存内存页数量小于所述内存页请求数量,则再次生成所述内存页申请信号之前,所述方法还包括:
若所述第二数量比较结果表示所述线程缓存内存页数量大于所述内存页请求数量,获取所述候选线程中内存页状态为空闲状态的所述线程缓存内存页;
将空闲状态的所述线程缓存内存页释放到所述内存中心池。
在一些实施例中,所述候选线程还包括内存页发送队列、内存页接收队列和内存页就绪队列,所述目标线程的所述内存页发送队列用于存储所述目标线程发送到其他所述候选线程的内存页事件,所述目标线程的所述内存页接收队列用于存储所述目标线程接收其他所述候选线程发送的内存页事件,所述目标线程的所述内存页就绪队列用于存储将进行内存页回收的内存页事件;
所述根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收,包括:
将所述目标内存页事件发送到所述内存页发送队列,得到内存页发送事件,所述内存页发送事件包括事件时间数据;
根据预设事件时间间隔将所述内存页发送事件发送到所述内存页接收队列,得到内存页接收事件;
对所述事件回收时间阈值和所述内存页接收事件的所述事件时间数据进行事件时间比较,得到事件时间比较结果;
若所述事件时间比较结果表示所述事件时间数据小于或等于所述事件回收时间阈值,将所述内存页接收事件发送到所述内存页就绪队列,得到内存页就绪事件;
根据所述内存引用计数值对所述内存页就绪事件进行内存页回收。
在一些实施例中,在所述将所述目标内存页事件发送到所述内存页发送队列,得到内存页发送事件之前,所述方法还包括:
获取所述候选线程中所述目标内存页事件的最大事件时间数据;
获取当前时间数据,并根据所述最大事件时间数据和所述当前时间数据进行差值计算,得到线程事件间隔数据;
对所述线程事件间隔数据和预设事件间隔阈值进行事件间隔比较,得到间隔时间比较结果;
若所述间隔时间比较结果表示所述线程事件间隔数据大于预设事件间隔阈值,生成所述候选线程的内存页空事件,并将所述内存页空事件添加到所述内存页发送队列,以更新所述内存页发送队列。
为实现上述目的,本申请实施例的第二方面提出了一种多线程内存管理系统,所述系统包括:
初始化模块,用于对目标内存进行内存初始化处理,得到初始内存页,所述目标内存包括候选线程;
内存分配模块,用于根据所述候选线程对所述初始内存页进行线程内存分配,得到每个所述候选线程的候选内存页,所述候选内存页包括线程独占内存页和线程共享内存页;
内存中心池构建模块,用于根据所述线程共享内存页得到所述目标内存的内存中心池,所述内存中心池包括候选共享内存页;
信号发送模块,用于根据所述线程独占内存页生成所述候选线程的内存页申请信号,并将所述内存页申请信号发送至所述内存中心池;
内存页分配模块,用于通过所述内存中心池响应于所述内存页申请信号,以根据所述内存页申请信号和预设分配条件对所述候选共享内存页进行共享内存页分配,得到目标内存页事件,所述目标内存页事件包括线程缓存内存页和所述线程缓存内存页的内存引用计数值;
内存页回收模块,用于根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收。
为实现上述目的,本申请实施例的第三方面提出了一种计算机设备,包括:
至少一个存储器;
至少一个处理器;
至少一个计算机程序;
所述至少一个计算机程序被存储在所述至少一个存储器中,所述至少一个处理器执行所述至少一个计算机程序以实现上述第一方面所述的多线程内存管理方法。
为实现上述目的,本申请实施例的第四方面提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使计算机执行上述第一方面所述的多线程内存管理方法。
本申请实施例提出的一种多线程内存管理方法及系统、计算机设备、存储介质,首先,通过对目标内存进行内存初始化处理,得到初始内存页,该目标内存包括候选线程。根据候选线程对初始内存页进行线程内存分配,得到每个候选线程的候选内存页,该候选内存页包括线程独占内存页和线程共享内存页。然后,根据线程共享内存页得到目标内存的内存中心池,内存中心池包括候选共享内存页。根据线程独占内存页生成候选线程的内存页申请信号,并将内存页申请信号发送至内存中心池,并通过内存中心池响应于内存页申请信号,以根据内存页申请信号和预设分配条件对候选共享内存页进行共享内存页分配,得到目标内存页事件,该目标内存页事件包括线程缓存内存页和线程缓存内存页的内存引用计数值。根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收。本申请实施例能够有效避免用户态到内核态的上下文切换带来的性能问题,且更好地提高了多线程内存的存储性能。
附图说明
图1是本申请实施例提供的多线程内存管理方法的第一流程图;
图2是图1中的步骤S110的流程图;
图3是本申请实施例提供的内存中心池的一个框架示意图;
图4是图1中的步骤S140的流程图;
图5是图1中的步骤S150的流程图;
图6是本申请实施例提供的多线程内存管理方法的第二流程图;
图7是图1中的步骤S160的流程图;
图8是本申请实施例提供的多线程内存管理方法的第三流程图;
图9是本申请实施例提供的多线程内存管理系统的结构示意图;
图10是本申请实施例提供的计算机设备的硬件结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
首先,对本申请中涉及的若干名词进行解析:
内存页(Memory Page,PAGE):是指存储管理部分软件处理的最基本数据单元,即指磁盘空间管理器支持处理外存时的最小数据处理单位。例如,将虚拟内存按一定的对齐大小,如4k、16k、32k、1024K等拆分为多个PAGE。
无锁并发(Lock-Free):是指程序运行足够长的时间后,至少有一个线程能继续执行。
目前,在存储系统中,为了最大化利用中央处理器(Central Processing Unit,CPU)的资源,通常会创建多个线程用于处理输入/输出(Input/Output,IO),使得多个线程会共享一些数据。相关技术的多线程内存管理方法,通常会采用有锁机制访问可被多个线程访问的系统底层资源,而这种方法会加大IO时延,且访问系统的底层资源会产生用户态到内核态的上下文切换,从而造成极大的CPU资源浪费。此外,在不加锁的情况下,多个线程同时访问共享的数据又容易导致数据紊乱、引发未定义行为等问题,且最严重的导致系统宕机,从而降低了多线程的存储性能。因此,如何有效的提高多线程内存的存储性能,成为了亟待解决的技术问题。
基于此,本申请实施例提供了一种多线程内存管理方法及系统、计算机设备、存储介质,能够有效避免用户态到内核态的上下文切换带来的性能问题,且更好地提高了多线程内存的存储性能。
本申请实施例提供的多线程内存管理方法可应用于终端中,也可应用于服务器端中,还可以是运行于终端或服务器端中的软件。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机等;服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现多线程内存管理方法的应用等,但并不局限于以上形式。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络个人计算机(Personal Computer,PC)、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
请参阅图1,图1是本申请实施例提供的多线程内存管理方法的一个可选的流程图。图1中的方法具体可以包括但不限于步骤S110至步骤S160,下面结合图1对这六个步骤进行详细介绍。
步骤S110,对目标内存进行内存初始化处理,得到初始内存页,目标内存包括候选线程;
步骤S120,根据候选线程对初始内存页进行线程内存分配,得到每个候选线程的候选内存页,候选内存页包括线程独占内存页和线程共享内存页;
步骤S130,根据线程共享内存页得到目标内存的内存中心池,内存中心池包括候选共享内存页;
步骤S140,根据线程独占内存页生成候选线程的内存页申请信号,并将内存页申请信号发送至内存中心池;
步骤S150,通过内存中心池响应于内存页申请信号,以根据内存页申请信号和预设分配条件对候选共享内存页进行共享内存页分配,得到目标内存页事件,目标内存页事件包括线程缓存内存页和线程缓存内存页的内存引用计数值;
步骤S160,根据事件回收时间阈值和内存引用计数值对目标内存页事件进行内存页回收。
可以理解的是,在一些实施例的步骤S110至步骤S160中,首先,通过对目标内存进行内存初始化处理,得到初始内存页,该目标内存包括候选线程。根据候选线程对初始内存页进行线程内存分配,得到每个候选线程的候选内存页,该候选内存页包括线程独占内存页和线程共享内存页。然后,根据线程共享内存页得到目标内存的内存中心池,内存中心池包括候选共享内存页。根据线程独占内存页生成候选线程的内存页申请信号,并将内存页申请信号发送至内存中心池,并通过内存中心池响应于内存页申请信号,以根据内存页申请信号和预设分配条件对候选共享内存页进行共享内存页分配,得到目标内存页事件,该目标内存页事件包括线程缓存内存页和线程缓存内存页的内存引用计数值。根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收。本申请实施例能够有效避免用户态到内核态的上下文切换带来的性能问题,且更好地提高了多线程内存的存储性能。
需要说明的是,本申请实施例提供的多线程内存管理方法可以应用于客户端或服务端,且调用端也可以为客户端或服务端,在此不作具体限定。
在一些实施例的步骤S110中,由于一个进程包括多个候选线程,则目标内存用于表征包括多个候选线程的进程的总存储内存。为了避免产生用户态到内核态的上下文切换,首先对目标内存进行内存初始化处理得到初始内存页,其中,目标内存包括多个候选线程,以实现在多线程上的内存页管理。
请参阅图2,图2是本申请实施例提供的步骤S110的一个可选的流程。在本申请的一些实施例中,步骤S110具体可以包括但不限于步骤S210和步骤S220,下面结合图2对这两个步骤进行详细介绍。
步骤S210,获取预设页分配数量和预设页存储单位;
步骤S220,根据预设页分配数量和预设页存储单位对目标内存进行内存页划分,得到初始内存页。
在一些实施例的步骤S210中,为了降低内存管理设计的复杂性,且避免产生内存碎片、内存碎片、内存迁移等操作对存储系统的整体性能的影响,本申请实施例通过设定预设页分配数量和预设页存储单位进行内存页划分。其中,预设页分配数量用于表征预设定的能够被管理的PAGE的数量,如预设页分配数量设定PAGE个数为2621440,则相当于设定存储大小为10GB。预设页存储单位用于表征设定的每个PAGE的大小,例如,可以为4K、8K等。其中,预设页分配数量和预设页存储单位的具体数值可以根据实际需要进行调整,在此不作具体限定。
在一些实施例的步骤S220中,根据预设页分配数量和预设页存储单位对目标内存进行内存页划分,得到多个初始内存页,则每个初始内存页的大小是相同的。本申请实施例将目标内存划分为固定大小和数量的初始内存页,能够有效降低内存管理设计的复杂性,且避免产生内存碎片、内存碎片、内存迁移等操作对存储系统的整体性能的影响。
在一些实施例的步骤S120中,为了将划分的初始内存页归属到具体的候选线程,根据候选线程的数量对初始内存页进行线程内存分配,使得各个线程都能分配到初始内存页,并将每个候选线程被分配的初始内存页记为候选内存页。之后,为了提高多线程内存的存储性能,每个候选线程会将得到的候选内存页划分为线程独占内存页和线程共享内存页。其中,线程独占内存页(Exclusive Page)是指每个线程独占一定数量的PAGE,记为线程EP;线程共享内存页(Shared Page,SP)是指每个线程将共享一部分属于线程自身管理的PAGE给其他线程使用,记为线程SP。本申请实施例将PAGE划分到候选线程中为无锁化操作,能够避免产生用户态到内核态的上下文切换。
在一些实施例的步骤S130中,由于现有的内存管理方法在当前层满足不了内存需求时,会转向共享层请求内存,且在进行多个线程访问的时候通常采用有锁操作,因此当应用对内存需求十分频繁时会导致锁竞争加剧,将产生大量的用户态到内核态的上下文切换,从而导致CPU忙于处理上下文切换,加大了应用获取内存或者释放内存的时延,进而影响整个系统的性能。本申请实施例会将每个候选线程的线程SP存储到内存中心池,则将内存中心池中存储的线程SP作为候选共享内存页。其中,内存中心池(CenterPool,CPOOL)是指每个候选线程将自己可共享的PAGE交给CPOOL维护,以方便其他候选线程在内存不足时获取不属于自身管理的PAGE。
示例性的,请参阅图3,图3是本申请实施例提供的内存中心池的一个框架示意图。目标内存将初始化处理后的初始内存页分配到多个候选线程中,例如,该目标内存对应5个候选线程,包括线程T1、线程T2、线程T3、线程T4和线程T5,每个候选线程将分配得到的初始内存页划分为线程EP和线程SP,根据线程SP得到目标内存的CPOOL。
在一些实施例的步骤S140中,每个候选线程包括对应的线程缓存器(ThreadCache,TCACHE),该TCACHE用于存储可进行无锁操作的线程缓存内存页。当某个候选线程的TCACHE中的存储空间不足时,即根据线程EP的数量生成候选线程的内存页申请信号,并将该内存页申请信号发送至CPOOL,以向CPOOL申请获取更多的PAGE。
请参阅图4,图4是本申请实施例提供的步骤S140的一个可选的流程。在一些实施例中,步骤S140具体可以包括但不限于步骤S410至步骤S440,下面结合图4对这四个步骤进行详细介绍。
步骤S410,接收内存页请求信号,该内存页请求信号包括目标线程和内存页请求数量;
步骤S420,根据内存页请求信号获取目标线程的线程缓存内存页,并对线程缓存内存页进行数量统计,得到独占内存页数量;
步骤S430,对内存页请求数量和独占内存页数量进行内存页数量比较,得到第一数量比较结果;
步骤S440,若第一数量比较结果表示独占内存页数量小于内存页请求数量,生成内存页申请信号,内存页申请信号包括独占内存页数量和内存页请求数量间的内存页数量差值。
在一些实施例的步骤S410中,在目标内存对初始内存页进行线程内存分配之后,接收内存页请求信号,内存页请求信号包括目标线程和内存页请求数量,该内存页请求信号用于表示用目标线程的TCACHE中获取指定数量的PAGE。
需要说明的是,每个PAGE对应一个引用计数器,以记录该PAGE的使用者数量,该PAGE包括线程EP、线程SP、线程缓存内存页等任一种PAGE。
在一些实施例的步骤S420中,由于在目标内存对初始内存页进行线程内存分配之后,目标线程的TCACHE中存储的线程缓存内存页是线程EP,则根据内存页请求信号优先获取目标线程TCACHE中的线程EP。之后,对线程EP进行数量统计,得到独占内存页数量。
在一些实施例的步骤S430中,对内存页请求数量和独占内存页数量进行内存页数量比较,得到第一数量比较结果,该第一数量比较结果用于确定目标线程的TCACHE中存储的线程缓存内存页的数量是否能够满足内存页请求数量。
在一些实施例的步骤S440中,若第一数量比较结果表示独占内存页数量小于内存页请求数量,表示目标线程TCACHE中的线程EP不能够满足内存页请求数量。因此,根据第一数量比较结果生成内存页申请信号,该内存页申请信号用于向CPOOL申请获取足额的PAGE,则内存页申请信号包括已经统计的独占内存页数量和内存页请求数量间的内存页数量差值,即确定了向CPOOL申请的PAGE数量。
需要说明的是,CPOOL向对应目标线程分配PAGE时,会先分配存储在CPOOL中该目标线程对应的线程SP,当该目标线程对应的线程SP不够时,则划分其他线程存储在CPOOL中的PAGE给目标线程。
需要说明的是,若第一数量比较结果表示独占内存页数量大于或等于内存页请求数量,则说明目标线程TCACHE中的线程EP能够满足内存页请求数量。获取内存页请求数量的线程EP,并将获取的每个线程EP对应的引用计数器的内存引用计数值加1,同时生成该PAGE对应的目标内存页事件,记为目标PAGE-EVENT,目标PAGE-EVENT包括获取的线程缓存内存页和线程缓存内存页的内存引用计数值。
需要说明的是,每个目标PAGE-EVENT的内存引用计数值包括内存引用增加值(PAGE-INCRRC)、内存引用减少值(PAGE-DECRRC)等,且每个目标PAGE-EVENT都会包括对应的事件时间点,该事件时间点用于表征事件发生的时间。其中,PAGE-INCRRC用于统计该PAGE被分配的次数,PAGE-DECRRC用于统计该PAGE被释放的次数,PAGE-INCRRC和PAGE-DECRRC的初始值都为0。
需要说明的是,在向CPOOL申请足额的PAGE数量后,将从CPOOL中获取的线程SP放置到目标线程的线程缓存TCATCH中,然后等待被分配。当对TCATCH中的PAGE分配时,将分配的PAGE对应的引用计数器的PAGE-INCRRC加1。
在一些实施例的步骤S150中,CPOOL接收到目标线程发送的内存页申请信号后,从CPOOL中分配一批次的PAGE到目标线程的TCACHE中。本申请实施例通过无锁操作从目标线程的TCACHE获取PAGE,并通过Lock-Free操作从CPOOL中获取空闲的线程SP,能够有效降低访问共享数据来的的性能问题。
需要说明的是,本申请实施例的Lock-Free操作可以采用比较并交换(Compare-And-Swap,CAS)机制实现,在此不作具体限定。
请参阅图5,图5是本申请实施例提供的步骤S150的一个可选的流程图。在一些实施例中,步骤S150具体可以包括但不限于步骤S510至步骤S560,下面结合图5对这六个步骤进行详细介绍。
步骤S510,根据预设分配条件对候选共享内存页进行第一内存页分配,确定目标共享内存页;
步骤S520,将目标共享内存页存储于线程缓存器,以更新线程缓存器的线程缓存内存页;
步骤S530,获取更新后的线程缓存内存页,并对更新后的线程缓存内存页进行数量统计,得到线程缓存内存页数量;
步骤S540,对内存页请求数量和线程缓存内存页数量进行内存数量比较,得到第二数量比较结果;
步骤S550,若第二数量比较结果表示线程缓存内存页数量小于内存页请求数量,则再次生成内存页申请信号;
步骤S560,根据线程缓存内存页数量和内存页请求数量更新内存页数量差值,并将内存页申请信号再次发送至内存中心池。
在一些实施例的步骤S510中,内存中心池响应于内存页申请信号后,根据预设分配条件对候选共享内存页进行第一内存页分配,其中,预设分配条件包括内存页分配数量,该内存页分配数量表示从CPOOL中获取一批次PAGE到目标线程的TCACHE的PAGE数量。将从CPOOL中获取的PAGE作为目标共享内存页。
在一些实施例的步骤S520至步骤S560中,将从CPOOL获取的目标共享内存页存储于目标线程的TCACHE,以更新目标线程的TCACHE中存储的线程缓存内存页。获取更新后的线程缓存内存页,并对更新后的线程缓存内存页进行数量统计,得到线程缓存内存页数量。对内存页请求数量和线程缓存内存页数量进行内存数量比较,得到第二数量比较结果,则该第二数量比较结果用于判断获取了一批次后的目标线程的TCACHE中是否能够满足内存页请求数量。因此,此时目标线程的TCACHE中存储的是目标线程的线程EP和从CPOOL中获取的PAGE。若第二数量比较结果表示线程缓存内存页数量小于内存页请求数量,即表示目标线程TCACHE中的线程缓存内存页不能够满足内存页请求数量,则再次生成内存页申请信号,以再次从CPOOL中获取一批次的PAGE到目标线程的TCACHE中,并根据再次获取的PAGE结合之前在TCACHE中存储的线程缓存内存页更新TCACHE。之后,根据更新后的TCACHE中线程缓存内存页数量和内存页请求数量更新内存页数量差值,并将包含更新后的内存页数量差值的内存页申请信号再次发送至内存中心池。
需要说明的是,若第二次从CPOOL中获取的PAGE更新线程缓存内存页数量后,更新的第二数量比较结果仍表示线程缓存内存页数量小于内存页请求数量,则依然再次生成内存页申请信号。不断分配和判断,直至第二数量比较结果表示线程缓存内存页数量大于或等于内存页请求数量。对目标线程的TCACHE中分配出去的所有线程缓存内存页对应的引用计数器的PAGE-INCRRC加1。
请参阅图6,图6是本申请实施例提供的多线程内存管理方法的另一个可选的流程图。在一些实施例中,在步骤S550之前,本申请实施例的方法具体还可以包括但不限于步骤S610和步骤S620,下面结合图6对这两个步骤进行详细介绍。
步骤S610,若第二数量比较结果表示线程缓存内存页数量大于内存页请求数量,获取候选线程中内存页状态为空闲状态的线程缓存内存页;
步骤S620,将空闲状态的线程缓存内存页释放到内存中心池。
在一些实施例的步骤S610和步骤S620中,若第二数量比较结果表示线程缓存内存页数量大于内存页请求数量,则说明目标线程TCACHE中的线程缓存内存页能够满足内存页请求数量,且还存在空闲的线程缓存内存页。内存页状态包括使用状态和空闲状态。获取候选线程中内存页状态为空闲状态的线程缓存内存页,并将空闲状态的线程缓存内存页释放到内存中心池,以提高多线程内存的存储性能。
需要说明的是,本申请实施例通过定期将将空闲状态的线程缓存内存页释放到内存中心池,操作简单且代价极低,有利用更好地提升存储系统的整体性能。
在一些实施例的步骤S160中,为了更好地释放PAGE,本申请实施例根据事件回收时间阈值和PAGE-EVENT的内存引用计数值定期对目标内存页事件中的线程缓存内存页进行内存页回收。
需要说明的是,每个候选线程都包括一个垃圾回收器(Garbage Collector,GC),且该GC可以并行工作。
请参阅图7,图7是本申请实施例提供的步骤S160的一个可选的流程图。在一些实施例中,候选线程还包括内存页发送队列、内存页接收队列和内存页就绪队列,目标线程的内存页发送队列用于存储目标线程发送到其他候选线程的内存页事件,目标线程的内存页接收队列用于存储目标线程接收其他候选线程发送的内存页事件,目标线程的内存页就绪队列用于存储将进行内存页回收的内存页事件,则步骤S160具体可以包括但不限于步骤S710至步骤S750,下面结合图7对这五个步骤进行详细介绍。
步骤S710,将目标内存页事件发送到内存页发送队列,得到内存页发送事件,内存页发送事件包括事件时间数据;
步骤S720,根据预设事件时间间隔将内存页发送事件发送到内存页接收队列,得到内存页接收事件;
步骤S730,对事件回收时间阈值和内存页接收事件的事件时间数据进行事件时间比较,得到事件时间比较结果;
步骤S740,若事件时间比较结果表示事件时间数据小于或等于事件回收时间阈值,将内存页接收事件发送到内存页就绪队列,得到内存页就绪事件;
步骤S750,根据内存引用计数值对内存页就绪事件进行内存页回收。
需要说明的是,将内存页发送队列(Transmit Queue)记为TXQ,内存页接收队列(Receive Queue)记为RXQ,内存页就绪队列记为READYQ。每个候选线程都有一组TXQ、RXQ和一个READYQ。其中,各线程都有本地变量表示其他线程的TXQ,TXQ[i]表示本线程需要发送给第i号线程的PAGE-EVENT队列,RXQ[i]表示本线程从i线程接受的PAGE-EVENT队列,且第i号线程会将TXQ[j]中的PAGE-EVENT发送到第j号线程的RXQ[i]中,本线程会将所有RXQ中满足条件的PAGE-EVENT放入其线程的READYQ中。
在一些实施例的步骤S710中,将目标线程的目标PAGE-EVENT都发送到对应其他候选线程的TXQ,并将存储在该目标线程TXQ中的PAGE-EVENT作为内存页发送事件,该内存页发送事件包括事件时间数据,该事件时间数据用于表示该内存页发送事件生成的时间点。
需要说明的是,目标PAGE-EVENT包括分配PAGE产生的PAGE-EVENT和释放PAGE产生的PAGE-EVENT。当目标线程释放PAGE到其他候选线程时,产生内存引用计数值减1的PAGE-EVENT,且该操作是无锁的。将该PAGE-EVENT放置到PAGE所属候选线程的TXQ中即可,本申请实施例释放PAGE时操作简单,代价极低,有利用提升系统的整体性能。
在一些实施例的步骤S720中,根据预设事件时间间隔将内存页发送事件发送到内存页接收队列,即通过GC根据第一间隔周期定期将目标线程TXQ中的内存页发送事件发送到内存页发送事件所属其他候选线程的RXQ中,并存储在目标线程RXQ中的PAGE-EVENT作为内存页接收事件,该内存页发送事件包括目标PAGE-EVENT的事件时间数据。例如,当前管理PAGE的候选线程有3个,分别为线程T1、线程T2、线程T3,将代表线程T1的TXQ中的PAGE-EVENT发送到线程T1的RXQ中,将代表线程T2的TXQ中的PAGE-EVENT发送到线程T2的RXQ中,以此类推。其中,第一间隔周期可以根据实际的业务需求灵活设置的时间间隔,比如以1ms、2ms为第一间隔周期等,在此不做具体限定。
在一些实施例的步骤S730和步骤S740中,对事件回收时间阈值和内存页接收事件的事件时间数据进行事件时间比较,具体地,为了保证GC操作的时序性,获取事件回收时间阈值GCTICK,该GCTICK用于表示这个时间点前的PAGE-EVENT都已经发送到了RQX中,即可以进行下一步处理。通过GC根据GCTICK定期将线程RXQ中的PAGE-EVENT放到READYQ中。当RXQ中的内存页接收事件的时间点小于或等于GCTICK,将该RXQ中的内存页接收事件发送到该线程的READYQ中,并将存储在READYQ中的PAGE-EVENT作为存页就绪事件。当RXQ中的内存页接收事件的时间点大于GCTICK,则该内存页接收事件将等到下一轮回收的GCTICK再处理。
在一些实施例的步骤S750中,通过GC处理READYQ中的内存页就绪事件,具体地,对READYQ中的内存页就绪事件进行内存页回收时,先回收处理所有内存页就绪事件中内存引用计数值的PAGE-INCRRC的情况,然后回收处理PAGE-DECRRC的情况。例如,当某一个内存页就绪事件对应的PAGE的内存引用计数值为零,将PAGE释放到TCACHE中,然后清理掉该PAGE的READYQ,并更新GCTICK的值,且更新后的GCTICK晚于之前的GCTICK。
需要说明的是,通过GC将线程TCACHE中内存页状态为空闲状态的PAGE释放到CPOOL中。当TCACHE中的PAGE数量大于设定的一次释放的PAGE数量值时,本申请实施例通过批量的释放PAGE到CPOOL中,从而有效减少释放操作,提高了系统的整体性能。
请参阅图8,图8是本申请实施例提供的多线程内存管理方法的另一个可选的流程图。在一些实施例中,在步骤S710之前,本申请实施例的方法具体还可以包括但不限于步骤S810至步骤S840,下面结合图8对这四个步骤进行详细介绍。
步骤S810,获取候选线程中目标内存页事件的最大事件时间数据;
步骤S820,获取当前时间数据,并根据最大事件时间数据和当前时间数据进行差值计算,得到线程事件间隔数据;
步骤S830,对线程事件间隔数据和预设事件间隔阈值进行事件间隔比较,得到间隔时间比较结果;
步骤S840,若间隔时间比较结果表示线程事件间隔数据大于预设事件间隔阈值,生成候选线程的内存页空事件,并将内存页空事件添加到内存页发送队列,以更新内存页发送队列。
需要说明的是,如果某个线程在GCTICK内没有产生PAGE-EVENT或者没能发送PAGE-EVENT到RXQ中,则在将内存页接收事件发送到内存页就绪队列时,GC会发现缺少该线程的事件。然而,如果在这种情况下依然去处理READYQ,可能会导致PAGE的RC紊乱。因此,为了避免RC紊乱,在GC处理READYQ时READYQ中必须收到所有候选线程的PAGE-EVENT,即只要其中某个候选线程没有PAGE-EVENT产生,则GC不处理READYQ,且GCTICK不更新。
需要说明的是,有多种原因会导致线程不能在一个GCTICK以内发送PAGE-EVENT,比如,线程被挂起在收网络包的地方;或者,某个PAGE在GCTICK内执行了5次PAGE-INCRRC加1与5次PAGE-DECRRC减1,若其中某个线程有一次PAGE-INCRRC加1操作不能在GCTICK内发送到RXQ中,则当GC执行回收的时,就会获得4次PAGE-INCRRC加1操作和5次PAGE-DECRRC减1,使得内存引用计数值等于-1,从而引发线程引用计数器的紊乱。
在一些实施例的步骤S810至步骤S840中,为了解决上述问题且为了避免GC无法及时回收PAGE引发PAGE耗尽的问题,通过获取候选线程中目标内存页事件的最大事件时间数据,该最大事件时间数据用于表示最后一次产生PAGE-EVNET的时间点。之后,获取当前时间数据,并根据最大事件时间数据和当前时间数据进行差值计算,得到线程事件间隔数据。对线程事件间隔数据和预设事件间隔阈值进行事件间隔比较,得到间隔时间比较结果。其中,预设事件间隔阈值可以为500毫秒等,在此不做具体限定。若间隔时间比较结果表示线程事件间隔数据大于预设事件间隔阈值,表示该候选线程未产生PAGE-EVNET,则GC主动生成该候选线程的一个PAGE-NIL消息。该PAGE-NIL消息相当于一个内存页空事件,将内存页空事件添加到内存页发送队列,以更新内存页发送队列,并将该内存页空事件发送到其他所有候选线程的RXQ中。
需要说明的是,内存页空事件的时间点相当于该候选线程的事件时间数据。本申请实施例通过生成候选线程的内存页空事件,以对齐GCTICK和所有满足条件候选线程的时间点,从而保证对PAGE的回收准确性。
本申请实施例在进行线程内存分配时,限制了PAGE的大小和个数,结构简单,且能够有效避免内存碎片、内存迁移、用户态到内核态的上下文切换带来的性能问题。同时,通过对PAGE进行引用计数,能够有效解决了内存拷贝带来的性能问题,让模块之间的职责权限清楚明了。此外,本申请实施例通过将PAGE规属到各个线程中,让PAGE的分配和释放操作全部无锁化,降低了因为内存管理不当引发的性能问题,且当TCACHE数量不足或者超额时,通过具有Lock-Free属性的机制向CPOOL批量的分配或者释放PAGE,能够降低CPU的压力且能够更好地提高多线程内存的存储性能。
请参阅图9,图9是本申请实施例提供的多线程内存管理系统的结构示意图,该系统可以实现上述实施例的多线程内存管理方法,该系统包括初始化模块910、内存分配模块920、内存中心池构建模块930、信号发送模块940、内存页分配模块950和内存页回收模块960。
初始化模块910,用于对目标内存进行内存初始化处理,得到初始内存页,目标内存包括候选线程;
内存分配模块920,用于根据候选线程对初始内存页进行线程内存分配,得到每个候选线程的候选内存页,候选内存页包括线程独占内存页和线程共享内存页;
内存中心池构建模块930,用于根据线程共享内存页得到目标内存的内存中心池,内存中心池包括候选共享内存页;
信号发送模块940,用于根据线程独占内存页生成候选线程的内存页申请信号,并将内存页申请信号发送至内存中心池;
内存页分配模块950,用于通过内存中心池响应于内存页申请信号,以根据内存页申请信号和预设分配条件对候选共享内存页进行共享内存页分配,得到目标内存页事件,目标内存页事件包括线程缓存内存页和线程缓存内存页的内存引用计数值;
内存页回收模块960,用于根据事件回收时间阈值和内存引用计数值对目标内存页事件进行内存页回收。
需要说明的是,本申请实施例的多线程内存管理系统用于实现上述实施例的多线程内存管理方法,本申请实施例的多线程内存管理系统与前述的多线程内存管理方法相对应,具体的处理过程请参照前述的多线程内存管理方法,在此不再赘述。
本申请实施例还提供了一种计算机设备,该计算机设备包括:至少一个存储器,至少一个处理器,至少一个计算机程序,至少一个计算机程序被存储在至少一个存储器中,至少一个处理器执行至少一个计算机程序以实现上述实施例中任一种的多线程内存管理方法。该计算机设备可以为包括平板电脑、车载电脑等任意智能终端。
请参阅图10,图10示意了另一实施例的一种计算机设备的硬件结构,该计算机设备包括:
处理器1010,可以采用通用的中央处理器(Central Processing Unit,CPU)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
存储器1020,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行本申请实施例的多线程内存管理方法;
输入/输出接口1030,用于实现信息输入及输出;
通信接口1040,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
总线1050,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息;
其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,计算机程序用于使计算机执行上述实施例中多线程内存管理方法。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例描述的实施例是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,图中示出的技术方案并不构成对本申请实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
以上参阅附图说明了本申请实施例的优选实施例,并非因此局限本申请实施例的权利范围。本领域技术人员不脱离本申请实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本申请实施例的权利范围之内。
Claims (10)
1.一种多线程内存管理方法,其特征在于,所述方法包括:
对目标内存进行内存初始化处理,得到初始内存页,所述目标内存包括候选线程;
根据所述候选线程对所述初始内存页进行线程内存分配,得到每个所述候选线程的候选内存页,所述候选内存页包括线程独占内存页和线程共享内存页;
根据所述线程共享内存页得到所述目标内存的内存中心池,所述内存中心池包括候选共享内存页;
根据所述线程独占内存页生成所述候选线程的内存页申请信号,并将所述内存页申请信号发送至所述内存中心池;
通过所述内存中心池响应于所述内存页申请信号,以根据所述内存页申请信号和预设分配条件对所述候选共享内存页进行共享内存页分配,得到目标内存页事件,所述目标内存页事件包括线程缓存内存页和所述线程缓存内存页的内存引用计数值;
根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收。
2.根据权利要求1所述的方法,其特征在于,所述对目标内存进行内存初始化处理,得到初始内存页,包括:
获取预设页分配数量和预设页存储单位;
根据所述预设页分配数量和所述预设页存储单位对所述目标内存进行内存页划分,得到所述初始内存页。
3.根据权利要求1所述的方法,其特征在于,所述候选线程包括线程缓存器,所述线程缓存器用于存储进行无锁操作的线程缓存内存页,所述根据所述线程独占内存页生成所述候选线程的内存页申请信号,包括:
接收内存页请求信号,所述内存页请求信号包括目标线程和内存页请求数量;
根据所述内存页请求信号获取所述目标线程的所述线程缓存内存页,并对所述线程缓存内存页进行数量统计,得到独占内存页数量;
根据所述内存页请求数量和所述独占内存页数量进行内存页数量比较,得到第一数量比较结果;
若所述第一数量比较结果表示所述独占内存页数量小于所述内存页请求数量,生成所述内存页申请信号,所述内存页申请信号包括所述独占内存页数量和所述内存页请求数量间的内存页数量差值。
4.根据权利要求3所述的方法,其特征在于,所述根据所述内存页申请信号和预设分配条件对所述候选共享内存页进行共享内存页分配,得到目标内存页事件,包括:
根据所述预设分配条件对所述候选共享内存页进行第一内存页分配,确定目标共享内存页;
将所述目标共享内存页存储于所述线程缓存器,以更新所述线程缓存器的所述线程缓存内存页;
获取更新后的所述线程缓存内存页,并对更新后的所述线程缓存内存页进行数量统计,得到线程缓存内存页数量;
对所述内存页请求数量和所述线程缓存内存页数量进行内存数量比较,得到第二数量比较结果;
若所述第二数量比较结果表示所述线程缓存内存页数量小于所述内存页请求数量,则再次生成所述内存页申请信号;
根据所述线程缓存内存页数量和所述内存页请求数量更新所述内存页数量差值,并将所述内存页申请信号再次发送至所述内存中心池。
5.根据权利要求4所述的方法,其特征在于,在所述若所述第二数量比较结果表示所述线程缓存内存页数量小于所述内存页请求数量,则再次生成所述内存页申请信号之前,所述方法还包括:
若所述第二数量比较结果表示所述线程缓存内存页数量大于所述内存页请求数量,获取所述候选线程中内存页状态为空闲状态的所述线程缓存内存页;
将空闲状态的所述线程缓存内存页释放到所述内存中心池。
6.根据权利要求3至5任一项所述的方法,其特征在于,所述候选线程还包括内存页发送队列、内存页接收队列和内存页就绪队列,所述目标线程的所述内存页发送队列用于存储所述目标线程发送到其他所述候选线程的内存页事件,所述目标线程的所述内存页接收队列用于存储所述目标线程接收其他所述候选线程发送的内存页事件,所述目标线程的所述内存页就绪队列用于存储将进行内存页回收的内存页事件;
所述根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收,包括:
将所述目标内存页事件发送到所述内存页发送队列,得到内存页发送事件,所述内存页发送事件包括事件时间数据;
根据预设事件时间间隔将所述内存页发送事件发送到所述内存页接收队列,得到内存页接收事件;
对所述事件回收时间阈值和所述内存页接收事件的所述事件时间数据进行事件时间比较,得到事件时间比较结果;
若所述事件时间比较结果表示所述事件时间数据小于或等于所述事件回收时间阈值,将所述内存页接收事件发送到所述内存页就绪队列,得到内存页就绪事件;
根据所述内存引用计数值对所述内存页就绪事件进行内存页回收。
7.根据权利要求6所述的方法,其特征在于,在所述将所述目标内存页事件发送到所述内存页发送队列,得到内存页发送事件之前,所述方法还包括:
获取所述候选线程中所述目标内存页事件的最大事件时间数据;
获取当前时间数据,并根据所述最大事件时间数据和所述当前时间数据进行差值计算,得到线程事件间隔数据;
对所述线程事件间隔数据和预设事件间隔阈值进行事件间隔比较,得到间隔时间比较结果;
若所述间隔时间比较结果表示所述线程事件间隔数据大于预设事件间隔阈值,生成所述候选线程的内存页空事件,并将所述内存页空事件添加到所述内存页发送队列,以更新所述内存页发送队列。
8.一种多线程内存管理系统,其特征在于,所述系统包括:
初始化模块,用于对目标内存进行内存初始化处理,得到初始内存页,所述目标内存包括候选线程;
内存分配模块,用于根据所述候选线程对所述初始内存页进行线程内存分配,得到每个所述候选线程的候选内存页,所述候选内存页包括线程独占内存页和线程共享内存页;
内存中心池构建模块,用于根据所述线程共享内存页得到所述目标内存的内存中心池,所述内存中心池包括候选共享内存页;
信号发送模块,用于根据所述线程独占内存页生成所述候选线程的内存页申请信号,并将所述内存页申请信号发送至所述内存中心池;
内存页分配模块,用于通过所述内存中心池响应于所述内存页申请信号,以根据所述内存页申请信号和预设分配条件对所述候选共享内存页进行共享内存页分配,得到目标内存页事件,所述目标内存页事件包括线程缓存内存页和所述线程缓存内存页的内存引用计数值;
内存页回收模块,用于根据事件回收时间阈值和所述内存引用计数值对所述目标内存页事件进行内存页回收。
9.一种计算机设备,其特征在于,包括:
至少一个存储器;
至少一个处理器;
至少一个计算机程序;
所述至少一个计算机程序被存储在所述至少一个存储器中,所述至少一个处理器执行所述至少一个计算机程序以实现:
如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使计算机执行:
如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310036979.7A CN115729716B (zh) | 2023-01-10 | 2023-01-10 | 多线程内存管理方法及系统、计算机设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310036979.7A CN115729716B (zh) | 2023-01-10 | 2023-01-10 | 多线程内存管理方法及系统、计算机设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115729716A CN115729716A (zh) | 2023-03-03 |
CN115729716B true CN115729716B (zh) | 2023-05-09 |
Family
ID=85302032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310036979.7A Active CN115729716B (zh) | 2023-01-10 | 2023-01-10 | 多线程内存管理方法及系统、计算机设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115729716B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117707789B (zh) * | 2024-01-10 | 2024-09-03 | 北京浩瀚深度信息技术股份有限公司 | 一种弹性伸缩元数据管理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226487A (zh) * | 2008-01-30 | 2008-07-23 | 中国船舶重工集团公司第七〇九研究所 | 基于嵌入式Linux操作系统的内核级线程库的实现方法 |
CN104375899A (zh) * | 2014-11-21 | 2015-02-25 | 北京应用物理与计算数学研究所 | 高性能计算机numa感知的线程和内存资源优化方法与系统 |
CN111309289A (zh) * | 2019-11-19 | 2020-06-19 | 上海金融期货信息技术有限公司 | 一种内存池管理组件 |
WO2021232386A1 (zh) * | 2020-05-22 | 2021-11-25 | 华为技术有限公司 | 动态管理共享内存池的方法和装置 |
-
2023
- 2023-01-10 CN CN202310036979.7A patent/CN115729716B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226487A (zh) * | 2008-01-30 | 2008-07-23 | 中国船舶重工集团公司第七〇九研究所 | 基于嵌入式Linux操作系统的内核级线程库的实现方法 |
CN104375899A (zh) * | 2014-11-21 | 2015-02-25 | 北京应用物理与计算数学研究所 | 高性能计算机numa感知的线程和内存资源优化方法与系统 |
CN111309289A (zh) * | 2019-11-19 | 2020-06-19 | 上海金融期货信息技术有限公司 | 一种内存池管理组件 |
WO2021232386A1 (zh) * | 2020-05-22 | 2021-11-25 | 华为技术有限公司 | 动态管理共享内存池的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115729716A (zh) | 2023-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109783229B (zh) | 线程资源分配的方法及装置 | |
US10545789B2 (en) | Task scheduling for highly concurrent analytical and transaction workloads | |
US9262218B2 (en) | Methods and apparatus for resource management in cluster computing | |
US8195798B2 (en) | Application server scalability through runtime restrictions enforcement in a distributed application execution system | |
CA3000422C (en) | Workflow service using state transfer | |
CN110096336B (zh) | 数据监控方法、装置、设备和介质 | |
US8996469B2 (en) | Methods and apparatus for job state tracking in cluster computing | |
CN108829512B (zh) | 一种云中心硬件加速计算力的分配方法、系统和云中心 | |
US9804889B2 (en) | Methods and apparatus for state objects in cluster computing | |
US11372681B2 (en) | Slab memory allocator with dynamic buffer resizing | |
CN115729716B (zh) | 多线程内存管理方法及系统、计算机设备、存储介质 | |
US20110131192A1 (en) | Approaches to Reducing Lock Communications In a Shared Disk Database | |
CN116662020B (zh) | 应用服务动态管理方法、系统、电子设备及存储介质 | |
CN112073532B (zh) | 一种资源分配的方法及装置 | |
CN111857992A (zh) | 一种Radosgw模块中线程资源分配方法和装置 | |
Patel et al. | A survey on load balancing in cloud computing | |
CN112463376A (zh) | 一种资源分配方法及装置 | |
CN112631756A (zh) | 一种应用于航天测控软件的分布式调控方法及装置 | |
CN107045452B (zh) | 虚拟机调度方法和装置 | |
CN109005071B (zh) | 一种决策部署方法和调度设备 | |
CN114090256A (zh) | 一种基于云计算的应用交付负载管理方法及其系统 | |
CN117519964B (zh) | 数据库资源管理方法和系统、电子设备及存储介质 | |
CN115391042B (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN117609292A (zh) | 缓存数据查询方法和装置、电子设备及存储介质 | |
US10999350B2 (en) | Supercomputer system, method of data transmission in such supercomputer system and associated computer program product |
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 |