CN115543612A - 线程控制方法、装置、电子设备及存储介质 - Google Patents
线程控制方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115543612A CN115543612A CN202211160275.2A CN202211160275A CN115543612A CN 115543612 A CN115543612 A CN 115543612A CN 202211160275 A CN202211160275 A CN 202211160275A CN 115543612 A CN115543612 A CN 115543612A
- Authority
- CN
- China
- Prior art keywords
- thread
- priority
- lock
- target
- preset
- 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
Images
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/5022—Mechanisms to release resources
-
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5021—Priority
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
技术领域
本申请涉及电子设备技术领域,更具体地,涉及一种线程控制方法、装置、电子设备及存储介质。
背景技术
随着科技水平和生活水平的快速进步,电子设备(例如智能手机、平板电脑等)已经成为人们生活中常用的电子产品之一,并且人们对电子设备的运行流畅度的要求也越来越高。相关技术中,电子设备运行的线程越来越多,内存资源也相应变得紧张,若多个线程同时访问同一块内存,造成关键线程阻塞时间过长,从而使得电子设备的运行流畅度受到影响。
发明内容
本申请提出了一种线程控制方法、装置、电子设备及存储介质,可以提升关键线程的运行流畅度。
第一方面,本申请实施例提供了一种线程控制方法,应用于电子设备,所述方法包括:在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级;若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
第二方面,本申请实施例提供了一种线程控制装置,所述装置包括:线程确定模块以及优先级调整模块,其中,所述线程确定模块用于在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级;所述优先级调整模块用于若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
第三方面,本申请实施例提供了一种电子设备,包括:一个或多个处理器;存储器;一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个应用程序配置用于执行上述第一方面提供的线程控制方法。
第四方面,本申请实施例提供了一种计算机可读取存储介质,所述计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行上述第一方面提供的线程控制方法。
本申请提供的方案,通过在第一线程等待持有第一目标锁时,确定当前持有第一目标锁的第二线程,该第一线程的线程优先级高于第一优先级,若第二线程的线程优先级低于第二优先级,则提高第二线程的线程优先级,该第二优先级低于第一优先级。由此,可以在线程优先级高于第一优先级的第一线程等待持锁时,对当前持锁的线程优先级低于第二优先级的第二线程进行线程优先级的提升,从而加快第二线程的运行,使得第一线程更快地持锁,进而提升第一线程的运行流畅度。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本申请一个实施例的线程控制方法流程图。
图2示出了根据本申请另一个实施例的线程控制方法流程图。
图3示出了根据本申请又一个实施例的线程控制方法流程图。
图4示出了根据本申请再一个实施例的线程控制方法流程图。
图5示出了根据本申请一个实施例的线程控制装置的一种框图。
图6是本申请实施例的用于执行根据本申请实施例的线程控制方法的电子设备的框图。
图7是本申请实施例的用于保存或者携带实现根据本申请实施例的线程控制方法的程序代码的存储单元。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
随着电子设备的迅速发展,消费者在追求华丽的手机外观,丰富的操作体验的同时,对电子设备的运行流畅性的需求也是日益提高,如何调控与电子设备的运行流畅性相关的系统资源调控也是日益重要。其中,随着用户的使用时长增加,系统后台增多,内存资源逐渐变得紧张的情况下,若多个线程同时访问同一块内存,造成关键线程阻塞时间过长,从而使得电子设备的运行流畅度受到影响。例如,相关技术中是线程在获取互斥锁(mutex)时,如果锁正在被别的任务持有,想去拿锁的线程就会被放入一个等待队列中,等到拿锁的线程释放了锁后,等待队列中的任务才会被唤醒起来得到执行,因此在用户在操作界面的时候,此时前台加载内容的线程为关键线程(线程优先级较高),前台加载内容的线程与后台多个线程同时访问同一块内存,会造成前台线程阻塞时间过长,从而引起卡顿。
针对上述问题,发明人提出了本申请实施例提供的线程控制方法、装置、电子设备以及存储介质,通过在线程优先级高于第一优先级的第一线程等待持锁时,对当前持锁的线程优先级低于第二优先级的第二线程进行线程优先级的提升,从而加快第二线程的运行,使得第一线程更快地持锁,进而提升第一线程的运行流畅度。其中,具体的线程控制方法在后续的实施例中进行详细的说明。
下面再结合附图对本申请实施例提供的线程控制方法进行详细介绍。
请参阅图1,图1示出了本申请一个实施例提供的线程控制方法的流程示意图。在具体的实施例中,所述线程控制方法应用于如图5所示的线程控制装置400以及配置有所述线程控制装置400的电子设备100(图6)。下面将以电子设备为例,说明本实施例的具体流程,当然,可以理解的,本实施例所应用的电子设备可以为智能手机、平板电脑、智能手表、电子书、笔记本电脑等,在此不做限定。下面将针对图1所示的流程进行详细的阐述,所述线程控制方法具体可以包括以下步骤:
步骤S110:在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级。
其中,第一线程可以是电子设备中创建的线程优先级高于第一优先级的任一线程。第一优先级可以是预先设定的线程优先级,当进程的线程优先级高于第一优先级时,可以认为该进程的线程优先级较高,其可以被视为关键线程。例如,线程优先级分为1~10,线程优先级为1时,线程优先级最低,线程优先级为10时,线程优先级最高;该情况下,第一优先级可以为6、7、8等,当然,第一优先级的具体数值可以不做限定。
第一目标锁可以为读写锁、互斥锁、条件锁以及自旋锁等,其类型可以不做限定。其中,在电子设备的操作系统中,同一时间一般会并行地运行多个线程,会出现多个线程同时访问同一资源的现象,因此内核中多进程也需要一些同步机制来同步各执行单元对共享数据的访问,进而出现了Linux系统中的锁机制,锁是一种权限,线程只有获取到锁之后才能访问该锁对应的资源。
在本申请实施例中,在第一线程等待持有第一目标锁时,则第一线程处于阻塞状态,需要等待持有第一目标锁后才能运行,该情况下,可以确定当前持有第一目标锁的线程(作为第二线程),以便对第二线程进行控制,以使第一线程能够更快地持有第一目标锁,从而能够保证高线程优先级的第一线程的流程运行。
在一些实施方式中,对于一些类型的锁,可能Linux系统中无法记录锁的持有者,因此,电子设备中对当前持有持锁的线程进行记录,以便基于记录的信息,确定当前持锁的线程。
步骤S120:若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
在本申请实施例中,电子设备在确定出当前持有第一目标锁的第二线程后,则可以确定第二线程的线程优先级是否低于第二优先级,若第二线程的线程优先级低于第二优先级,则表示第二线程的线程优先级偏低,其在电子设备创建的线程中的关键程度偏低。其中,第二优先级可以是预先设定的低于第一优先级的线程优先级,例如,线程优先级分为1~10,线程优先级为1时,线程优先级最低,线程优先级为10时,线程优先级最高;该情况下,第二优先级可以为2、3、4等,当然,第二优先级的具体数值可以不做限定。
可以理解地,电子设备的操作系统中线程的线程优先级决定了所分配至线程的运行资源,线程优先级越高则操作系统分配至线程的运行资源越多,反之,线程优先级越低则操作系统分配至线程的运行资源越低。其中,运行资源可以是处理器资源,例如,中央处理器(Central Processing Unit,CPU)资源、图形处理器(Graphics Processing Unit,GPU)资源等。因此,在当前持有第一目标锁的第二线程的线程优先级低于第二优先级的情况下,其由于线程优先级较低,则分配至第二线程的运行资源较少,因此可能出现被线程优先级更高的线程打断运行的情况,故可以提高第二线程的线程优先级,以使分配至第二线程的运行资源增多,以避免被打断运行,从而加快第二线程的运行,进而使得第一线程能够更快地持有第一目标锁,保证高线程优先级的第一线程能够更快地持有第一目标锁。
在一些实施方式中,若第二线程的线程优先级高于或等于第二优先级,则表示第二线程的线程优先级不低,第二线程的运行过程不容易被打断,因此可以不进行处理。
示例性地,在一些场景中,电子设备显示的界面为滑动列表,第一线程为前台加载列表内容的线程,此时第一线程的线程优先级高于第一优先级,即系统希望第一线程快速地运行,以保证电子设备的运行流畅性;此时,可能第一线程与其他线程同时需求访问同一内存,并且第二线程正持有锁对该内存进行访问,基于以上实施方式,则可以使得第一线程能够更快地持有锁对该内存进行访问,从而保证用户滑动列表时内容加载的流畅性。
本申请实施例提供的线程控制方法,通过在第一线程等待持有第一目标锁时,确定当前持有第一目标锁的第二线程,该第一线程的线程优先级高于第一优先级,若第二线程的线程优先级低于第二优先级,则提高第二线程的线程优先级,该第二优先级低于第一优先级。由此,可以在线程优先级高于第一优先级的第一线程等待持锁时,对当前持锁的线程优先级低于第二优先级的第二线程进行线程优先级的提升,从而加快第二线程的运行,使得第一线程更快地持锁,进而提升第一线程的运行流畅度。
请参阅图2,图2示出了本申请另一个实施例提供的线程控制方法的流程示意图。该线程控制方法应用于上述电子设备,下面将针对图2所示的流程进行详细的阐述,所述线程控制方法具体可以包括以下步骤:
步骤S210:在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级。
在本申请实施例中,步骤S210可以参阅其他实施例的内容,在此不再赘述。
步骤S220:若所述第二线程的线程优先级低于第二优先级,确定当前所述电子设备的剩余资源,所述第二优先级低于所述第一优先级。
在本申请实施例中,在确定出当前持有第一目标锁的第二线程的线程优先级低于第二优先级的情况下,可以确定电子设备的剩余资源,以根据电子设备的剩余资源,对第二线程的线程优先级进行提升。其中,电子设备的剩余资源可以是电子设备剩余的运行资源,可以理解地,电子设备的剩余资源的多少,可以决定能够第二线程对应可增加分配的运行资源,因此可以获取电子设备的剩余资源,以针对性地提升第二线程的线程优先级。
步骤S230:若所述剩余资源多于第一预设资源,则将所述第二线程的线程优先级提高至所述第一线程的线程优先级。
在确定出电子设备的剩余资源后,则可以将剩余资源与第一预设资源进行比较。若电子设备的剩余资源多于第一预设资源,则表示电子设备的剩余资源能够满足第二线程的线程优先级提高至第一线程的线程优先级所需增加的运行资源;反之,若电子设备的剩余资源少于或等于第一预设资源,则表示电子设备的剩余资源不能够满足第二线程的线程优先级提高至第一线程的线程优先级所需增加的运行资源。其中,第一预设资源是预先设置的,其具体数值可以不做限定,例如剩余资源为CPU的剩余使用率,则第一预设资源可以为20%、40%、60%等。
在本申请实施例中,若确定出电子设备的剩余资源多于第一预设资源,则可以将第二线程的线程优先级提高至第一线程的线程优先级,以使第二线程的线程优先级与第一线程的线程优先级相同,也即将第一线程的线程优先级传递给第二线程,使得当前持有第一目标锁的第二线程的重要程度与等待持有第一目标锁的第一线程的重要程度相同,使得电子设备能够以相同的运行速度运行第二线程,进而使得第一线程能够更快地持有第一目标锁。
在一些实施方式中,第一线程的线程优先级可以低于最高线程优先级。该情况下,若以上剩余资源多于第一预设资源,且所述剩余资源少于第三预设资源,则将所述第二线程的线程优先级提高至所述第一线程的线程优先级,所述第三预设资源多于所述第一预设资源。另外,所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,还包括:若所述剩余资源多于第一预设资源,且所述剩余资源等于或少于所述第三预设资源,则将所述第二线程的线程优先级提高至最高线程优先级。
在该实施方式中,若剩余资源不少于第三预设资源,则表示电子设备的剩余资源能够满足第二线程的线程优先级提高至最高线程优先级所需增加的运行资源;反之,若剩余资源少于第三预设资源,则表示电子设备的剩余资源不能够满足第二线程的线程优先级提高至最高线程优先级所需增加的运行资源。第三预设资源可以多于第一预设资源,例如,第一预设资源为40%,则第三预设资源可以为50%、60%等。因此,在剩余资源多于第一预设资源,且剩余资源少于第三预设资源的情况下,可以将第二线程的线程优先级提高至第一线程的线程优先级;而在剩余资源不少于第三预设资源的情况下,可以将第二线程的线程优先级提高至最高线程优先级,使得第二线程能更快地运行,从而进一步减少第一线程等待持锁的时间。
步骤S240:若所述剩余资源少于或等于所述第一预设资源,且所述剩余资源多于第二预设资源,则将所述第二线程的线程优先级提高至第三优先级,所述第二预设资源少于所述第一预设资源,所述第三优先级低于所述第一线程的线程优先级,且所述第三优先级高于调整前的所述第二线程的线程优先级。
在本申请实施例中,若电子设备的剩余资源少于或等于第一预设资源,并且该剩余资源多于第二预设资源,则表示电子设备的剩余资源不能够满足第二线程的线程优先级提高至第一线程的线程优先级所需增加的运行资源,但是能够相对较小地(相对提高至第一线程的线程优先级)提高第二线程的线程优先级,以避免影响其他线程的运行。因此,该情况下,可以将第二线程的线程优先级提高至第三优先级,且该第三优先级低于第一线程的线程优先级,且第三优先级高于调整前的第二线程的线程优先级(即第二线程原本的线程优先级)。例如,第一线程的线程优先级为8,第二线程的线程优先级为3,在电子设备的剩余资源少于或等于第一预设资源,且该剩余资源多于第二预设资源的情况下,则可以将第二线程的线程优先级提高至7、6、5等。
本申请实施例提供的线程控制方法,通过在第一线程等待持有第一目标锁时,在当前持有第一目标锁的第二线程的线程优先级低于第二优先级的情况下,确定电子设备的剩余资源,并根据剩余资源,针对性地提升第二线程的线程优先级。由此,不仅可以加快第二线程的运行,使第一线程更快地持锁,进而提升第一线程的运行流畅度,还可以不影响其他线程的运行,保证电子设备的运行流畅性。
请参阅图3,图3示出了本申请又一个实施例提供的线程控制方法的流程示意图。该线程控制方法应用于上述电子设备。于本申请实施例中,以上第一目标锁可以为读写锁,下面将针对图3所示的流程进行详细的阐述,所述线程控制方法具体可以包括以下步骤:
步骤S310:在预设队列中记录当前持有所述第一目标锁的所有第二线程。
在本申请实施例中,第一线程等待持有的锁可以为读写锁(例如rwsem锁),由于相关技术中读写锁的相关代码中并没有记录持有读写锁的线程是哪些,故无法很好地针对当前持有锁的线程进行优先级的调整。因此,电子设备中可以维持有一个预设队列,该预设队列中记录有当前持有读写所的所有线程,因此,电子设备可以在预设队列中记录当前持述第一目标锁的所有第二线程,以便在有高线程优先级的线程等待持有第一目标锁时,能够基于该预设队列,确定出当前持有第一目标锁的线程。
步骤S320:在第一线程等待持有所述第一目标锁时,基于所述预设队列确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级。
在本申请实施例中,在高线程优先级(线程优先级高于第一优先级)的线程等待持有第一目标锁的情况下,由于电子设备维持有记录持有读写锁的线程的预设队列,因此可以基于预设队列确定当前持该第一目标锁的第二线程。
在一些实施方式中,第一目标锁为读写锁的情况下,第一线程进入等待队列等待持有第一目标锁时,由于第一线程的线程优先级高于第一优先级,电子设备还可以将第一线程插入到等待队列的头部,以便在第二线程释放临界区后,第一线程可以更快地持有第一目标锁。
在一些实施方式中,第一目标锁为读写锁的情况下,第一线程进入等待队列等待持有第一目标锁时,也可以按照等待队里中线程优先级从高到低的顺序对等待队列中的线程进行排序后,将第一线程插入至等待队列中相应地位置。例如,等待队里中包括线程1、线程2和线程3,线程1、线程2和线程3的线程优先级依次降低,则线程1、线程2和线程3在等待队列中从头部依次排列,在第一线程进入等待队列时,第一线程的线程优先级高于线程2的线程优先级,且低于线程1的线程优先级,则将第一线程插入至线程1与线程2之间。
步骤S330:若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
在一些实施方式中,由于读写锁被读取数据的进程占用时,即读锁占用了临界区时,由于读锁是共享的,则可能同时存在多个第二线程持有第一目标锁并占用了临界区,因此,若同时提高多个第二线程的线程优先级,则可能导致分配过多的运行资源至第二线程,而导致其他进程能够得到的运行资源过少,进而导致被饿死。故电子设备在确定出第二线程的线程优先级低于第二优先级的情况下,可以确定出预设队列中第二线程的数量,即当前持有第一目标锁的线程的数量;确定出第二线程的数量后,可以将第二线程的数量与预设数量进行比较,若第二线程的数量小于或等于预设数量,则可以将所有第二线程的线程优先级进行提高;若第二线程的数量大于预设数量,则提高预设队列中的目标线程(部分第二线程)的线程优先级,以避免提升线程优先级的线程过多,而导致其他线程所得到的资源过少。其中,在提高第二线程的线程优先级时,可以参照前述实施例中调整第二线程的线程优先级的方式,在此不再赘述。
在一种可能的实施方式中,若所述第二线程的线程优先级低于第二优先级,且确定出预设队列中的所述第二线程的数量大于预设数量,则可以根据每个所述第二线程的线程优先级,从所述预设队列中获取所述预设数量的所述第二线程作为所述目标线程,其中,所述目标线程的线程优先级高于所述预设队列中除所述目标线程以外的其他线程的线程优先级;提高所述预设队列中的目标线程的线程优先级。
在该实施方式中,在第二线程的数量大于预设数量的情况下,对预设队列中部分第二线程提高线程优先级时,可以对预设队列中的第二线程,按照线程优先级从高到低的顺序进行排序,并获取排序结果中前N个线程作为目标线程,N与预设数量相等。由此,对线程优先级相对其他线程较高的目标线程的线程优先级进行提升,可以使得线程优先级相对其他线程较高的目标线程的线程相对其他线程更快地执行,使临界区更快地被释放,从而减少第一线程等待持有第一目标锁的时间。
在一种可能的实施方式中,若所述第二线程的线程优先级低于第二优先级,且确定出预设队列中的所述第二线程的数量大于预设数量,则可以根据每个所述第二线程的线程优先级,从所述预设队列中获取所述预设数量的所述第二线程作为所述目标线程,其中,所述目标线程的线程优先级低于所述预设队列中除所述目标线程以外的其他线程的线程优先级;提高所述预设队列中的目标线程的线程优先级。
在该实施方式中,在第二线程的数量大于预设数量的情况下,对预设队列中部分第二线程提高线程优先级时,可以对预设队列中的第二线程,按照线程优先级从低到高的顺序进行排序,并获取排序结果中前N个线程作为目标线程,N与预设数量相等。由此,对线程优先级相对其他线程较低的目标线程的线程优先级进行提升,可以使得线程优先级相对其他线程较低的目标线程的线程相对其他线程更快地执行,使临界区更快地被释放,从而减少第一线程等待持有第一目标锁的时间。
步骤S340:若所述第二线程释放了所述第一目标锁对应的临界区,则将所述第二线程的线程优先级还原为调整前的线程优先级。
在本申请实施例中,在预设队列中记录的持有第一目标锁的第二线程释放了第一目标锁对应的临界区后,则第一线程可以持有第一目标锁,此时,则可以还原第二线程的线程优先级为调整前的线程优先级,使其所能够得到的运行资源与其原本的线程优先级匹配,从而保证其他线程的正常运行。
下面再通过举例对本申请实施例提供的线程控制方法应用于读写锁机制时进行说明。
相关技术中,在T1时刻,有writer线程等待持有写锁和第一线程等待持有读锁,此时多个reader线程持有读锁并占用了临界区,在多个reader线程释放临界区后,由等待的writer线程持有写锁并占用了临界区,在writer线程释放临界区后,再由第一线程持有读锁并占用临界区。在这样的情况下,若以上多个reader线程和writer线程的线程优先级低于第二优先级,则这些线程的运行很可能被打断,因此会导致第一线程需要较长的时间后才能持有第一目标锁。
基于本申请实施例提供的线程控制方法,通过在预设队列中记录当前持有第一目标锁的线程,则在以上举例中,多个reader线程持有读锁并占用了临界区的时候,多个reader线程被作为以上第二线程,第二线程的线程优先级会被提高,因此会加快多个reader线程释放临界区;然后,再由writer线程持锁,此时writer线程的线程优先级也会被提高,因此会加快writer线程释放临界区,然后由第一线程持锁对临界区的资源进行读取。可以看出,在第一线程等待持锁的过程中,可以减少第一线程的等待时长。
本申请实施例提供的线程控制方法,通过针对读写锁维持有预设队列记录持锁的线程,在第一线程等待持有第一目标锁,且第一目标锁为读写锁的情况下,若当前持有第一目标锁的第二线程的线程优先级低于第二优先级,则提升第二线程的线程优先级;并且在第二线程释放了第一目标锁对应的临界区后,还原其线程优先级。由此,不仅可以加快第二线程的运行,使第一线程更快地持锁,进而提升第一线程的运行流畅度,还可以保证其他线程的正常运行。
请参阅图4,图4示出了本申请再一个实施例提供的线程控制方法的流程示意图。该线程控制方法应用于上述电子设备。于本申请实施例中,以上第一目标锁可以为互斥锁,下面将针对图4所示的流程进行详细的阐述,所述线程控制方法具体可以包括以下步骤:
步骤S410:在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级。
步骤S420:若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
步骤S430:若所述第二线程当前等待持有第二目标锁,则确定当前持有所述第二目标锁的第三线程,所述第二目标锁为互斥锁。
在本申请实施例中,第一线程等待持有的锁可以为互斥锁(例如mutex锁),互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁(lock)和解锁(unlock),如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁,在完成了对共享资源的访问后,要对互斥量进行解锁。而在互斥锁机制中,可能出现一个线程尝试获取一个互斥锁,而当前持有该互斥锁的线程也可能在等待持有另一互斥锁的情况,此时该线程也会处于阻塞状态。例如,当高线程优先级的线程1等待获取互斥锁a时,互斥锁a被线程2持有,此时线程2也在等待持有互斥锁b,因此线程2也处于阻塞状态,只有在当前持有互斥锁b的线程3释放互斥锁b后,线程2才能持有互斥锁b并处于运行状态,然后线程2才能够释放互斥锁a。并且,当前持有互斥锁b的线程3的线程优先级较低的情况下,线程3在运行过程中也容易被打断,导致线程2等待持有互斥锁b和线程1等待持有互斥锁a的时间较长。
因此,在当前持有所述第一目标锁的第二线程的线程优先级低于第二优先级的情况下,对第二线程的线程优先级进行提高后,还可以确定第二线程是否在等待持有另一互斥锁(第二目标锁),若第二线程在等待持有第二目标锁,则还可以确定当前持有第二目标锁的第三线程,以便通过调整第三线程的线程优先级,使得第二线程能够更快地持有第二目标锁,从而更快地释放第一目标锁。其中,在提高第二线程的线程优先级时,可以参照前述实施例中调整第二线程的线程优先级的方式;在提高第三线程的线程优先级时,可以参照前述实施例中调整第三线程的线程优先级的方式,在此不再赘述。
步骤S440:若所述第三线程的线程优先级低于所述第二优先级,则提高所述第三线程的线程优先级。
在本申请实施例中,在确定出当前持有第二目标锁的第三线程后,可以确定第三线程的线程优先级是否低于第二优先级;若第三线程的线程优先级低于第二优先级,则表示第三线程的线程优先级偏低,其在电子设备创建的线程中的关键程度偏低,因此,可以提高第三线程的线程优先级,使得第三线程可分配到的运行资源增加,从而增加第三线程的运行速度,使得第二线程更快地持有第二目标锁并完成执行,进而使第一线程能够更快地持有第二线程在完成运行后释放的第一目标锁。
在一些实施方式中,在第二线程释放了第一目标锁后,则将所述第二线程的线程优先级还原为调整前的线程优先级(即第二线程原本的线程优先级)。同样地,在第三线程释放了第二目标锁后,也可以将第三线程的线程优先级还原为调整前的线程优先级(即第三线程原本的线程优先级)。
在一些实施方式中,若第三线程也在等待持有其他互斥锁(第三目标锁),即第三线程也处于阻塞状态,且其处于阻塞状态的原因是在等待持有其他互斥锁,该情况下,也可以确定当前持有第三目标锁的第四线程,并在第四线程的线程优先级低于第二优先级的情况下,提高第四线程的线程优先级。也就是说,在第一线程因为等待持有互斥锁而处于阻塞状态的情况下,可以查找持有该互斥锁的线程,并提高持有该互斥锁的线程的优先级;并且,持有该互斥锁的线程也因为等待持有另一互斥锁而处于阻塞状态的情况下,可以继续查找持有该另一互斥锁的线程,如此重复,可以加快第一目标锁的释放过程中所有相关的线程的运行速度,进而加快第一目标锁的释放过程,减少第一线程等待持有第一目标锁的等待时长。
在一种可能的实施方式中,为避免过多的线程被提升线程优先级而影响其他线程的正常运行,以上查找深度可以不超过M层,例如3层,则在执行完成以上高第四线程的线程优先级后,即使第四线程也因为等待持有其他互斥锁而处于阻塞状态,也不会继续查找当前持有第四目标锁(第四线程等待持有的互斥锁)的线程,即不做处理。并且可以保留查找路径上提高线程优先级后的各个线程的线程优先级,在提高了线程优先级的线程释放了其持有的互斥锁后,再还原其线程优先级为调整前的优先级。
本申请实施例提供的线程控制方法,在第一线程等待持有第一目标锁,且第一目标锁为互斥锁的情况下,若当前持有第一目标锁的第二线程的线程优先级低于第二优先级,则提升第二线程的线程优先级,并且针对互斥锁机制中可能出现第二线程也因为等待持有其他互斥锁而处于阻塞状态的情况,在第二目标锁等待持有第二目标锁时,同样地确定持有第二目标锁的第三线程,并在第三线程的线程优先级低于第二优先级的情况下,对第三线程的线程优先级进行提高。从而可以加快第一目标锁的释放过程中所有相关的线程的运行速度,进而加快第一目标锁的释放过程,减少第一线程等待持有第一目标锁的等待时长。
请参阅图5,其示出了本申请实施例提供的一种线程控制装置400的结构框图。该线程控制装置400应用上述的电子设备,该线程控制装置400包括:线程确定模块410以及优先级调整模块420。其中,所述线程确定模块410用于在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级;所述优先级调整模块420用于若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
在一些实施方式中,优先级调整模块420可以具体用于:若所述第二线程的线程优先级低于第二优先级,确定当前所述电子设备的剩余资源;若所述剩余资源多于第一预设资源,则将所述第二线程的线程优先级提高至所述第一线程的线程优先级。
在一种可能的实施方式中,优先级调整模块420还可以用于:若所述剩余资源少于或等于所述第一预设资源,且所述剩余资源多于第二预设资源,则将所述第二线程的线程优先级提高至第三优先级,所述第二预设资源少于所述第一预设资源,所述第三优先级低于所述第一线程的线程优先级,且所述第三优先级高于调整前的所述第二线程的线程优先级。
在一些实施方式中,所述第一目标锁为读写锁,该线程控制装置400还可以包括线程记录模块。线程记录模块用于在预设队列中记录当前持有所述第一目标锁的所有第二线程。该方式下,线程确定模块410可以具体用于:在第一线程等待持有所述第一目标锁时,基于所述预设队列确定当前持有所述第一目标锁的第二线程。
在一种可能的实施方式中,优先级调整模块420可以具体用于:若所述第二线程的线程优先级低于第二优先级,且所述预设队列中的所述第二线程的数量大于预设数量,则提高所述预设队列中的目标线程的线程优先级,所述目标线程为所述预设队列中的部分所述第二线程。
可选地,优先级调整模块420还可以具体用于:若所述第二线程的线程优先级低于第二优先级,且所述预设队列中的所述第二线程的数量大于预设数量,根据每个所述第二线程的线程优先级,从所述预设队列中获取所述预设数量的所述第二线程作为所述目标线程,其中,所述目标线程的线程优先级高于所述预设队列中除所述目标线程以外的其他线程的线程优先级;提高所述预设队列中的目标线程的线程优先级。
在一种可能的实施方式中,该线程控制装置400还可以包括第一释放模块。第一释放模块用于在所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级之后,若所述第二线程释放了所述第一目标锁对应的临界区,则将所述第二线程的线程优先级还原为调整前的线程优先级。
在一些实施方式中,所述第一目标锁为互斥锁。线程确定模块410还可以用于在所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级之后,若所述第二线程当前等待持有第二目标锁,则确定当前持有所述第二目标锁的第三线程;优先级优先级调整模块420还可以用于若所述第三线程的线程优先级低于所述第二优先级,则提高所述第三线程的线程优先级。
在一种可能的实施方式中,该线程控制装置400还可以包括第二释放模块。第二释放模块用于在所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级之后,若所述第二线程释放了所述第一目标锁,则将所述第二线程的线程优先级还原为调整前的线程优先级。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
综上所述,本申请提供的方案,通过在第一线程等待持有第一目标锁时,确定当前持有第一目标锁的第二线程,该第一线程的线程优先级高于第一优先级,若第二线程的线程优先级低于第二优先级,则提高第二线程的线程优先级,该第二优先级低于第一优先级。由此,可以在线程优先级高于第一优先级的第一线程等待持锁时,对当前持锁的线程优先级低于第二优先级的第二线程进行线程优先级的提升,从而加快第二线程的运行,使得第一线程更快地持锁,进而提升第一线程的运行流畅度。
请参考图6,其示出了本申请实施例提供的一种电子设备的结构框图。该电子设备100可以是智能手机、平板电脑、智能手表、电子书、笔记本电脑等能够运行应用程序的电子设备。本申请中的电子设备100可以包括一个或多个如下部件:处理器110、存储器120、以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器120中并被配置为由一个或多个处理器110执行,一个或多个应用程序配置用于执行如前述方法实施例所描述的方法。
处理器110可以包括一个或者多个处理核。处理器110利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器120内的指令、程序、代码集或指令集,以及调用存储在存储器120内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器110可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器110可集成中央处理器(CentralProcessing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块通信芯片进行实现。
存储器120可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器120可用于存储指令、程序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备100在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
请参考图7,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质800中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质800可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质800包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质800具有执行上述方法中的任何方法步骤的程序代码810的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码810可以例如以适当形式进行压缩。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (12)
1.一种线程控制方法,其特征在于,应用于电子设备,所述方法包括:
在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级;
若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
2.根据权利要求1所述的方法,其特征在于,所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,包括:
若所述第二线程的线程优先级低于第二优先级,确定当前所述电子设备的剩余资源;
若所述剩余资源多于第一预设资源,则将所述第二线程的线程优先级提高至所述第一线程的线程优先级。
3.根据权利要求2所述的方法,其特征在于,所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,还包括:
若所述剩余资源少于或等于所述第一预设资源,且所述剩余资源多于第二预设资源,则将所述第二线程的线程优先级提高至第三优先级,所述第二预设资源少于所述第一预设资源,所述第三优先级低于所述第一线程的线程优先级,且所述第三优先级高于调整前的所述第二线程的线程优先级。
4.根据权利要求1所述的方法,其特征在于,所述第一目标锁为读写锁,所述方法还包括:
在预设队列中记录当前持有所述第一目标锁的所有第二线程;
所述在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,包括:
在第一线程等待持有所述第一目标锁时,基于所述预设队列确定当前持有所述第一目标锁的第二线程。
5.根据权利要求4所述的方法,其特征在于,所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,包括:
若所述第二线程的线程优先级低于第二优先级,且所述预设队列中的所述第二线程的数量大于预设数量,则提高所述预设队列中的目标线程的线程优先级,所述目标线程为所述预设队列中的部分所述第二线程。
6.根据权利要求5所述的方法,其特征在于,所述若所述第二线程的线程优先级低于第二优先级,且所述预设队列中的所述第二线程的数量大于预设数量,则提高所述预设队列中的目标线程的线程优先级,包括:
若所述第二线程的线程优先级低于第二优先级,且所述预设队列中的所述第二线程的数量大于预设数量,根据每个所述第二线程的线程优先级,从所述预设队列中获取所述预设数量的所述第二线程作为所述目标线程,其中,所述目标线程的线程优先级高于所述预设队列中除所述目标线程以外的其他线程的线程优先级;
提高所述预设队列中的目标线程的线程优先级。
7.根据权利要求4所述的方法,其特征在于,在所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级之后,所述方法还包括:
若所述第二线程释放了所述第一目标锁对应的临界区,则将所述第二线程的线程优先级还原为调整前的线程优先级。
8.根据权利要求1所述的方法,其特征在于,所述第一目标锁为互斥锁,在所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级之后,所述方法还包括:
若所述第二线程当前等待持有第二目标锁,则确定当前持有所述第二目标锁的第三线程,所述第二目标锁为互斥锁;
若所述第三线程的线程优先级低于所述第二优先级,则提高所述第三线程的线程优先级。
9.根据权利要求8所述的方法,其特征在于,在所述若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级之后,所述方法还包括:
若所述第二线程释放了所述第一目标锁,则将所述第二线程的线程优先级还原为调整前的线程优先级。
10.一种线程控制装置,其特征在于,所述装置包括:线程确定模块以及优先级调整模块,其中,
所述线程确定模块用于在第一线程等待持有第一目标锁时,确定当前持有所述第一目标锁的第二线程,其中,所述第一线程的线程优先级高于第一优先级;
所述优先级调整模块用于若所述第二线程的线程优先级低于第二优先级,则提高所述第二线程的线程优先级,所述第二优先级低于所述第一优先级。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器;
一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行如权利要求1-9任一项所述的方法。
12.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行如权利要求1-9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211160275.2A CN115543612A (zh) | 2022-09-22 | 2022-09-22 | 线程控制方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211160275.2A CN115543612A (zh) | 2022-09-22 | 2022-09-22 | 线程控制方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115543612A true CN115543612A (zh) | 2022-12-30 |
Family
ID=84730453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211160275.2A Pending CN115543612A (zh) | 2022-09-22 | 2022-09-22 | 线程控制方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115543612A (zh) |
-
2022
- 2022-09-22 CN CN202211160275.2A patent/CN115543612A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8904067B2 (en) | Adaptive multi-threaded buffer | |
US8510738B2 (en) | Preventing unnecessary context switching by employing an indicator associated with a lock on a resource | |
CN107368362B (zh) | 一种对于磁盘读写数据的多线程/多进程无锁处理方法及系统 | |
US8375390B2 (en) | Scheduling method and scheduling apparatus | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
TWI460659B (zh) | 用於降低競爭之鎖定窗 | |
CN111831440B (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
CN116225728B (zh) | 基于协程的任务执行方法、装置、存储介质及电子设备 | |
US11500634B2 (en) | Computer program, method, and device for distributing resources of computing device | |
WO2018022303A1 (en) | Capturing commands in a multi-engine graphics processing unit | |
CN111831436B (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN113377509A (zh) | 数据处理方法与系统 | |
CN115408117A (zh) | 协程运行方法、装置、计算机设备和存储介质 | |
CN112948136A (zh) | 一种嵌入式操作系统异步日志记录的实现方法 | |
CN111831432A (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN115543612A (zh) | 线程控制方法、装置、电子设备及存储介质 | |
CN115454765A (zh) | 基于阻塞队列异步日志的数据处理方法及相关设备 | |
US9418175B2 (en) | Enumeration of a concurrent data structure | |
CN111831412B (zh) | 中断处理方法、装置、存储介质及电子设备 | |
US20050198005A1 (en) | Systems and methods for controlling access to an object | |
US8095784B2 (en) | Computer system and method for activating basic program therein | |
EP1826671B1 (en) | Interruptible thread synchronization method and apparatus | |
CN113961364A (zh) | 一种大规模锁系统实现方法、装置、存储介质和服务器 | |
KR102468506B1 (ko) | 컴퓨팅 장치의 리소스를 분배하는 컴퓨터 프로그램, 방법 및 장치 |
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 |