CN115658153A - 睡眠锁优化方法、装置、电子设备及存储介质 - Google Patents
睡眠锁优化方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115658153A CN115658153A CN202211153177.6A CN202211153177A CN115658153A CN 115658153 A CN115658153 A CN 115658153A CN 202211153177 A CN202211153177 A CN 202211153177A CN 115658153 A CN115658153 A CN 115658153A
- Authority
- CN
- China
- Prior art keywords
- lock
- equal
- threads
- attribute
- priority
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种睡眠锁优化方法、装置、电子设备及存储介质。该睡眠锁优化方法包括:首先当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;然后基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
Description
技术领域
本申请属于计算机技术领域,具体涉及一种睡眠锁优化方法、装置、电子设备及可读存储介质。
背景技术
在系统需要持有的锁中,比如睡眠锁,若多个线程申请持锁失败,则睡眠锁将所述多个线程按照申请顺序排列进睡眠等待队伍,当持锁线程释放睡眠锁,则按照睡眠等待队伍的顺序依次唤醒,由于睡眠等待队伍中的线程的重要程度不同,按照申请顺序依次对其唤醒会导致系统运行的稳定性降低,同时用户的使用体验也不高。相关的睡眠锁优化方法,在对线程优先等级划分方面,还有待进一步优化。
发明内容
鉴于上述问题,本申请提出一种睡眠锁优化方法、装置、电子设备及存储介质,以实现改善上述问题。
第一方面,本申请实施例提供了一种睡眠锁优化方法,所述方法包括:当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。
第二方面,本申请实施例提供了一种睡眠锁优化装置,所述装置包括线程优先等级获取单元、线程处理单元。线程优先等级获取单元,用于当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;线程处理单元,用于基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。
第三方面,本申请实施例提供了一种睡眠锁优化电子设备,包括一个或多个处理器以及存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码运行时执行上述的方法。
本申请实施例提供了一种睡眠锁优化方法、装置、电子设备及存储介质。该睡眠锁优化方法包括:首先当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;然后基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
附图说明
为了更加清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见的,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一实施例提出的一种睡眠锁优化方法的流程图;
图2示出了本申请另一实施例提出的一种睡眠锁优化方法的流程图;
图3示出了本申请再一实施例提出的一种睡眠锁优化方法的流程图;
图4示出了本申请再一实施例提出的一种睡眠锁优化方法的流程图;
图5示出了本申请再一实施例提出的一种睡眠锁优化装置的结构框图;
图6示出了本申请实时中的用于执行本申请实施例的睡眠锁优化方法的电子设备的结构框图;
图7示出了本申请实时中的用于保存或者携带实现根据本申请实施例的睡眠锁优化方法的程序代码的存储单元。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在系统进程需要的锁中,比如自旋锁和睡眠锁,由于进程从睡眠状态切换到唤醒状态,会耗时并消耗系统资源,让系统运行的性能降低。在自旋锁中,当线程需要持锁时,若发现锁已经被其它线程持有,则CPU会不断运行,让持锁的线程解锁;在睡眠锁中,当线程需要持锁时,发现锁已经被其它线程持有,则该线程会进入睡眠状态,直到持锁的线程解锁才被唤醒。
而发明人在对相关的的睡眠锁优化方法的研究中发现,相关的睡眠锁方法,一般是当用户申请持睡眠锁时,如果该睡眠锁已经被其它线程持有了,则该线程会进入睡眠状态,直到持锁的线程释放睡眠锁,该线程才会被系统唤醒。但在上述方法中,若等锁队列中存在多个优先级不同的等锁线程,有些等锁线程是性能相关的线程,有些等锁线程是普通的后台线程,由于系统将所述等锁线程排列进等锁队列中时是按照持锁申请顺序依次进行排列,由于它们的优先级不同,对于系统的重要程度不同,当持锁线程释放睡眠锁时,系统会按照等锁队列中的排列顺序依次对等锁线程进行唤醒,因此可能会首先唤醒优先级较低的等锁线程,这样会导致系统的性能下降,同时会降低用户的使用体验。
因此,发明人提出了本申请实施例中的睡眠锁优化方法、装置、电子设备及存储介质。首先当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;然后基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
下面将结合附图具体描述本申请的各实施例。
请参阅图1,本申请实施例提供了一种睡眠锁优化方法,所述方法包括:
步骤S110:当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级。
在本申请实施例中,当线程持有睡眠锁后,其它线程再申请睡眠锁失败后会进入睡眠状态,直到持锁线程释放睡眠锁后才被系统唤醒。当检测到持锁线程释放睡眠锁后,系统可以获取多个等锁线程的优先级,进而可以根据多个等锁线程的优先级对多个等锁线程依次进行唤醒。其中,当接受到多个线程的持锁申请时,由于当前睡眠锁已被线程持有,因此,可以将发送持锁申请的多个线程挂入到等锁队列中,进而在检测到睡眠锁被线程释放时,可以直接从等锁队列中获取到多个等锁线程。进一步的,可以预先为多个等锁线程设置好对应的优先级,进而在将多个等锁线程挂入等锁队列时,可以按照对应的优先级将多个等锁线程挂入到对应的等锁队列。其中,不同的优先级各自对应一个等锁队列。
在本申请实施例中,等锁线程的优先级用于表征线程在系统中的重要程度。其中,等锁线程的优先级是根据等锁线程的属性进行划分的,等锁线程的属性可以分为第一属性、第二属性和第三属性,等锁线程的属性不同,对应的优先级不同,即第一属性、第二属性和第三属性对应的优先级不同,第一属性、第二属性和第三属性对应的优先级可以预先设置,在设置时,可以根据实际需求进行设置。
作为一种方式,多线程执行虽然提高了系统资源的利用率,提高了系统的性能,但是也存在死锁的问题。死锁是指多个线程在执行过程中,由于线程之间彼此竞争系统资源或这是彼此之间的通信而造成的一种线程申请阻塞的现象,若无外力作用,它们将永远互相等待。系统中主要存在三种常见的死锁,一是线程将自己锁住,为了保证线程之间的同步和互斥,我们往往需要给其加锁,有时候,线程申请了锁资源,还没有等待锁被释放,又一次申请这把锁,结果就是挂起等待这把锁的释放,但是这把锁是被自己拿着,所以就会永远挂起等待,就造成了死锁;二是多线程竞争资源循环等待,示例性的,系统中有两个线程P1和P2,P1首先申请得到了锁L1,P2申请得到了锁L2,这个时候P1又想去申请锁L2,结果发现锁L2正被线程P2持有,因此线程P2会被挂起等待P2释放锁L2。而P2恰好也想申请锁L1,结果发现锁L1正被线程P1持有,因此线程P1会被挂起等待P1释放锁L1,此时就造成两个线程互相僵持,造成死锁;三是线程推进顺序不当引起的死锁问题,示例性的,系统中有三个线程,三个线程分别为P1,P2和P3,三个线程分别生产数据为M1,M2,M3,同时分别接收别的线程产生的数据M4,M5,M6,如果线程推进的顺序正确,即三个线程都先生产数据,再接收数据,那么没有问题,但是一旦线程先接收数据,再生产数据,因为线程一开始没有数据产生,那么就会造成三个线程的死锁问题。系统中造成死锁的原因主要有系统的资源不足、线程推进的顺序不对以及资源的分配不当等。当系统的资源很充沛的时候,每个线程都可以申请到想要的资源,那么出现死锁的概率就很低,线程的调度顺序和速度不同,也会导致死锁问题。同时,死锁的产生存在四个必要条件,一是互斥条件,线程申请的资源在一段时间中只能被一个线程使用;二是请求与等待条件,线程已经拥有了一个资源,但是又申请新的资源,拥有的资源保持不变;三是不可剥夺条件,在一个线程没有用完,主动释放资源的时候,不能被抢占;四是循环等待条件,多个线程之间存在资源循环链。
作为一种方式,针对上述死锁产生的原因,一般有四种处理死锁的方法,一是预防死锁:破坏死锁产生的四个必要条件之一,但互斥条件不能破坏;二是避免死锁:合理的分配资源;三是检查死锁:利用专门的死锁机构检查死锁的发生,然后采取相应的方法;四是解除死锁:发生死锁时候,采取合理的方法解决死锁。一般是强行剥夺资源。
可以理解的是,若不针对等锁线程的不同的优先级划分不同的等锁队列,当同一等锁队列中存在不同的等锁线程的重要程度不同时,系统可能会按照线程申请的顺序来对等锁线程进行唤醒,这样可能会造成不重要的线程首先被系统唤醒,这样会造成系统资源的浪费。因此,为了更好地利用系统资源,合理地规划多个等锁线程的使用情况,需要对多个等锁线程进行优先级的划分。
步骤S120:基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。
在本申请实施例中,为了更好地利用系统资源,因此系统对多个等锁线程进行了优先级的划分。其中,等锁线程的优先级是系统根据多个线程对系统性能的重要程度来进行划分,该重要程度由系统自行决定。当持锁线程释放睡眠锁后,系统根据等锁线程的优先级对等锁线程的持锁申请进行处理。
在系统检测到睡眠锁被持锁线程释放的情况下,系统可以先根据等锁线程的优先级来对等锁线程进行唤醒,然后在对等锁线程唤醒后,对唤醒的等锁线程的持锁申请进行响应。其中,唤醒方式可以为从高优先级到低优先级。示例性的,在检测到睡眠锁被持锁线程释放后,系统可以先唤醒优先级最高的等锁线程,再唤醒优先级较低的等锁线程,最后唤醒优先级最低的等锁线程。在将对应的等锁线程唤醒后,可以先对高优先级的等锁线程的持锁申请进行响应,在高优先级的等锁线程持有睡眠锁并释放睡眠锁后,再对优先级较低的等锁线程的持锁申请进行响应,最后在优先级较低的等锁线程持有睡眠锁并释放睡眠锁后,再对优先级最低的等锁线程的持锁申请进行响应。
本申请提供的一种睡眠锁优化方法,首先当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级,然后基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
请参阅图2,本申请实施例提供了一种睡眠锁优化方法,所述方法包括:
步骤S210:在检测到所述睡眠锁被线程持有时,接收到多个线程发送的持锁申请。
在本申请实施例中,当系统检测到睡眠锁被线程持有时,可能会接收到多个线程发送的持锁申请。此时,由于睡眠锁已经被线程持有,因此其它线程的持锁申请失败,同时其它线程由于持锁失败会进入睡眠状态。其中,多个线程可以同时发送持锁申请,也可以不同时发送持锁申请,在此不做具体限定。
步骤S220:将所述多个线程作为多个等锁线程。
在本申请实施例中,系统在接收到多个线程发送的持锁申请,多个线程由于持锁失败会进入睡眠状态,系统此时可以将申请持锁的多个线程作为等锁线程,挂到等锁队列中。其中,等锁队列用于将等锁线程进行排列,当睡眠锁被持锁线程释放后,系统可以从等锁队列中将等锁线程进行唤醒。
步骤S230:获取所述多个等锁线程的属性优先级。
在本申请实施例中,属性优先级用于表征线程在系统中的重要程度,该重要程度由系统根据线程在系统中的属性进行划分。示例性的,可以将线程的属性优先级分为第一属性优先级、第二属性优先级和第三属性优先级。其中,等锁线程的属性用于表征等锁线程的类型。等锁线程的属性可以包括系统重要服务线程、性能相关线程以及后台普通线程;系统重要服务线程可以对应于第一属性优先级,性能相关线程可以对应于第二属性优先级,后台普通线程可以对应于第三属性优先级。其中,线程的属性优先级可以任意设置,在此不做具体限定,比如,也可以将系统重要服务线程的属性优先级设置为第二属性优先级,将性能相关线程的属性优先级设置为第一属性优先级,将后台普通线程的属性优先级设置为第三属性优先级等。
当系统将获取到等锁线程后,可以将等锁线程根据在系统中的重要程度将其归入不同的属性优先级,在完成上述操作后,系统获取多个等锁线程的属性优先级。
步骤S240:检测所述多个等锁线程的属性优先级是否相同,若不同,则执行步骤S250;若相同,则执行步骤S260及步骤S270。
在本申请实施例中,当系统获取到等锁线程的属性优先级后,可以根据等锁线程的属性,来确定等锁线程的属性优先级是否相同,进而来确定对等锁线程的处理顺序。
步骤S250:基于所述多个等锁线程的属性优先级对所述多个等锁线程的持锁申请进行处理。
作为一种方式,系统在检测到多个等锁线程的属性优先级不同后,系统根据等锁线程的属性优先级来对多个等锁线程的持锁申请进行处理。在对多个等锁线程的持锁申请进行处理时,可以根据睡眠锁当前时刻是处于被持有还是被释放来进行相关的处理操作。
在本申请实施例中,当系统检测到多个等锁线程的属性优先级不同,若当前的睡眠锁被其它线程持有,则系统在多个等锁线程进入睡眠状态后将其挂入不同的等锁队列中,等待睡眠锁被持锁线程释放;若当前的睡眠锁已经被持锁线程所释放,则将等锁队列中的等锁线程按照其对应的属性优先级来进行唤醒。
步骤S260:获取所述多个线程的等锁时间优先级。
在本申请实施例中,当系统检测到多个等锁线程的属性优先级相同时,则系统获取等锁线程的等锁时间优先级。等锁线程的等锁时间优先级用于表征当等锁线程的属性优先级相同时,相同属性优先级的多个线程的优先级顺序。其中,等锁时间优先级由等锁线程的等锁时间唯一决定。
作为一种方式,将当前的等锁队列中的等锁线程的属性优先级进行检测,在检测到多个等锁线程的属性优先级相同时,获取多个等锁线程的等锁时间优先级。
步骤S270:基于所述多个线程的等锁时间优先级,对所述多个等锁线程的持锁申请进行处理。
作为一种方式,系统在检测到多个等锁线程的属性优先级相同后,系统可以根据多个等锁线程的等锁时间优先级来对多个等锁线程的持锁申请进行处理。在对多个等锁线程的持锁申请进行处理时,可以根据睡眠锁当前时刻是处于被持有还是被释放来进行相关的处理操作。
在本申请实施例中,当系统检测到等锁线程的属性优先级相同时,系统获取等锁线程的等锁时间优先级,再通过等锁时间优先级来对来对等锁线程进行处理。若睡眠锁被其它线程持有,由于多个等锁线程的属性优先级相同,则将多个等锁线程挂入相同的等锁队列中,再根据多个等锁线程的等锁时间优先级不同,将多个等锁线程依照等锁时间优先级的大小在等锁队列中按照顺序排列。示例性的,可以将等锁时间优先级最大的等锁线程排在等锁队列中的最前面,将等锁时间优先级最小的等锁线程排在等锁队列中的最后面,中间按等锁时间优先级有大到小依次进行排列。若睡眠锁被持锁线程释放,由于等锁线程的属性优先级相同,系统首先根据等锁线程的属性优先级的大小将等锁队列中的等锁线程进行释放,在同一个等锁队列中,由于等锁时间优先级不同,系统根据等锁队列中的等锁线程的等锁时间优先级的大小依次进行唤醒。示例性的,在同一个等锁队列中,基于前述的等锁线程在等锁队列中的排列顺序,系统首先唤醒排在等锁队列最前面的等锁线程,再依次从前往后对等锁线程进行唤醒。
本申请提供的一种睡眠锁优化方法,首先在检测到所述睡眠锁被线程持有时,接收到多个线程发送的持锁申请,然后将所述多个线程作为多个等锁线程,再获取所述多个等锁线程的属性优先级,然后检测所述多个等锁线程的属性优先级是否相同,若相同,则所述多个等锁线程的属性优先级对所述多个等锁线程的持锁申请进行处理,若不同,则获取所述多个线程的等锁时间优先级,再基于所述多个线程的等锁时间优先级,对所述多个等锁线程的持锁申请进行处理。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
请参阅图3,本申请实施例提供了一种睡眠锁优化方法,所述方法包括:
步骤S310:在检测到所述睡眠锁被线程持有时,接收到多个线程发送的持锁申请。
步骤S310具体可以参考上述实施例中的详细解释,故不在本实施例中进行赘述。
步骤S320:将所述多个线程作为多个等锁线程。
步骤S320具体可以参考上述实施例中的详细解释,故不在本实施例中进行赘述。
步骤S330:获取所述多个等锁线程的属性。
在本申请实施例中,多个等锁线程的属性包括三部分,一是第一属性,二是第二属性,三是第三属性。其中,第一属性与系统重要服务线程相对应,第二属性与性能相关线程相对应,第三属性与后台普通线程相对应。其中,系统获取多个等锁线程的属性是为了根据等锁线程的属性来确定它们在系统中的重要程度,并以此来划分属性优先级。
作为一种方式,系统可以在多个线程申请持锁时获取多个线程的属性。具体的,当睡眠锁被其它线程持有后,多个线程申请持锁失败,进而多个线程进入睡眠状态,成为等锁线程。系统可以获取多个等锁线程的属性,再根据多个等锁线程的属性来确定多个等锁线程的属性优先级,系统根据多个等锁线程的属性优先级将其挂入到不同的等锁队列中,其中,一个属性的线程对应一个等锁队列,比如,属性为系统重要服务线程的线程对应于一个等锁队列。
步骤S340:基于所述属性确定所述多个等锁线程的属性优先级,其中,等锁线程的属性包括第一属性、第二属性和第三属性中的一种;属性为第一属性的等锁线程的属性优先级高于属性为第二属性的等锁线程的优先级;属性为第二属性的等锁线程的优先级高于属性为第三属性的等锁线程的优先级。
在本申请实施例中,系统获取到多个等锁线程的属性后,根据等锁线程的属性确定多个等锁线程的属性优先级。等锁线程的属性包括第一属性、第二属性和第三属性。其中,第一属性的等锁线程的优先级高于第二属性的等锁线程,第二属性的等锁线程的优先级高于第三属性的等锁线程。
当系统获取到多个等锁线程的属性优先级后,即可将等锁线程排列进相应的等锁队列中,同一个等锁队列的等锁线程的属性优先级相同。
步骤S350:检测所述多个等锁线程的属性优先级是否相同,若相同,则执行步骤S360及步骤S370;若不同,则执行步骤S380。
步骤S360:若所述多个等锁线程中有等锁线程的属性优先级相同,获取属于同一属性优先级的等锁线程的等锁时间优先级。
在本申请实施例中,多个等锁线程中可能有部分等锁线程的属性优先级相同,那么在这种情况下,获取相同属性优先级的等锁线程的等锁时间优先级,相同属性优先级的等锁线程处于相同的等锁队列中,系统获取该等锁队列中的等锁线程的等锁时间优先级。
作为一种方式,步骤S360可以包括:
步骤S361:获取所述多个等锁线程各自对应的等锁时间。
在本申请实施例中,当等锁线程的属性优先级相同时,系统获取同一个等锁队列中的等锁线程的等锁时间。其中,不同属性优先级的等锁线程的等锁时间不同,同一属性优先级的等锁线程的等锁时间也不相同。属性优先级越高,等锁线程对应的等锁时间越短;同一属性优先级的等锁线程的等锁时间可以根据等锁线程在等锁队列中的位置进行设置。系统将等锁队列中的每一个位置提前设置相应的等锁时间,当系统将等锁线程排列至等锁队列中某一位置时,该等锁线程的等锁时间即为等锁队列的位置对应的等锁时间。
步骤S362:基于所述多个等锁线程各自对应的等锁时间,确定所述多个等锁线程对应的等锁时间优先级,其中,对应的等锁时间越短的等锁线程的等锁时间优先级越高。
在本申请实施例中,等锁时间用于表征等锁线程的优先级高低,等锁线程的优先级越高,则等锁时间越短。示例性的,属性为第一属性的等锁线程的属性优先级高于属性为第二属性的等锁线程的优先级,则属性为第一属性的等锁线程的等锁时间相比于属性为第二属性的等锁线程要短;属性为第二属性的等锁线程的优先级高于属性为第三属性的等锁线程的优先级,则属性为第二属性的等锁线程的等锁时间相比于属性为第三属性的等锁线程要短。
作为一种方式,系统获取了等锁线程的属性,根据等锁线程的属性确定了它们的属性优先级,同时系统根据等锁线程的属性优先级来确定各个属性优先级的等锁时间。示例性的,可以将第一属性优先级的等锁时间设置为10us,第二属性优先级的等锁线程的等锁时间设置为20us,第三属性优先级的等锁线程的等锁时间设置为30us。
作为另一种方式,当多个等锁线程中有部分等锁线程的属性优先级相同时,此时属性优先级相同的等锁线程处于同一等锁队列中,该等锁队列中的等锁线程也存在优先级顺序,因此系统根据该等锁队列中的等锁线程的等锁时间来确定属性优先级相同的等锁线程的等锁时间优先级,优先级越高的等锁线程所对应的等锁时间越短。
步骤S370:基于所述等锁时间优先级,对属于同一属性优先级的等锁线程的持锁申请进行处理。
在本申请实施例中,系统获取同一属性优先级的等锁线程的等锁时间优先级后,根据等锁线程的等锁时间优先级进行进一步操作。具体的,当持锁线程释放睡眠锁后,系统会对等锁队列中的等锁线程进行唤醒,其中,系统会从等锁队列的队头开始唤醒等锁线程,依次唤醒到队尾,由于等锁队列的队头对应等锁时间最小,等锁队列的队尾对应等锁时间最大,因此唤醒的顺序为等锁时间小的等锁线程优先唤醒,即等锁时间优先级大的等锁线程优先被系统唤醒。
等锁线程被系统唤醒后,即可持有睡眠锁,执行等锁线程所对应的任务。当任务执行完毕后,持锁线程释放睡眠锁,等锁线程按照上述方法进行操作。
步骤S380:基于所述多个等锁线程的属性优先级对所述多个等锁线程的持锁申请进行处理。
步骤S380具体可以参考上述实施例中的详细解释,故不在本实施例中进行赘述。
本申请提供的一种睡眠锁优化方法,首先在检测到所述睡眠锁被线程持有时,接收到多个线程发送的持锁申请,然后将所述多个线程作为多个等锁线程,再获取所述多个等锁线程的属性,再基于所述属性确定所述多个等锁线程的属性优先级,然后检测所述多个等锁线程的属性优先级是否相同,若所述多个等锁线程中有等锁线程的属性优先级相同,则获取属于同一属性优先级的等锁线程的等锁时间优先级,然后基于所述等锁时间优先级,对属于同一属性优先级的等锁线程的持锁申请进行处理;若所述多个等锁线程中有等锁线程的属性优先级不同,则基于所述多个等锁线程的属性优先级对所述多个等锁线程的持锁申请进行处理。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
请参阅图4,本申请实施例提供了一种睡眠锁优化方法,所述方法包括:
步骤S410:任务申请持锁等待。
在本申请实施例中,由于睡眠锁已经被系统其它线程持有,任务申请相关的线程无法持锁,因此线程申请持锁等待并进入睡眠状态,当睡眠锁被持锁线程释放后,任务申请相关的线程才能被系统唤醒并申请持锁。
步骤S420:挂入等锁队列。
在本申请实施例中,当任务申请相关的线程持锁失败后,线程进入睡眠状态,同时系统将线程挂入到锁等待队列中。
步骤S430:根据线程优先级挂入不同等锁队列。
在本申请实施例中,等锁队列表征等锁线程的属性,其中,等锁线程的属性可以包括系统重要服务线程、性能相关线程以及后台普通线程等。其中,等锁线程的属性存在优先级顺序,相关的优先级顺序为:系统重要服务线程的优先级高于性能相关线程,性能相关线程的优先级高于后台普通线程。
如果在同一属性的等锁队列中存在多个等锁线程,所述多个等锁线程同样存在优先级顺序,系统通过所述多个等锁线程的优先级顺序设置等锁时间,等锁时间越短,等锁线程的优先级越高;等锁时间越长,等锁线程的优先级越低。系统按照等锁时间由短到长,依次从头到尾排列在等锁队列中对等锁线程进行排列,以此保证当持锁线程释放睡眠锁后,系统唤醒的等锁队列的队头为同一等锁线程的属性中优先级最高的等锁线程。
在本申请实施例中,系统将任务申请相关的多个等锁线程根据优先级进行分类,再将不同的优先级的线程挂入到不同的锁等待队列中,同一个锁等待队列中的线程的优先级也有差异,该差异由线程自身的属性所决定,系统根据锁等待队列中的线程的优先级依次对线程进行排序。示例性的,优先级最大的等锁线程挂入系统重要服务线程,优先级次一级的等锁线程挂入性能相关线程,优先级最低的等锁线程挂入后台普通线程。
步骤S440:持锁任务放锁。
在本申请实施例中,持锁线程的任务完成后,持锁线程释放睡眠锁。
步骤S450:唤醒队头。
在本申请实施例中,在持锁线程释放睡眠锁后,系统根据任务申请相关的多个线程的优先级来唤醒线程。在同一个等锁队列中,系统根据该队列中的线程的优先级依次进行唤醒。由于等锁队列中的等锁线程的优先级从头到尾依次递减,因此系统优先唤醒等锁队列处于队头的等锁线程。
步骤S460:从上到下进行任务唤醒。
在本申请实施例中,系统根据线程挂入的锁等待队列的优先级依次进行唤醒,首先唤醒锁等待队列优先级最高的队列,再唤醒锁等待队列优先级其次的队列,最后唤醒锁等待队列优先级最低的队列。示例性的,系统优先唤醒系统重要服务线程,然后唤醒性能相关线程,最后唤醒后台普通线程。
本申请提供的一种睡眠锁优化方法,首先任务申请持锁等待,然后挂入锁等待队列,再根据进程优先级挂入不同锁等待队列,然后持锁任务放锁,再唤醒对头,再从上到下进行任务唤醒。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
请参阅图5,本申请实施例提供了一种睡眠锁优化装置500,所述装置500包括:
线程优先等级获取单元510,用于当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级。
作为一种方式,线程优先等级获取单元510用于获取所述多个等锁线程的属性优先级。
可选的,线程优先等级获取单元510还用于获取所述多个等锁线程的属性;基于所述属性确定所述多个等锁线程的属性优先级,其中,等锁线程的属性包括第一属性、第二属性和第三属性中的一种;属性为第一属性的等锁线程的属性优先级高于属性为第二属性的等锁线程的优先级;属性为第二属性的等锁线程的优先级高于属性为第三属性的等锁线程的优先级。
可选的,线程优先等级获取单元510还用于若所述多个等锁线程的属性优先级相同,则获取所述多个线程的等锁时间优先级。
可选的,线程优先等级获取单元510还用于获取所述多个等锁线程各自对应的等锁时间;基于所述多个等锁线程各自对应的等锁时间,确定所述多个等锁线程对应的等锁时间优先级,其中,对应的等锁时间越短的等锁线程的等锁时间优先级越高。
可选的,线程优先等级获取单元510还用于若所述多个等锁线程中有等锁线程的属性优先级相同,获取属于同一属性优先级的等锁线程的等锁时间优先级。
线程处理单元520,用于若所述多个等锁线程的属性优先级不同,则基于所述多个等锁线程的属性优先级对所述多个等锁线程的持锁申请进行处理。
可选的,线程处理单元520用于基于所述多个线程的等锁时间优先级,对所述多个等锁线程的持锁申请进行处理。
可选的,线程处理单元520还用于基于所述等锁时间优先级,对属于同一属性优先级的等锁线程的持锁申请进行处理。
可选的,线程处理单元520还用于在检测到所述睡眠锁被线程持有时,接收到多个线程发送的持锁申请;将所述多个线程作为多个等锁线程。
需要说明的是,本申请中装置实施例与前述方法实施例是互相对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
下面将结合图6对本申请提供的一种电子设备进行说明。
请参阅图6,基于上述的睡眠锁优化方法、装置,本申请实施例还提供了另一种可以执行前述睡眠锁优化方式的电子设备600。电子设备600包括相互耦合的一个或多个(图中仅示出一个)处理器602、存储器604以及网络模块606。其中,该存储器604中存储有可以执行前述实施例中内容的程序,而处理器602可以执行该存储器604中存储的程序。
其中,处理器602可以包括一个或者多个处理核。处理器602利用各种接口和线路连接整个电子设备600内的各个部分,通过运行或执行存储在存储器604内的指令、程序、代码集或指令集,以及调用存储在存储器604内的数据,执行服务器600的各种功能和处理数据。可选地,处理器602可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(ProgrammableLogic Array,PLA)中的至少一种硬件形式来实现。处理器602可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器602中,单独通过一块通信芯片进行实现。
存储器604可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器604可用于存储指令、程序、代码、代码集或指令集。存储器604可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备600在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
所述网络模块606用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯,例如和音频播放设备进行通讯。所述网络模块606可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。所述网络模块606可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。例如,网络模块606可以与基站进行信息交互。
请参考图7,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质700中存储有程序代码,所述程序代码可以被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质700可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质700包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质700具有执行上述方法中的任何方法步骤的程序代码710的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码710可以例如以适当形式进行压缩
本申请实施例提供了一种睡眠锁优化方法、装置、电子设备及存储介质。该睡眠锁优化方法包括:首先当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;然后基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。通过上述方法,通过将线程划分优先等级,根据线程的优先等级对线程的持锁申请进行处理,从而更快唤醒重要的线程,进而提高了系统运行的稳定性以及用户的使用体验。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
Claims (10)
1.一种睡眠锁优化方法,其特征在于,所述方法包括:
当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;
基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。
2.根据权利要求1所述的方法,其特征在于,所述优先级包括属性优先级,所述获取多个等锁线程的优先级,包括:
获取所述多个等锁线程的属性优先级;
所述基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理,包括:
若所述多个等锁线程的属性优先级不同,则基于所述多个等锁线程的属性优先级对所述多个等锁线程的持锁申请进行处理。
3.根据权利要求2所述的方法,其特征在于,所述获取所述多个等锁线程的属性优先级,包括:
获取所述多个等锁线程的属性;
基于所述属性确定所述多个等锁线程的属性优先级,其中,等锁线程的属性包括第一属性、第二属性和第三属性中的一种;属性为第一属性的等锁线程的属性优先级高于属性为第二属性的等锁线程的优先级;属性为第二属性的等锁线程的优先级高于属性为第三属性的等锁线程的优先级。
4.根据权利要求2所述的方法,其特征在于,所述优先级还包括等锁时间优先级;所述基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理,还包括:
若所述多个等锁线程的属性优先级相同,则获取所述多个线程的等锁时间优先级;
基于所述多个线程的等锁时间优先级,对所述多个等锁线程的持锁申请进行处理。
5.根据权利要求4所述的方法,其特征在于,所述获取所述多个线程的等锁时间优先级,包括:
获取所述多个等锁线程各自对应的等锁时间;
基于所述多个等锁线程各自对应的等锁时间,确定所述多个等锁线程对应的等锁时间优先级,其中,对应的等锁时间越短的等锁线程的等锁时间优先级越高。
6.根据权利要求2所述的方法,其特征在于,所述优先级还包括等锁时间优先级;所述基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理,还包括:
若所述多个等锁线程中有等锁线程的属性优先级相同,获取属于同一属性优先级的等锁线程的等锁时间优先级;
基于所述等锁时间优先级,对属于同一属性优先级的等锁线程的持锁申请进行处理。
7.根据权利要求1所述的方法,其特征在于,所述当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级之前还包括:
在检测到所述睡眠锁被线程持有时,接收到多个线程发送的持锁申请;
将所述多个线程作为多个等锁线程。
8.一种睡眠锁优化装置,其特征在于,所述装置包括:
线程优先等级获取单元,用于当检测到睡眠锁被线程释放后,获取多个等锁线程的优先级;
线程处理单元,用于基于所述多个等锁线程的优先级,对所述多个等锁线程的持锁申请进行处理。
9.一种电子设备,其特征在于,包括一个或多个处理器以及存储器,一个或多个程序被存储在所述存储器中并被配置为由一个或多个处理器执行权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序代码,所述程序代码包括用于执行如权利要求1-7任一权利要求所述的方法的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211153177.6A CN115658153A (zh) | 2022-09-21 | 2022-09-21 | 睡眠锁优化方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211153177.6A CN115658153A (zh) | 2022-09-21 | 2022-09-21 | 睡眠锁优化方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115658153A true CN115658153A (zh) | 2023-01-31 |
Family
ID=84983778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211153177.6A Pending CN115658153A (zh) | 2022-09-21 | 2022-09-21 | 睡眠锁优化方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115658153A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115016849A (zh) * | 2022-04-19 | 2022-09-06 | 展讯通信(上海)有限公司 | 一种电子系统控制方法、装置、设备及存储介质 |
CN116860402A (zh) * | 2023-05-26 | 2023-10-10 | 荣耀终端有限公司 | 锁资源调度方法及装置 |
-
2022
- 2022-09-21 CN CN202211153177.6A patent/CN115658153A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115016849A (zh) * | 2022-04-19 | 2022-09-06 | 展讯通信(上海)有限公司 | 一种电子系统控制方法、装置、设备及存储介质 |
CN116860402A (zh) * | 2023-05-26 | 2023-10-10 | 荣耀终端有限公司 | 锁资源调度方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115658153A (zh) | 睡眠锁优化方法、装置、电子设备及存储介质 | |
CN109918141B (zh) | 线程执行方法、装置、终端及存储介质 | |
CN102902583B (zh) | 在挂起状态和执行状态下管理进程 | |
CN110231995B (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
CN105786603B (zh) | 一种基于分布式的高并发业务处理系统及方法 | |
US8132171B2 (en) | Method of controlling thread access to a synchronization object | |
CN112732628A (zh) | 核间数据处理方法、系统、片上系统以及电子设备 | |
CN113452774A (zh) | 消息推送方法、装置、设备及存储介质 | |
CN111913793A (zh) | 分布式任务调度方法、装置、节点设备和系统 | |
KR102621670B1 (ko) | 부트-업 동안 서비스의 스케줄링을 관리하기 위한 방법 및 장치 | |
CN111290842A (zh) | 一种任务执行方法和装置 | |
CN111813529B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN112380030A (zh) | 主任务处理方法、装置、服务器和存储介质 | |
CN111984428A (zh) | 一种资源访问时自旋锁的实现方法、装置及设备 | |
CN108810645B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN115378685A (zh) | 数据处理方法、系统、电子设备及计算机可读存储介质 | |
CN115587049A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN111381976A (zh) | 消息提示数据的更新方法、装置、存储介质及计算机设备 | |
CN116010040A (zh) | 一种获取锁资源的方法、装置及设备 | |
CN112486681A (zh) | 通信方法及网络设备 | |
CN113254143A (zh) | 虚拟化网络功能网元编排调度方法、装置和系统 | |
KR101029788B1 (ko) | 미들웨어의 레이어 간 메시지 전달 방법 및 이를 행하는 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체 | |
CN112732453A (zh) | 跨线程消息处理方法、装置、系统和计算机可读存储介质 | |
CN115658288A (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 |