CN117472593B - 一种多线程间资源分配方法及系统 - Google Patents
一种多线程间资源分配方法及系统 Download PDFInfo
- Publication number
- CN117472593B CN117472593B CN202311820091.9A CN202311820091A CN117472593B CN 117472593 B CN117472593 B CN 117472593B CN 202311820091 A CN202311820091 A CN 202311820091A CN 117472593 B CN117472593 B CN 117472593B
- Authority
- CN
- China
- Prior art keywords
- thread
- memory
- running
- allocated
- threads
- 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
- 238000000034 method Methods 0.000 title claims abstract description 65
- 230000015654 memory Effects 0.000 claims abstract description 419
- 238000013468 resource allocation Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims 2
- 230000009286 beneficial effect Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- 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
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种多线程间资源分配方法及系统,在接收到用于请求运行至少一个第一线程的第一任务时,确定各第一线程对应的第一运行内存,第一运行内存为预测得到的对应第一线程完成运行所占用的总内存。若各第一线程对应的第一运行内存的和大于待分配的内存,则减少预设数量个目标第一线程对应的第一运行内存。其中,目标第一线程为至少一个第一线程中对应有最大的第一运行内存的第一线程。基于各第一线程对应的第一运行内存,在待分配的内存中为各第一线程分配对应的内存。其中,不同的第一线程分配的内存不同。本发明能够动态的为多线程进行资源分配,从而避免在多线程环境下出现锁竞争的问题。
Description
技术领域
本发明涉及处理器设计技术领域,尤其涉及一种多线程间资源分配方法及系统。
背景技术
由于多线程环境要求同一物理内存在同一时间只能有一个线程访问。因此,在保证各线程资源共享的前提下,当多个线程同时请求该物理内存进行资源分配时,后请求的线程必须等待先请求的线程共享内存分配完毕后才能被进行内存分配。如果同时请求内存分配的线程数量庞大,则会导致程序运行速度下降,造成“死机”甚至“系统崩溃”等现象。
目前,可以将可用的物理内存分为多个子栈,并为每个子栈分配若干线程,以缓解锁竞争的情况。但是,每个子栈上仍然可以被分配多个线程。对于每个子栈,仍然存在锁竞争的问题。因此,在多线程环境下,如何对多线程进行资源分配是亟需解决的问题。
发明内容
本发明所要解决的技术问题是提供一种多线程间资源分配方法及系统,能够动态的为多线程进行资源分配,从而避免在多线程环境下出现锁竞争的问题。
本发明解决上述技术问题的技术方案如下:
一方面,本发明提供一种多线程间资源分配方法,包括:接收用于请求运行至少一个第一线程的第一任务。响应于第一任务,确定各第一线程对应的第一运行内存,第一运行内存为预测得到的对应第一线程完成运行所占用的总内存。若各第一线程对应的第一运行内存的和大于待分配的内存,则减少预设数量个目标第一线程对应的第一运行内存。其中,目标第一线程为至少一个第一线程中对应有最大的第一运行内存的第一线程。基于各第一线程对应的第一运行内存,在待分配的内存中为各第一线程分配对应的内存。其中,不同的第一线程分配的内存不同。检测到至少一个第一线程中存在运行完毕的第一线程,释放为运行完毕的第一线程分配的内存。或者,检测到至少一个第一线程中存在运行过程中被分配的内存被全部占用的第一线程,增加为运行过程中被分配的内存被全部占用的第一线程分配的内存。
本发明的有益效果是:能够动态的为多线程进行资源分配,从而避免在多线程环境下出现锁竞争的问题。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,对于至少一个第一线程中的任一第一线程,若历史运行过该任一第一线程,则基于历史运行该任一第一线程所占用的内存,确定该任一第一线程对应的第一运行内存。若历史未运行过该任一第一线程,则基于预设规则确定该任一第一线程对应的第一运行内存。
采用上述进一步方案的有益效果是:若历史运行过该任一第一线程,则可以获取历史运行该任一第一线程所占用的内存,并基于获取的历史运行该任一第一线程所占用的内存确定该任一第一线程对应的第一运行内存,不但能够提供一种确定该任一第一线程对应的第一运行内存的一种实现方式,还能够提高获取的该任一第一线程对应第一运行内存的精度。若历史未运行过该任一第一线程,则可以基于预设规则确定该任一第一线程对应的第一运行内存,能够提供确定该任一第一线程对应的第一运行内存的另一种实现方式。
进一步,预设规则包括基于预设内存确定任一第一线程对应的第一运行内存。或者,预设规则包括基于任一第一线程对应的运行参数、局部变量、操作数栈、上下文信息中的至少一项确定该任一第一线程对应的第一运行内存。
采用上述进一步方案的有益效果是:给出了预设规则的具体内容。
进一步,基于各第一线程对应的第一运行内存,在待分配的内存中确定第一内存。其中,第一内存大于各第一线程对应的第一运行内存的和。在第一内存中为各第一线程分配对应的内存。
采用上述进一步方案的有益效果是:可以基于各第一线程对应的第一运行内存,对待分配的内存进行分区处理。其中,该分区包括第一内存所占用的内存区域。由于第一内存大于各第一线程对应的第一运行内存的和,因此,可以在第一内存中为各第一线程分配对应的内存。能够将为各第一线程分配的内存集中在待分配的内存中的同一区域(即第一内存所占用的内存区域),以便后续为其他线程分配对应的内存。
进一步,在待分配的内存中确定第二内存,第二内存与第一内存不同。检测到至少一个第一线程中存在运行完毕的第一线程,释放为运行完毕的第一线程分配的内存之后,将释放的内存添加至第二内存。
采用上述进一步方案的有益效果是:能够对待分配的内存对应的内存区域进行分区管理,后续若有其他线程请求分配内存,可以在第二内存中确定为其他线程分配的内存。由于第二内存与第一内存不同,因此,基于第二内存中的内存运行的其他线程与第一线程在运行过程中互不干扰。
进一步,接收用于请求运行至少一个第二线程的第二任务。其中,接收到第二任务的时间晚于接收到第一任务的时间。响应于第二任务,确定各第二线程对应的第二运行内存,第二运行内存为预测得到的对应第二线程完成运行所占用的总内存。在待分配的内存中确定第二内存之后,基于各第二线程对应的第二运行内存,在第二内存中为各第二线程分配对应的内存。其中,不同的第二线程分配的内存不同。
采用上述进一步方案的有益效果是:为第一线程分配对应的内存以使第一线程运行后,若存在至少一个第二线程请求获取对应的内存空间,则可以在区别于第一内存的第二内存中为各第二线程分配对应的内存。由于第二内存与第一内存不同,因此,基于第二内存中的内存运行的第二线程与第一线程在运行过程中互不干扰。
进一步,建立历史库,历史库用于存储历史运行各线程所占用的内存数据。
采用上述进一步方案的有益效果是:通过建立历史库,可以存储历史运行各线程所占用的内存数据,后续基于历史库对历史运行过的线程所对应的运行内存进行预测,能够提高预测得到的历史运行过的线程所对应的运行内存的精度。
进一步,检测到存在运行完毕的线程,基于运行完毕的线程在运行过程中占用的总内存,更新所述历史库。
采用上述进一步方案的有益效果是:每一次有线程运行完毕后,均可以基于该线程在运行过程中所占用的实际内存更新历史库,后续基于历史库对历史运行过的线程所对应的运行内存进行预测,能够提高预测得到的历史运行过的线程所对应的运行内存的精度。
进一步,对于至少一个第一线程中的任一第一线程,为任一第一线程分配的内存大于或等于任一第一线程对应的第一运行内存。
采用上述进一步方案的有益效果是:给出了为各第一线程分配的内存与各第一线程对应的第一运行内存之间的对应关系。以及与各第一线程对应的第一运行内存,可以确定为各第一线程分配的内存。
另一方面,本发明提供一种多线程间资源分配系统,包括任务接收模块、预测模块、内存调整模块、以及内存分配模块。
其中,任务接收模块用于接收用于请求运行至少一个第一线程的第一任务。预测模块用于响应于第一任务,确定各第一线程对应的第一运行内存,第一运行内存为预测得到的对应第一线程完成运行所占用的总内存。内存调整模块用于在检测到各第一线程对应的第一运行内存的和大于待分配的内存的情况下,减少预设数量个目标第一线程对应的第一运行内存。其中,目标第一线程为至少一个第一线程中对应有最大的第一运行内存的第一线程。内存分配模块用于基于各第一线程对应的第一运行内存,在待分配的内存中为各第一线程分配对应的内存。其中,不同的第一线程分配的内存不同。以及,用于在检测到至少一个第一线程中存在运行完毕的第一线程,释放为运行完毕的第一线程分配的内存。或者,检测到至少一个第一线程中存在运行过程中被分配的内存被全部占用的第一线程,增加为运行过程中被分配的内存被全部占用的第一线程分配的内存。
本发明的有益效果是:能够动态的为多线程进行资源分配,从而避免在多线程环境下出现锁竞争的问题。
附图说明
图1为本发明提供的一种电子设备的结构示意图;
图2为本发明提供的一种多线程间资源分配方法的流程示意图;
图3为本发明提供的一种多线程间资源分配系统的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。同时,在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
由于多线程环境要求同一物理内存在同一时间只能有一个线程访问。因此,在保证各线程资源共享的前提下,当多个线程同时请求该物理内存进行资源分配时,后请求的线程必须等待先请求的线程共享内存分配完毕后才能被进行内存分配。如果同时请求内存分配的线程数量庞大,则会导致程序运行速度下降,造成“死机”甚至“系统崩溃”等现象。
目前,可以将可用的物理内存分为多个子栈,并为每个子栈分配若干线程,以缓解锁竞争的情况。但是,每个子栈上仍然可以被分配多个线程。对于每个子栈,仍然存在锁竞争的问题。因此,在多线程环境下,如何对多线程进行资源分配是亟需解决的问题。
基于上述问题,本发明提供一种多线程间资源分配方法及系统,能够动态的为多线程进行资源分配,从而避免在多线程环境下出现锁竞争的问题。
其中,该方法及系统可以应用于能够进行线程运行的电子设备上。下面以本申请提供的方法及系统在电子设备上进行线程的运行与资源分配为例,对本发明提供的多线程间资源分配方法及系统进行详细介绍。
图1示出了电子设备100的结构示意图。
电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
可以理解的是,本发明实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。处理器110的处理单元可以用于运行对应的进程和/或线程。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。例如,完成运行第一线程和/或第二线程的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121(本申请实施例中也可简称为内存)可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令(即,包括至少一个线程的进程)。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
参见图2,本发明提供的多线程间资源分配方法包括步骤S201-S206。
S201:接收用于请求运行至少一个第一线程的第一任务。
其中,可以存在至少两个第一任务,每一个第一任务可以用于请求运行一个第一线程。
也可以只存在一个第一任务,该第一任务可以用于请求运行多个第一线程。例如,请求运行2个第一线程。
S202:响应于第一任务,确定各第一线程对应的第一运行内存。
其中,第一运行内存为预测得到的对应第一线程完成运行所占用的总内存。即,第一线程对应的第一运行内存可以与第一线程完成运行所占用的总内存相同,也可以与第一线程完成运行所占用的总内存不同。第一线程对应的第一运行内存是一个预测值(估测值)。
在一些实施例中,对于任一第一线程,若历史运行过该第一线程,则可以基于历史运行该第一线程所占用的内存,确定该第一线程对应的第一运行内存。
示例性的,线程1为第一线程。若历史运行过线程1,且历史运行线程1时所占用的总内存为13MB,则可以确定线程1对应的第一运行内存为13MB。
在一些实施例中,若历史未运行过该第一线程,则可以基于预设规则确定该第一线程对应的第一运行内存。
在一些实施例中,预设规则包括基于预设内存确定任一第一线程对应的第一运行内存。
示例性的,线程1为第一线程,预设内存可以为8MB。若历史未运行过线程1,则确定线程1对应的第一运行内存为8MB。
在一些实施例中,预设规则包括基于任一第一线程对应的运行参数、局部变量、操作数栈、上下文信息中的至少一项确定该任一第一线程对应的第一运行内存。
其中,运行参数是用于调整对应线程的堆栈空间大小的参数,不同的运行参数对应有不同的堆栈空间大小。线程的局部变量和操作数栈的大小均可以基于方法的调用和使用的变量类型和数量确定。线程的上下文信息包括线程的状态、线程ID、线程的优先级等。线程的上下文信息可以存储在线程对象中,占用的内存空间可以通过对象大小分析工具获取。
S203:若各第一线程对应的第一运行内存的和大于待分配的内存,则减少预设数量个目标第一线程对应的第一运行内存。
其中,目标第一线程为至少一个第一线程中对应有最大的第一运行内存的第一线程。预设数量可以是一个预先设置的数量定值,也可以是基于预设数量规则确定的一个动态的数值。
在一些实施例中,预设数量规则可以包括:
若第一线程对应的内存差大于第一阈值且小于或等于第二阈值,则基于第一比例和第一线程的数量确定预设数量;其中,第一线程对应的内存差即为所有第一线程对应的第一运行内存的总和与待分配的内存的差;
若第一线程对应的内存差大于第二阈值且小于或等于第三阈值,则基于第二比例和第一线程的数量确定预设数量;
若第一线程对应的内存差大于第三阈值且小于或等于第四阈值,则基于第三比例和第一线程的数量确定预设数量。
其中,第一阈值小于第二阈值,第二阈值小于第三阈值。并且,第一比例小于第二比例,第二比例小于第三比例。
需要说明的是,本领域技术人员可以基于实际场景和经验设置第一阈值、第二阈值、第三阈值、第一比例、第二比例以及第三比例。本申请实施例对第一阈值、第二阈值、第三阈值、第一比例、第二比例以及第三比例的具体数值不做限制。
示例性的,线程1、线程2、线程3、线程4和线程5均为第一线程。线程1对应的第一运行内存为15MB,线程2对应的第一运行内存为5MB,线程3对应的第一运行内存为17MB,线程4对应的第一运行内存为13MB,线程5对应的第一运行内存为33MB。线程1、线程2、线程3、线程4和线程5对应的第一运行内存的总和为83MB。
若待分配的内存为75MB,第一阈值为0,第二阈值为10,第一比例为40%。由于线程1、线程2、线程3、线程4和线程5对应的第一运行内存的总和83MB大于待分配的内存75MB,且线程1、线程2、线程3、线程4和线程5对应的第一运行内存的总和与待分配的内存的差为8MB,即第一线程对应的内存差为为8MB,因此,可以基于第一比例40%和第一线程的数量5确定预设数量,预设数量可以为2。即,可以减少2个目标第一线程对应的第一运行内存。在线程1、线程2、线程3、线程4和线程5中,由于线程5和线程3对应的第一运行内存均大于在线程1、线程2、和线程4,因此,可以将线程5和线程3确定为线程1、线程2、线程3、线程4和线程5中的目标第一线程。
在一些实施例中,还可以基于各目标第一线程对应第一运行内存的大小,减少各目标第一线程对应的第一运行内存。其中,对应第一运行内存越大的目标第一线程,其对应的第一运行内存被减少的越多。对应第一运行内存越小的目标第一线程,其对应的第一运行内存被减少的越少。
需要说明的是,本申请实施例不对各目标第一线程对应的第一运行内存被减少的数值做限制,可以基于各目标第一线程对应的第一运行内存大小,按比例减少各目标第一线程对应的第一运行内存。也可以各目标第一线程对应的第一运行内存所减少的数值相同,本申请实施例不与限制。
S204:基于各第一线程对应的第一运行内存,在待分配的内存中为各第一线程分配对应的内存。
其中,不同的第一线程分配的内存不同。
在一些实施例中,基于各第一线程对应的第一运行内存,可以在待分配的内存中确定第一内存。其中,第一内存大于各第一线程对应的第一运行内存的和。在第一内存中为各第一线程分配对应的内存。
示例性的,若待分配的内存为75MB,各第一线程对应的第一运行内存的总和为32MB,可以将待分配的内存分为多个内存区域,例如,划分为34MB对应的内存空间和41MB对应的内存空间。可以将34MB对应的内存空间确定为第一内存对应的内存空间。34MB即为第一内存。
也就是说,可以基于各第一线程对应的第一运行内存,对待分配的内存进行分区处理。其中,该分区包括第一内存所占用的内存区域,也可以包括第二内存、第三内存等更多内存所占用的内存区域。其中,不同的内存所占用的内存区域不同。例如,第一内存与第二内存不同,则第一内存对应的内存区域和第二内存对应的内存区域也不同。
由于第一内存大于各第一线程对应的第一运行内存的和,因此,可以在第一内存中为各第一线程分配对应的内存。能够将为各第一线程分配的内存集中在待分配的内存中的同一区域(即第一内存所占用的内存区域),以便后续为其他线程分配对应的内存。
在一些实施例中,对于至少一个第一线程中的任一第一线程,为任一第一线程分配的内存大于或等于任一第一线程对应的第一运行内存。
在一些实施例中,在待分配的内存中为各第一线程分配对应的内存后,各第一线程可以基于分配的内存进行运行。在各第一线程运行过程中,可以实时检测是否存在运行完毕的第一线程,以及,检测是否存在运行过程中被分配的内存被全部占用的第一线程。
其中,若检测到存在运行完毕的第一线程,则可以继续执行下述步骤S205。若检测到存在运行过程中被分配的内存被全部占用的第一线程,则可以继续执行下述步骤S206。
S205:释放为运行完毕的第一线程分配的内存。
在一些实施例中,可以在待分配的内存中确定第二内存,第二内存与第一内存不同。检测到至少一个第一线程中存在运行完毕的第一线程,释放为运行完毕的第一线程分配的内存之后,将释放的内存添加至第二内存。
也就是说,本申请实施例能够对待分配的内存对应的内存区域进行分区管理,后续若有其他线程请求分配内存,可以在第二内存中确定为其他线程分配的内存。由于第二内存与第一内存不同,因此,基于第二内存中的内存运行的其他线程与第一线程在运行过程中互不干扰。
S206:增加为运行过程中被分配的内存被全部占用的第一线程分配的内存。
在一些实施例中,若接收用于请求运行至少一个第二线程的第二任务。其中,接收到第二任务的时间晚于接收到第一任务的时间。响应于第二任务,可以确定各第二线程对应的第二运行内存,第二运行内存为预测得到的对应第二线程完成运行所占用的总内存。之后,可以在待分配的内存中确定第二内存,基于各第二线程对应的第二运行内存,在第二内存中为各第二线程分配对应的内存。其中,不同的第二线程分配的内存不同。
也就是说,为第一线程分配对应的内存以使第一线程运行后,若存在至少一个第二线程请求获取对应的内存空间,则可以在区别于第一内存的第二内存中为各第二线程分配对应的内存。由于第二内存与第一内存不同,因此,基于第二内存中的内存运行的第二线程与第一线程在运行过程中互不干扰。
在一些实施例中,可以建立历史库。历史库可以用于存储历史运行各线程所占用的内存数据,后续基于历史库对历史运行过的线程所对应的运行内存进行预测,能够提高预测得到的历史运行过的线程所对应的运行内存的精度。
在一些实施例中,若检测到存在运行完毕的线程,则可以基于运行完毕的线程在运行过程中占用的总内存,更新历史库。
也就是说,每一次有线程运行完毕后,均可以基于该线程在运行过程中所占用的实际内存更新历史库,后续基于历史库对历史运行过的线程所对应的运行内存进行预测,能够提高预测得到的历史运行过的线程所对应的运行内存的精度。
参见图3,本发明还提供了一种多线程间资源分配系统,包括任务接收模块、预测模块、内存调整模块、以及内存分配模块。
其中,任务接收模块用于接收用于请求运行至少一个第一线程的第一任务。
预测模块用于响应于第一任务,确定各第一线程对应的第一运行内存,第一运行内存为预测得到的对应第一线程完成运行所占用的总内存。
内存调整模块用于在检测到各第一线程对应的第一运行内存的和大于待分配的内存的情况下,减少预设数量个目标第一线程对应的第一运行内存。其中,目标第一线程为至少一个第一线程中对应有最大的第一运行内存的第一线程。
内存分配模块用于基于各第一线程对应的第一运行内存,在待分配的内存中为各第一线程分配对应的内存。其中,不同的第一线程分配的内存不同。以及,用于在检测到至少一个第一线程中存在运行完毕的第一线程,释放为运行完毕的第一线程分配的内存。或者,检测到至少一个第一线程中存在运行过程中被分配的内存被全部占用的第一线程,增加为运行过程中被分配的内存被全部占用的第一线程分配的内存。
本发明提供的多线程间资源分配系统能够动态的为多线程进行资源分配,从而避免在多线程环境下出现锁竞争的问题。
本申请实施例还提供一种芯片系统,包括:处理器,所述处理器与存储器耦合,所述存储器用于存储程序或指令,当所述程序或指令被所述处理器执行时,使得该芯片系统实现上述任一方法实施例中的方法。
可选地,该芯片系统中的处理器可以为一个或多个。该处理器可以通过硬件实现也可以通过软件实现。当通过硬件实现时,该处理器可以是逻辑电路、集成电路等。当通过软件实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现。
可选地,该芯片系统中的存储器也可以为一个或多个。该存储器可以与处理器集成在一起,也可以和处理器分离设置,本申请实施例并不限定。示例性地,存储器可以是非瞬时性处理器,例如只读存储器ROM,其可以与处理器集成在同一块芯片上,也可以分别设置在不同的芯片上,本申请实施例对存储器的类型,以及存储器与处理器的设置方式不作具体限定。
示例性地,该芯片系统可以是现场可编程门阵列(field programmable gatearray,FPGA),可以是专用集成芯片(AP设备plication specific integrated circuit,ASIC),还可以是系统芯片(system on chip,SoC),还可以是中央处理器(centralprocessor unit,CPU),还可以是网络处理器(network processor,NP),还可以是数字信号处理电路(digital signal processor,DSP),还可以是微控制器(micro controllerunit,MCU),还可以是可编程控制器(programmable logic device,PLD)或其他集成芯片。
应理解,上述方法实施例中的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
在一些方案中,可以对本申请的多个实施例进行组合,并实施组合后的方案。可选的,各方法实施例的流程中的一些操作任选地被组合,并且/或者一些操作的顺序任选地被改变。并且,各流程的步骤之间的执行顺序仅是示例性的,并不构成对步骤之间执行顺序的限制,各步骤之间还可以是其他执行顺序。并非旨在表明所述执行次序是可以执行这些操作的唯一次序。本领域的普通技术人员会想到多种方式来对本文所述的操作进行重新排序。另外,应当指出的是,本文某个实施例涉及的过程细节同样以类似的方式适用于其他实施例,或者,不同实施例之间可以组合使用。
此外,方法实施例中的某些步骤可等效替换成其他可能的步骤。或者,方法实施例中的某些步骤可以是可选的,在某些使用场景中可以删除。或者,可以在方法实施例中增加其他可能的步骤。
并且,各方法实施例之间可以单独实施,或结合起来实施。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种多线程间资源分配方法,其特征在于,包括:
接收用于请求运行至少一个第一线程的第一任务;
响应于所述第一任务,确定各所述第一线程对应的第一运行内存,所述第一运行内存为预测得到的对应第一线程完成运行所占用的总内存;
若各所述第一线程对应的第一运行内存的和大于待分配的内存,则减少预设数量个目标第一线程对应的第一运行内存;其中,所述目标第一线程为所述至少一个第一线程中对应有最大的第一运行内存的所述第一线程;并且,对于所述预设数量个目标第一线程中的任一目标第一线程,所述任一目标第一线程对应的第一运行内存被减少的数值与所述任一目标第一线程对应的第一运行内存的大小相关联:
对于所述至少一个第一线程中的任一第一线程,基于所述任一第一线程对应的第一运行内存,在待分配的内存中为所述任一第一线程分配对应的内存;其中,不同的所述第一线程分配的内存不同;
检测到所述至少一个第一线程中存在运行完毕的第一线程,释放为所述运行完毕的第一线程分配的内存;或者,检测到所述至少一个第一线程中存在运行过程中被分配的内存被全部占用的第一线程,增加为所述运行过程中被分配的内存被全部占用的第一线程分配的内存;
其中,所述减少预设数量个目标第一线程对应的第一运行内存,还包括:
若所述至少一个第一线程对应的内存差处于预设范围内,则基于预设比例和所述至少一个第一线程的数量确定所述预设数量;其中,所述至少一个第一线程对应的内存差基于各所述第一线程对应的第一运行内存的和与所述待分配的内存之间的差值确定;所述预设范围与所述预设比例存在对应关系。
2.根据权利要求1所述的方法,其特征在于,所述确定各所述第一线程对应的第一运行内存,包括:
对于所述至少一个第一线程中的任一第一线程,若历史运行过所述任一第一线程,则基于历史运行所述任一第一线程所占用的内存,确定所述任一第一线程对应的第一运行内存;
若历史未运行过所述任一第一线程,则基于预设规则确定所述任一第一线程对应的第一运行内存。
3.根据权利要求2所述的方法,其特征在于,所述预设规则包括基于预设内存确定所述任一第一线程对应的第一运行内存;或者,
所述预设规则包括基于所述任一第一线程对应的运行参数、局部变量、操作数栈、上下文信息中的至少一项确定所述任一第一线程对应的第一运行内存。
4.根据权利要求3所述的方法,其特征在于,所述基于各所述第一线程对应的第一运行内存,在待分配的内存中为各所述第一线程分配对应的内存,包括:
基于各所述第一线程对应的第一运行内存,在待分配的内存中确定第一内存;所述第一内存大于各所述第一线程对应的第一运行内存的和;
在所述第一内存中为各所述第一线程分配对应的内存。
5.根据权利要求4所述的方法,其特征在于,所述基于各所述第一线程对应的第一运行内存,在待分配的内存中确定第一内存,还包括:
在所述待分配的内存中确定第二内存;所述第二内存与所述第一内存不同;
所述检测到所述至少一个第一线程中存在运行完毕的第一线程,释放为所述运行完毕的第一线程分配的内存之后,所述方法还包括:
将释放的内存添加至所述第二内存。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
接收用于请求运行至少一个第二线程的第二任务;其中,接收到所述第二任务的时间晚于接收到所述第一任务的时间;
响应于所述第二任务,确定各所述第二线程对应的第二运行内存,所述第二运行内存为预测得到的对应第二线程完成运行所占用的总内存;
所述在所述待分配的内存中确定第二内存之后,所述方法还包括:
基于各所述第二线程对应的第二运行内存,在所述第二内存中为各所述第二线程分配对应的内存;其中,不同的所述第二线程分配的内存不同。
7.根据权利要求6所述的方法,其特征在于,所述接收用于请求运行至少一个第一线程的第一任务之前,所述方法还包括:
建立历史库,所述历史库用于存储历史运行各线程所占用的内存数据。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
检测到存在运行完毕的线程,基于所述运行完毕的线程在运行过程中占用的总内存,更新所述历史库。
9.根据权利要求1所述的方法,其特征在于,所述基于各所述第一线程对应的第一运行内存,在待分配的内存中为各所述第一线程分配对应的内存,还包括:
对于所述至少一个第一线程中的任一第一线程,为所述任一第一线程分配的内存大于或等于所述任一第一线程对应的第一运行内存。
10.一种多线程间资源分配系统,其特征在于,包括:
任务接收模块,用于接收用于请求运行至少一个第一线程的第一任务;
预测模块,用于响应于所述第一任务,确定各所述第一线程对应的第一运行内存,所述第一运行内存为预测得到的对应第一线程完成运行所占用的总内存;
内存调整模块,用于在检测到各所述第一线程对应的第一运行内存的和大于待分配的内存的情况下,减少预设数量个目标第一线程对应的第一运行内存;其中,所述目标第一线程为所述至少一个第一线程中对应有最大的第一运行内存的所述第一线程;并且,对于所述预设数量个目标第一线程中的任一目标第一线程,所述任一目标第一线程对应的第一运行内存被减少的数值与所述任一目标第一线程对应的第一运行内存的大小相关联:
内存分配模块,对于所述至少一个第一线程中的任一第一线程,用于基于所述任一第一线程对应的第一运行内存,在待分配的内存中为所述任一第一线程分配对应的内存;其中,不同的所述第一线程分配的内存不同;以及,用于在检测到所述至少一个第一线程中存在运行完毕的第一线程,释放为所述运行完毕的第一线程分配的内存;或者,检测到所述至少一个第一线程中存在运行过程中被分配的内存被全部占用的第一线程,增加为所述运行过程中被分配的内存被全部占用的第一线程分配的内存;
其中,所述减少预设数量个目标第一线程对应的第一运行内存,还包括:
若所述至少一个第一线程对应的内存差处于预设范围内,则基于预设比例和所述至少一个第一线程的数量确定所述预设数量;其中,所述至少一个第一线程对应的内存差基于各所述第一线程对应的第一运行内存的和与所述待分配的内存之间的差值确定;所述预设范围与所述预设比例存在对应关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311820091.9A CN117472593B (zh) | 2023-12-27 | 2023-12-27 | 一种多线程间资源分配方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311820091.9A CN117472593B (zh) | 2023-12-27 | 2023-12-27 | 一种多线程间资源分配方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117472593A CN117472593A (zh) | 2024-01-30 |
CN117472593B true CN117472593B (zh) | 2024-03-22 |
Family
ID=89635114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311820091.9A Active CN117472593B (zh) | 2023-12-27 | 2023-12-27 | 一种多线程间资源分配方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117472593B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951372A (zh) * | 2015-06-16 | 2015-09-30 | 北京工业大学 | 一种基于预测的Map/Reduce数据处理平台内存资源动态分配方法 |
WO2018121696A1 (zh) * | 2016-12-29 | 2018-07-05 | 深圳市优必选科技有限公司 | 用于多线程处理的方法及装置、服务器 |
CN111324461A (zh) * | 2020-02-20 | 2020-06-23 | 西安芯瞳半导体技术有限公司 | 内存分配方法、装置、计算机设备和存储介质 |
CN113515428A (zh) * | 2021-07-13 | 2021-10-19 | 北京字节跳动网络技术有限公司 | 一种内存监控方法、终端、服务器、设备以及存储介质 |
CN115454642A (zh) * | 2022-09-23 | 2022-12-09 | 中国联合网络通信集团有限公司 | 线程的内存池管理方法、装置、设备及存储介质 |
CN115904724A (zh) * | 2022-12-16 | 2023-04-04 | 广州文远知行科技有限公司 | 线程分配方法、装置、存储介质及计算机设备 |
CN116755891A (zh) * | 2023-08-21 | 2023-09-15 | 成都中科合迅科技有限公司 | 基于多线程的事件队列处理方法和系统 |
CN117149414A (zh) * | 2023-08-15 | 2023-12-01 | 深圳市六度人和科技有限公司 | 一种任务处理方法、装置、电子设备及可读存储介质 |
CN117234691A (zh) * | 2023-09-27 | 2023-12-15 | 北京奥星贝斯科技有限公司 | 任务调度方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8453150B2 (en) * | 2010-06-08 | 2013-05-28 | Advanced Micro Devices, Inc. | Multithread application-aware memory scheduling scheme for multi-core processors |
-
2023
- 2023-12-27 CN CN202311820091.9A patent/CN117472593B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951372A (zh) * | 2015-06-16 | 2015-09-30 | 北京工业大学 | 一种基于预测的Map/Reduce数据处理平台内存资源动态分配方法 |
WO2018121696A1 (zh) * | 2016-12-29 | 2018-07-05 | 深圳市优必选科技有限公司 | 用于多线程处理的方法及装置、服务器 |
CN111324461A (zh) * | 2020-02-20 | 2020-06-23 | 西安芯瞳半导体技术有限公司 | 内存分配方法、装置、计算机设备和存储介质 |
CN113515428A (zh) * | 2021-07-13 | 2021-10-19 | 北京字节跳动网络技术有限公司 | 一种内存监控方法、终端、服务器、设备以及存储介质 |
CN115454642A (zh) * | 2022-09-23 | 2022-12-09 | 中国联合网络通信集团有限公司 | 线程的内存池管理方法、装置、设备及存储介质 |
CN115904724A (zh) * | 2022-12-16 | 2023-04-04 | 广州文远知行科技有限公司 | 线程分配方法、装置、存储介质及计算机设备 |
CN117149414A (zh) * | 2023-08-15 | 2023-12-01 | 深圳市六度人和科技有限公司 | 一种任务处理方法、装置、电子设备及可读存储介质 |
CN116755891A (zh) * | 2023-08-21 | 2023-09-15 | 成都中科合迅科技有限公司 | 基于多线程的事件队列处理方法和系统 |
CN117234691A (zh) * | 2023-09-27 | 2023-12-15 | 北京奥星贝斯科技有限公司 | 任务调度方法及装置 |
Non-Patent Citations (1)
Title |
---|
并行计算的内存访问方法;林芝;;数字技术与应用;20130515(05);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117472593A (zh) | 2024-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109783229B (zh) | 线程资源分配的方法及装置 | |
CN109308220B (zh) | 共享资源分配方法及装置 | |
CN110209493B (zh) | 内存管理方法、装置、电子设备及存储介质 | |
CN104991813B (zh) | 一种数据处理的方法和装置 | |
CN111597040B (zh) | 一种资源分配方法、装置、存储介质和电子设备 | |
CN113590508B (zh) | 动态可重构的内存地址映射方法及装置 | |
US20230195375A1 (en) | Process isolation for a processor-in-memory ("pim") device | |
CN116414542B (zh) | 任务调度方法、装置、设备及存储介质 | |
CN113010453A (zh) | 一种内存管理的方法、系统、设备及可读存储介质 | |
CN115509951A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
EP2740038B1 (en) | Memory coalescing computer-implemented method, system and apparatus | |
CN117472593B (zh) | 一种多线程间资源分配方法及系统 | |
US20130132708A1 (en) | Multi-core processor system, computer product, and control method | |
US10901883B2 (en) | Embedded memory management scheme for real-time applications | |
US11392388B2 (en) | System and method for dynamic determination of a number of parallel threads for a request | |
US20050097258A1 (en) | Systems and methods for accessing thread private data | |
CN115905040B (zh) | 计数器的处理方法、图形处理器、设备及存储介质 | |
US20230214271A1 (en) | Method of scheduling cache budget in multi-core processing device and multi-core processing device performing the same | |
CN111625358A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN112988355B (zh) | 程序任务的调度方法、装置、终端设备及可读存储介质 | |
CN115576692A (zh) | 多线程的数据并发方法及电子设备 | |
TW202119215A (zh) | 共用代碼之系統與代碼共用方法 | |
CN114285129B (zh) | 充电匹配方法、装置及存储介质 | |
CN114391138A (zh) | 针对对(多个)争用的资源的多线程访问的流控制 | |
CN118363542B (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 |