CN111831413A - 线程调度方法、装置、存储介质及电子设备 - Google Patents
线程调度方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111831413A CN111831413A CN202010627316.9A CN202010627316A CN111831413A CN 111831413 A CN111831413 A CN 111831413A CN 202010627316 A CN202010627316 A CN 202010627316A CN 111831413 A CN111831413 A CN 111831413A
- Authority
- CN
- China
- Prior art keywords
- thread
- target
- threads
- scheduling
- 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
- 238000000034 method Methods 0.000 title claims abstract description 92
- 230000002452 interceptive effect Effects 0.000 claims abstract description 26
- 230000003993 interaction Effects 0.000 claims description 32
- 238000004590 computer program Methods 0.000 claims description 20
- 238000001514 detection method Methods 0.000 claims description 5
- 230000000903 blocking effect Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 8
- 238000007726 management method Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000011982 device technology Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- HOWHQWFXSLOJEF-MGZLOUMQSA-N systemin Chemical compound NCCCC[C@H](N)C(=O)N[C@@H](CCSC)C(=O)N[C@@H](CCC(N)=O)C(=O)N[C@@H]([C@@H](C)O)C(=O)N[C@@H](CC(O)=O)C(=O)OC(=O)[C@@H]1CCCN1C(=O)[C@H]1N(C(=O)[C@H](CC(O)=O)NC(=O)[C@H](CCCN=C(N)N)NC(=O)[C@H](CCCCN)NC(=O)[C@H](CO)NC(=O)[C@H]2N(CCC2)C(=O)[C@H]2N(CCC2)C(=O)[C@H](CCCCN)NC(=O)[C@H](CO)NC(=O)[C@H](CCC(N)=O)NC(=O)[C@@H](NC(=O)[C@H](C)N)C(C)C)CCC1 HOWHQWFXSLOJEF-MGZLOUMQSA-N 0.000 description 1
- 108010050014 systemin Proteins 0.000 description 1
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本申请实施例公开了一种线程调度方法、装置、存储介质及电子设备,其中,当检测到线程的需求资源为临界资源、且临界资源被其他线程持有时,将线程作为第一目标线程;若第一目标线程属于预设类型的线程,则确定第一目标线程所属的目标调度类;从目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将第一目标线程添加至所述目标位置处,基于此,相对于非预设类型的线程,预设类型的线程可以更快地获取到需求的临界资源,缩短这些线程的等待时间,进而加快了交互事件的执行效率,减少了卡顿现象。
Description
技术领域
本申请涉及电子设备技术领域,具体涉及一种线程调度方法、装置、存储介质及电子设备。
背景技术
随着技术的发展,电子设备中安装的各类应用程序越来越多,例如视频类应用、游戏类应用以及即时通讯类应用等。这使得电子设备经常需要在前台和后台运行很多个应用程序,容易在用户交互场景中出现卡顿现象。
发明内容
本申请实施例提供一种线程调度方法、装置、存储介质及电子设备,能够减少系统卡顿。
第一方面,本申请实施例提供一种线程调度方法,包括:
当检测到线程的需求资源为临界资源、且所述临界资源被其他线程持有时,将所述线程作为第一目标线程,其中,预设类型的线程为执行交互事件中相关任务的线程;
若所述第一目标线程属于预设类型的线程,则确定所述第一目标线程所属的目标调度类,其中,所述预设类型的线程为执行交互事件中相关任务的线程;
从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将所述第一目标线程添加至所述目标位置处。
第二方面,本申请实施例还提供一种线程调度装置,包括:
线程检测模块,用于当检测到线程的需求资源为临界资源、且所述临界资源被其他线程持有时,将所述线程作为第一目标线程,其中,预设类型的线程为执行交互事件中相关任务的线程;
调度类确定模块,用于若所述第一目标线程属于预设类型的线程,则确定所述第一目标线程所属的目标调度类,其中,所述预设类型的线程为执行交互事件中相关任务的线程;
队列管理模块,用于从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将所述第一目标线程添加至所述目标位置处。
第三方面,本申请实施例还提供一种存储介质,其上存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如本申请任一实施例提供的线程调度方法。
第四方面,本申请实施例还提供一种电子设备,包括处理器和存储器,所述存储器有计算机程序,所述处理器通过调用所述计算机程序,用于执行如本申请任一实施例提供的线程调度方法。
本申请实施例提供的技术方案,当检测到线程的需求资源为临界资源、且临界资源被其他线程持有时,将线程作为第一目标线程;若第一目标线程属于预设类型的线程,则确定第一目标线程所属的目标调度类;从目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将第一目标线程添加至所述目标位置处;其中,预设类型的线程为执行交互事件中相关任务的线程,通过这种方式,当预设类型的线程因为请求的临界资源被其他线程持有,而进入等待队列时,将预设类型的线程插入到等待队列中的非预设类型的线程之前,当临界资源被释放时,相对于非预设类型的线程,预设类型的线程可以更快的获取到需求的临界资源,缩短这些线程的等待时间,进而加快了交互事件的执行效率,减少了卡顿现象。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的线程调度方法的第一种流程示意图。
图2为本申请实施例提供的线程调度方法的等待队列的一示意图。
图3为本申请实施例提供的线程调度装置的结构示意图。
图4为本申请实施例提供的电子设备的第一种结构示意图。
图5为本申请实施例提供的电子设备的第二种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种线程调度方法,该线程调度方法的执行主体可以是本申请实施例提供的线程调度装置,或者集成了该线程调度装置的电子设备,其中该线程调度装置可以采用硬件或者软件的方式实现。其中,电子设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
请参阅图1,图1为本申请实施例提供的线程调度方法的第一种流程示意图。本申请实施例提供的线程调度方法的具体流程可以如下:
在101中,当检测到线程的需求资源为临界资源、且临界资源被其他线程持有时,将线程作为第一目标线程。
在102中,若第一目标线程属于预设类型的线程,则确定第一目标线程所属的目标调度类,其中,预设类型的线程为执行交互事件中相关任务的线程。
android系统是当前如智能手机、平板电脑等电子设备最主流的移动操作系统之一,其底层实现为linux。以智能手机为例,智能手机上运行的各个线程,遵循linux内核的锁竞争规则。系统中存在各种各样的共享资源,为了防止线程并发访问共享资源带来的竞态问题,内核提供了各种锁机制,如互斥锁、信号量、读写信号量等,对临界区进行保护。
其中,临界资源是一次仅允许一个线程使用的共享资源。每个进程中访问临界资源的那段代码称为临界区,每次只允许一个线程进入临界区,进入后,不允许其他线程进入,直至该线程释放临界资源。本申请实施例中方案可以应用于各种涉及到对临界资源保护的锁机制方案中,并不局限于上文中列举的几种。
由于android的生态不断扩展,系统在运行时,线程数量越来越庞大,对共享资源的并发访问、争抢情况也就越加严重。传统的linux锁竞争机制,在对线程进行调度时,存在容易造成系统卡顿的问题。
本方案从系统视角出发,对影响用户交互场景的卡顿的线程进行识别并标记。例如,如果一些线程是用于执行交互事件中相关任务,则这些线程的运行是否流畅决定着是否在用户交互场景中产生卡顿,因此这些线程与用户体验紧密相关,故将这些线程标记为ux(user experience,用户体验)线程,即预设类型的线程。非预设类型的线程为非ux线程。
当ux线程请求临界资源时,对ux线程和非ux线程采用不同的方式将其加入到等待队列中,进而在调度时,对ux线程和非ux线程采用不同的调度方式调度,以使ux线程可以更快的获取到需求的临界资源,避免出现卡顿现象。
其中,识别并标记ux线程的方式如下:
系统中的线程有系统类线程和应用类线程之分,应用类线程是指某个应用进程创建的只影响到该应用运行的线程,比如某应用进程创建的UI线程、Render线程等,而系统类线程为是指操作系统层面的为整个系统的运行服务的线程,比如Surfaceflinger线程(图层合成线程)、SystemUI(系统界面)线程等。ux线程包括一些系统类线程和一些应用类线程。
其中,电子设备的系统架构至少包括应用框架(framework)层和内核(kernel)层,本申请实施例,从框架层和内核层的角度对ux线程进行识别和标记,例如,应用框架层为一些直接执行交互事件中相关任务的线程添加预设标签,以将这些线程标记为ux线程。
例如,在一实施例中,该方法还包括:确定出用于执行交互事件中相关任务的第三目标线程,并将第三目标线程标记为预设类型的线程。
比如,在一实施例中,“确定出用于执行交互事件中相关任务的第三目标线程,并将第三目标线程标记为预设类型的线程”包括:当检测到切换至前台运行的进程时,确定前台进程;从前台进程的线程中识别出用于执行交互事件中相关任务的第一预设线程,将第一预设线程作为第三目标线程,为其添加预设标签,以将其标记为预设类型的线程。
其中,第一预设线程一般是应用级线程,这些线程可以是通过对实际的卡顿场景进行分析来确定。比如,在测试中,如果某一用户交互场景下发生了应用卡顿,通过对该场景分析发现卡顿现象是某个线程处理任务太慢导致的,则可以认为该线程是用于执行交互事件中相关任务的,该线程的运行与用户体验紧密相关,可以将该线程作为第一预设线程。
基于此,可以通过对各种可能的卡顿场景进行测试,记录这些导致卡顿出现的线程。电子设备中存储这些第一预设线程的相关信息,当进程切换到前台运行时,将该进程下的属于预先记录的第一预设线程的线程都标记为ux线程。
比如,第一预设线程包括进程运行时创建的一些用于直接执行交互事件的相关任务的线程,例如,UI(user interface,用户界面)线程,Render(渲染)线程,GL线程,用户输入事件的分发线程,用户输入事件的检测线程等,其中,GL线程为OGL(Open GraphicsLibrary,开放图形库)的渲染线程。这些线程是否能够流畅运行决定着是否会在用户与该进程的交互界面中产生用户可感知的卡顿。
比如,用户使用聊天软件与某一好友聊天,用户在对话框输入文字,电子设备通过服务器将用户输入的文字发送至该好友的电子设备。在这次交互事件中,需要UI线程、Render线程、用户输入事件的分发线程、用户输入事件的检测线程等线程共同工作,以完成本次交互事件,其中,每一个线程的运行都需要系统为其分配资源。因此,在检测到该聊天软件在前台运行时,识别出这些线程,将其标记为ux线程。
可以理解的是,对于电子设备来说,存储的第一预设线程的相关信息并不是不可修改的,当进行系统升级时,可以对第一预设线程的相关信息进行更新。
在另一实施例中,“确定出用于执行交互事件中相关任务的第三目标线程”还包括:当检测到创建的第二预设线程时,将创建的第二预设线程作为第三目标线程,其中,第二预设线程为执行交互事件中相关任务的系统级线程。
由于在执行交互事件的过程中,除了应用级线程之外,可能还涉及到一些系统级的线程来完成任务,系统框架层也需要将这些系统级线程标记为ux线程。一般这些线程在系统启动时就会创建,因此,可以在检测到系统启动时,识别出这些线程并进行标记,比如,Surfaceflinger线程、系统动画线程等。或者,在系统运行过程中,如果检测到有新的系统类线程创建并用来执行交互事件中相关任务,系统框架层也将这些线程标记为ux线程。比如,SystemUI线程。其中,第二预设线程也可以通过对实际的卡顿场景进行分析来确定。比如,在测试中,如果某一用户交互场景下发生了应用卡顿,通过对该场景分析发现卡顿现象是某个系统级线程处理任务太慢导致的,则可以认为该系统级线程是用于执行交互事件中相关任务的,该系统级线程的运行与用户体验紧密相关,可以将该系统级线程作为第二预设线程。电子设备中存储这些第二预设线程的相关信息,如果检测到系统创建了这些线程,则将其标记为ux线程。
其中,Linux使用task_struct(任务结构)结构体描述和记录线程,每个线程都有对应的task_struct结构体。task_struct中记录了线程的名称、标识符、状态、优先级、内存指针、上下文数据等属性信息。因此,应用框架层可以在task_struct结构体中增加ux flag(ux标志位)成员,以将前台进程的UI线程、Render线程、GL线程等执行交互事件中相关任务的线程,通过标记ux flag位,使内核层能够识别该线程的任务属性。即预设标签可以为uxflag。
需要说明的是,上述几种ux线程仅为举例说明,并不局限于此,只要是直接地执行交互事件中相关任务的线程,使得其运行情况直接地影响到用户体验的线程,都可以将其标记为ux线程。对于应用框架层来说,在检测到新创建的线程是用来执行交互事件,或者检测到某些常驻系统级线程是用以处理交互事件时,为这些线程添加ux标签,以将其标记为ux线程。
在另一实施例中,“从前台进程的线程中识别出用于执行交互事件中相关任务的第一预设线程,作为第三目标线程”还包括:在前台进程的运行过程中,当检测到新创建的线程时,确定新创建的线程是否用于执行交互事件中的相关任务;当新创建的线程用于执行交互事件中的相关任务时,将新创建的线程作为第三目标线程。
前台进程在运行过程中,如果有交互事件发生,除了上述第一预设线程之外,还可能会有一些临时创建的任务线程,这些任务线程的运行也会直接影响到是否会在用户与该进程的交互界面中产生用户可感知的卡顿。因此,应用框架层会将这些线程也标记为ux线程,以优化系统对该线程的资源分配。
其中,电子设备根据检测到的用户指令确定发生的交互事件。需要说明的是,本申请实施例中的交互事件也可以理解为用户交互事件,一般是指用户触发了某指令后,电子设备需要即时的对该指令进行响应,进行某种处理并将处理结果显示在界面上的情况。例如,用户使用电子设备观看视频、编辑短信、使用聊天软件、使用游戏软件、控制电子设备界面的切换、使用浏览浏览网页等,都属于交互事件。比如,用户使用聊天软件与某一好友聊天,用户在对话框输入文字,电子设备通过服务器将用户输入的文字发送至该好友的电子设备。在这个过程中,电子设备需要调度多个线程以完成本次交互事件,从该交互事件的开始到完成的整个过程中,进程创建的用来完成这次交互事件的线程都可以认为是与用户体验相关的线程。
在另一实施例中,为第三目标线程添加预设标签之后,该方法还包括:若前台进程为应用进程,则在检测到前台进程切换至后台运行时,删除第一预设线程的预设标签。当前台进程切换到后台运行时,该进程的运行情况已经与用户体验无关,其线程的重要程度也有所下降,因此,可以将该进程对应的第一预设线程的ux标记删除,将这些ux线程恢复为普通线程。
此外,对于那些在交互事件中临时创建的任务线程来说,在执行完对应的任务后就会被销毁,其自然会丢失掉ux标签。而对于系统级的第二预设线程来说,即使发生了进程的前后台切换,这些线程始终与用户体验相关,所以始终保有ux标签。
通过上述方式,可以根据用户交互场景,动态的设置系统的部分线程为ux线程。
本申请实施例中,当检测到线程的需求资源为临界资源、且临界资源被其他线程持有时,将该线程作为后续处理的第一目标线程,并通过检测该线程是否具有预设标签,比如,检测该第一目标线程的task_struct结构体中的ux flag位,来判断该第一目标线程是否为ux线程。
在103中,从目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将第一目标线程添加至所述目标位置处。
如果该第一目标线程为ux线程,则先确定该线程的调度类,再根据调度类确定线程在等待队列中的插入位置。
其中,当线程请求的资源为临界资源,且该临界资源被其他线程持有时,该线程需要挂载到等待队列中,等待持有临界资源的线程释放临界资源、同时该线程位于等待队列的队首(因为等待该临界资源的线程可能不止一个)时,该线程才会被调度执行。
一般情况下,内核中的线程是有区分调度类的,调度类保存在上文提到的task_struct结构体中,内核中的线程最常见的是CFS(complete fair schedule,完全公平调度)调度类线程(比如UI线程、Render线程以及很多比较常见的线程都是CFS的)、RT(RealTimescheduler,实时调度)调度类线程(比如Surfaceflinger线程以及一些其他核心线程)。不同调度类的优先级不一样(这里的优先级是指某一调度类线程整体上相对于另一调度类线程具有的优先级)。比如,调度类的优先级体现在:多核CPU(central processing unit,中央处理器)进行调度时,会先通过RT调度类的任务调度方法中选择RT线程运行,如果没有RT线程,才会从CFS调度类的调度方法中选择CFS线程,也就是说,RT调度类的优先级高于CFS调度类的优先级。当然,这两种调度类各自的调度方法中,会区分各自处理的线程的优先级(这里的优先级是指某一调度类内部各线程的优先级),如RT优先级,CFS优先级。
故,本申请实施例中,先确定该第一目标线程的调度类,再根据调度类确定线程在等待队列中的插入位置。
其中,根据调度类的不同,将整个等待队列划分为CFS调度类对应的等待队列和RT调度类对应的等待队列,请参阅图2,图2为本申请实施例提供的线程调度方法中等待队列的一示意图。CFS调度类对应的等待队列记为队列1,RT调度类对应的等待队列记为队列2,队列1和队列2共同构成整个等待队列。
例如,如果第一目标线程为ux线程、且为RT线程,则将该ux线程添加至队列1中的非ux线程之前,如果第一目标线程为ux线程、且为CFS线程,则将该ux线程添加至队列2中的非ux线程之前,即更靠近队首的位置。
比如,在一实施例中,如果第一目标线程为ux线程、且为CFS线程,则将该ux线程添加至队列2中的非ux线程之前、ux线程之后。
或者,在另一实施例中,确定第一目标线程的优先级;从等待队列的队头遍历等待队列中的线程,直至访问到优先级小于第一目标线程的优先级的第二目标线程,其中,第二目标线程属于预设类型的线程;将第二目标线程之前的相邻位置,作为目标位置;当等待队列中的预设类型的线程的优先级均大于第一目标线程的优先级时,将等待队列中优先级最低的预设类型的线程之后的相邻位置作为目标位置。在确定出目标位置后,将第一目标线程添加至目标位置处。例如,如果第一目标线程为ux线程、且为CFS线程,则先确定该第一目标线程的CFS优先级,按照CFS优先级的高低将该线程添加至队列2中的非ux线程之前,即按照第一目标线程的CFS优先级确定其在队列2的多个ux线程中的位置,使得等待队列中的ux线程从队首起按照CFS优先级由高至低的顺序排列。按照这种方式排序后,队列2中的ux线程也是按照其CFS优先级排序的,能够确保那些既是ux线程、同时CFS优先级又较高的线程能够被优先调度。
其中,在一实施例中,将线程作为第一目标线程之后,该方法还包括:若所述第一目标线程不属于所述预设类型的线程,则根据所述第一目标线程的优先级,将所述第一目标线程添加至所述等待队列。
如果第一目标线程不属于ux线程,则只依据该线程的优先级,将其添加至对应的调度类的等待队列的非ux的位置处,比如,根据第一目标线程的优先级,将第一目标线程添加至等待队列,包括:确定第一目标线程的优先级;从等待队列的队尾遍历等待队列中的线程,直至访问到优先级大于第一目标线程的优先级的第四目标线程,其中,第四目标线程不属于预设类型的线程;将第一目标线程添加至第四目标线程之后的相邻位置处;当等待队列中的非预设类型的线程的优先级均小于第一目标线程的优先级,则将第一目标线程添加至等待队列中优先级最高的非预设类型的线程之前的相邻位置处。例如,第一目标线程为CFS线程、但不是ux线程,则根据该线程的CFS优先级确定其在队列2中的CFS线程部分中的目标位置,比如从队列2的队尾开始遍历,直至访问到CFS优先级大于第一目标线程的CFS优先级的线程,作为第二目标线程,将第一目标线程添加至第二目标线程之后的相邻位置处。
如图2所示,当内核中线程因获取不到临界区资源而进入慢速路径,挂入等待队列时,按照上述方案管理第一目标线程在等待队列中的位置后,将RT类的ux线程插在RT类非Ux线程前面,CFS类ux线程插在CFS类非ux线程前面,非ux线程则继续按照其优先级由高至低排序。等待队列中的线程最终按照如下顺序排列:RT类的ux线程、RT类非Ux线程、CFS类ux线程、CFS类非ux线程。如此便可保证ux线程获取共享资源的优先权的同时,也能够保证优先级较高线程获取共享资源的优先权。
上述实施例中,以CFS调度类线程和RT调度类线程构成的等待队列为例进行说明。如果系统中还有其他的调度类,则根据该调度类的优先级按照同样的原理进行等待队列的管理,在此不再一一说明。
其中,在一实施例中,为了进一步缩短ux线程的等待时间,在103之后,该方法还包括:将持有临界资源的线程标记为预设类型的线程。
由于持有第一目标线程需要的临界资源的线程持有该临界资源的时间的长短,影响着第一目标线程等待时间的长短,如果持有第一目标线程需要的临界资源的线程所需的其他资源也是临界资源、同时该临界资源又被另外的线程持有,则持有第一目标线程需要的临界资源的线程也需要在等待队列中等待,并且,可能会出现多个线程因为上述持有临界资源的关系,而形成一个等待链,比如,线程A因为需要的临界资源被线程B持有而在等待队列中等待,线程B因为需要的临界资源被线程C持有也在等待队列中等待,甚至,线程C可能因为需要的临界资源被线程D持有也在等待队列中等待。
因此,该实施例中,将持有第一目标线程需要的临界资源的线程也标记为ux线程,通过这种方式,上述例子中的线程D、线程C、线程B都会被标记为ux线程,让他们也具备锁竞争的优先权,加快了线程D、线程C、线程B被调度的速度,进而加速整体ux线程从阻塞状态恢复成运行状态的过程。
通过上述方案,将影响用户体验的核心线程标记为ux线程,在线程因获取不到资源而进入慢速路径等待时,将ux线程排在等待队列的队首,提高ux线程获得锁的优先权。在多线程争抢公共资源情况较为严重时,能保证ux线程在锁释放时第一时间获得资源,避免影响用户体验的核心线程长时间处于阻塞状态,从而有效避免该类因长时间等锁造成的系统卡顿问题。
具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。
由上可知,本申请实施例提供的线程调度方法,当检测到线程的需求资源为临界资源、且临界资源被其他线程持有时,将线程作为第一目标线程;若第一目标线程属于预设类型的线程,则确定第一目标线程所属的目标调度类;从目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将第一目标线程添加至所述目标位置处;其中,预设类型的线程为执行交互事件中相关任务的线程,通过这种方式,当预设类型的线程因为请求的临界资源被其他线程持有,而进入等待队列时,将预设类型的线程插入到等待队列中的非预设类型的线程之前,当临界资源被释放时,相对于非预设类型的线程,预设类型的线程可以更快的获取到需求的临界资源,缩短这些线程的等待时间,进而加快了交互事件的执行效率,减少了卡顿现象。
在一实施例中还提供一种线程调度装置。请参阅图3,图3为本申请实施例提供的线程调度装置300的结构示意图。其中该线程调度装置300应用于电子设备,该线程调度装置300包括线程检测模块301、调度类确定模块302以及队列管理模块303,如下:
线程检测模块301,用于当检测到线程的需求资源为临界资源、且所述临界资源被其他线程持有时,将所述线程作为第一目标线程;
调度类确定模块302,用于若所述第一目标线程属于预设类型的线程,则确定所述第一目标线程所属的目标调度类,其中,所述预设类型的线程为执行交互事件中相关任务的线程;
队列管理模块303,用于从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将所述第一目标线程添加至所述目标位置处。
在一些实施例中,队列管理模块303,还用于若所述第一目标线程不属于所述预设类型的线程,则根据所述第一目标线程的优先级,将所述第一目标线程添加至所述等待队列。
在一些实施例中,队列管理模块303,还用于
确定所述第一目标线程的优先级;
从所述等待队列的队头遍历所述等待队列中的线程,直至访问到优先级小于所述第一目标线程的优先级的第二目标线程,其中,所述第二目标线程属于所述预设类型的线程;
将所述第二目标线程之前的相邻位置,作为目标位置;
当所述等待队列中的预设类型的线程的优先级均大于所述第一目标线程的优先级时,将所述等待队列中优先级最低的预设类型的线程之后的相邻位置作为目标位置。
在一些实施例中,该线程调度装置还包括线程标记模块,该线程标记模块用于将持有所述临界资源的线程标记为所述预设类型的线程。
在一些实施例中,队列管理模块303,还用于根据所述目标线程的优先级,确定所述目标线程在所述等待队列中的非预设类型的线程之前的目标位置;
将所述目标线程添加至所述目标位置处。
在一些实施例中,所述线程标记模块,还用于确定出用于执行交互事件中相关任务的第三目标线程,并将所述第三目标线程标记为预设类型的线程。
在一些实施例中,所述线程标记模块,还用于当检测到切换至前台运行的进程时,确定前台进程;
从所述前台进程的线程中识别出用于执行交互事件中相关任务的第一预设线程,为所述第一预设线程添加预设标签,以将所述线程标记为预设类型的线程。
在一些实施例中,所述线程标记模块,还用于当检测到创建的第二预设线程时,将创建的第二预设线程作为第三目标线程,其中,所述第二预设线程为执行交互事件中相关任务的系统级线程。
应当说明的是,本申请实施例提供的线程调度装置与上文实施例中的线程调度方法属于同一构思,通过该线程调度装置可以实现线程调度方法实施例中提供的任一方法,其具体实现过程详见线程调度方法实施例,此处不再赘述。
由上可知,本申请实施例提出的线程调度装置,当检测到线程的需求资源为临界资源、且临界资源被其他线程持有时,将线程作为第一目标线程;若第一目标线程属于预设类型的线程,则确定第一目标线程所属的目标调度类;从目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将第一目标线程添加至所述目标位置处;其中,预设类型的线程为执行交互事件中相关任务的线程,通过这种方式,当预设类型的线程因为请求的临界资源被其他线程持有,而进入等待队列时,将预设类型的线程插入到等待队列中的非预设类型的线程之前,当临界资源被释放时,相对于非预设类型的线程,预设类型的线程可以更快的获取到需求的临界资源,缩短这些线程的等待时间,进而加快了交互事件的执行效率,减少了卡顿现象。
本申请实施例还提供一种电子设备。所述电子设备可以是智能手机、平板电脑等设备。请参阅图4,图4为本申请实施例提供的电子设备的第一种结构示意图。电子设备400包括处理器401和存储器402。其中,处理器401与存储器402电性连接。
处理器401是电子设备400的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或调用存储在存储器402内的计算机程序,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
存储器402可用于存储计算机程序和数据。存储器402存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器401通过调用存储在存储器402的计算机程序,从而执行各种功能应用以及数据处理。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当检测到线程的需求资源为临界资源、且所述临界资源被其他线程持有时,将所述线程作为第一目标线程;
若所述第一目标线程属于预设类型的线程,则确定所述第一目标线程所属的目标调度类,其中,所述预设类型的线程为执行交互事件中相关任务的线程;
从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将所述第一目标线程添加至所述目标位置处。
在一些实施例中,请参阅图5,图5为本申请实施例提供的电子设备的第二种结构示意图。电子设备400还包括:射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409。其中,处理器401分别与射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409电性连接。
射频电路403用于收发射频信号,以通过无线通信与网络设备或其他电子设备进行通信。
显示屏404可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图像、文本、图标、视频和其任意组合来构成。
控制电路405与显示屏404电性连接,用于控制显示屏404显示信息。
输入单元406可用于接收输入的数字、字符信息或用户特征信息(例如指纹),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。其中,输入单元406可以包括指纹识别模组。
音频电路407可通过扬声器、传声器提供用户与电子设备之间的音频接口。其中,音频电路407包括麦克风。所述麦克风与所述处理器401电性连接。所述麦克风用于接收用户输入的语音信息。
传感器408用于采集外部环境信息。传感器408可以包括环境亮度传感器、加速度传感器、陀螺仪等传感器中的一种或多种。
电源409用于给电子设备400的各个部件供电。在一些实施例中,电源409可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
虽然图中未示出,电子设备400还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
当检测到线程的需求资源为临界资源、且所述临界资源被其他线程持有时,将所述线程作为第一目标线程;
若所述第一目标线程属于预设类型的线程,则确定所述第一目标线程所属的目标调度类,其中,所述预设类型的线程为执行交互事件中相关任务的线程;
从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将所述第一目标线程添加至所述目标位置处。
由上可知,本申请实施例提供了一种电子设备,所述电子设备当检测到线程的需求资源为临界资源、且临界资源被其他线程持有时,将线程作为第一目标线程;若第一目标线程属于预设类型的线程,则确定第一目标线程所属的目标调度类;从目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将第一目标线程添加至所述目标位置处;其中,预设类型的线程为执行交互事件中相关任务的线程,通过这种方式,当预设类型的线程因为请求的临界资源被其他线程持有,而进入等待队列时,将预设类型的线程插入到等待队列中的非预设类型的线程之前,当临界资源被释放时,相对于非预设类型的线程,预设类型的线程可以更快的获取到需求的临界资源,缩短这些线程的等待时间,进而加快了交互事件的执行效率,减少了卡顿现象。
本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,所述计算机执行上述任一实施例所述的线程调度方法。
需要说明的是,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可以存储于计算机可读存储介质中,所述存储介质可以包括但不限于:只读存储器(ROM,Read OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
此外,本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
以上对本申请实施例所提供的线程调度方法、装置、存储介质及电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种线程调度方法,其特征在于,包括:
当检测到线程的需求资源为临界资源、且所述临界资源被其他线程持有时,将所述线程作为第一目标线程;
若所述第一目标线程属于预设类型的线程,则确定所述第一目标线程所属的目标调度类,其中,所述预设类型的线程为执行交互事件中相关任务的线程;
从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将所述第一目标线程添加至所述目标位置处。
2.如权利要求1所述的线程调度方法,其特征在于,所述将所述线程作为第一目标线程之后,还包括:
若所述第一目标线程不属于所述预设类型的线程,则根据所述第一目标线程的优先级,将所述第一目标线程添加至所述等待队列。
3.如权利要求1所述的线程调度方法,其特征在于,所述从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,包括:
确定所述第一目标线程的优先级;
从所述等待队列的队头遍历所述等待队列中的线程,直至访问到优先级小于所述第一目标线程的优先级的第二目标线程,其中,所述第二目标线程属于所述预设类型的线程;
将所述第二目标线程之前的相邻位置,作为目标位置;
当所述等待队列中的预设类型的线程的优先级均大于所述第一目标线程的优先级时,将所述等待队列中优先级最低的预设类型的线程之后的相邻位置作为目标位置。
4.如权利要求1所述的线程调度方法,其特征在于,所述将所述第一目标线程添加至所述目标位置处之后,还包括:
将持有所述临界资源的线程标记为所述预设类型的线程。
5.如权利要求1至4任一项所述的线程调度方法,其特征在于,所述方法还包括:
确定出用于执行交互事件中相关任务的第三目标线程,并将所述第三目标线程标记为预设类型的线程。
6.如权利要求5所述的线程调度方法,其特征在于,所述确定出用于执行交互事件中相关任务的第三目标线程,包括:
当检测到切换至前台运行的进程时,确定前台进程;
从所述前台进程的线程中识别出用于执行交互事件中相关任务的第一预设线程,将识别出的第一预设线程作为第三目标线程。
7.如权利要求5所述的线程调度方法,其特征在于,所述确定出用于执行交互事件中相关任务的第三目标线程,还包括:
当检测到创建的第二预设线程时,将创建的第二预设线程作为第三目标线程,其中,所述第二预设线程为执行交互事件中相关任务的系统级线程。
8.一种线程调度装置,其特征在于,包括:
线程检测模块,用于当检测到线程的需求资源为临界资源、且所述临界资源被其他线程持有时,将所述线程作为第一目标线程;
调度类确定模块,用于若所述第一目标线程属于预设类型的线程,则确定所述第一目标线程所属的目标调度类,其中,所述预设类型的线程为执行交互事件中相关任务的线程;
队列管理模块,用于从所述目标调度类对应的等待队列的非预设类型的线程之前的位置中,确定出目标位置,并将所述第一目标线程添加至所述目标位置处。
9.一种存储介质,其上存储有计算机程序,其特征在于,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至7任一项所述的线程调度方法。
10.一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,其特征在于,所述处理器通过调用所述计算机程序,用于执行如权利要求1至7任一项所述的线程调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010627316.9A CN111831413A (zh) | 2020-07-01 | 2020-07-01 | 线程调度方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010627316.9A CN111831413A (zh) | 2020-07-01 | 2020-07-01 | 线程调度方法、装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111831413A true CN111831413A (zh) | 2020-10-27 |
Family
ID=72900040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010627316.9A Pending CN111831413A (zh) | 2020-07-01 | 2020-07-01 | 线程调度方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831413A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535512A (zh) * | 2021-06-30 | 2021-10-22 | 珠海豹趣科技有限公司 | 一种进程监控方法、装置、电子设备及可读存储介质 |
CN115934372A (zh) * | 2023-03-09 | 2023-04-07 | 浪潮电子信息产业股份有限公司 | 一种数据处理方法、系统、设备及计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101253482A (zh) * | 2005-08-30 | 2008-08-27 | 英特尔公司 | 公平可缩放的读者写者互斥 |
CN101996099A (zh) * | 2010-11-17 | 2011-03-30 | 山东中创软件工程股份有限公司 | 一种消息处理方法及系统 |
US20120222035A1 (en) * | 2011-02-25 | 2012-08-30 | Qualcomm Incorporated | Priority Inheritance in Multithreaded Systems |
CN103699437A (zh) * | 2013-12-20 | 2014-04-02 | 华为技术有限公司 | 一种资源调度方法及设备 |
CN107967181A (zh) * | 2017-12-19 | 2018-04-27 | 北京小米移动软件有限公司 | 临界区的控制方法及装置 |
-
2020
- 2020-07-01 CN CN202010627316.9A patent/CN111831413A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101253482A (zh) * | 2005-08-30 | 2008-08-27 | 英特尔公司 | 公平可缩放的读者写者互斥 |
CN101996099A (zh) * | 2010-11-17 | 2011-03-30 | 山东中创软件工程股份有限公司 | 一种消息处理方法及系统 |
US20120222035A1 (en) * | 2011-02-25 | 2012-08-30 | Qualcomm Incorporated | Priority Inheritance in Multithreaded Systems |
CN103699437A (zh) * | 2013-12-20 | 2014-04-02 | 华为技术有限公司 | 一种资源调度方法及设备 |
CN107967181A (zh) * | 2017-12-19 | 2018-04-27 | 北京小米移动软件有限公司 | 临界区的控制方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535512A (zh) * | 2021-06-30 | 2021-10-22 | 珠海豹趣科技有限公司 | 一种进程监控方法、装置、电子设备及可读存储介质 |
CN115934372A (zh) * | 2023-03-09 | 2023-04-07 | 浪潮电子信息产业股份有限公司 | 一种数据处理方法、系统、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111831441A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN113110941B (zh) | 使用应用容器管理代码和依赖性数据的传递 | |
CN111831440A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
EP3371693B1 (en) | Method and electronic device for managing operation of applications | |
CN111831433A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN111813520A (zh) | 线程调度方法、装置、存储介质及电子设备 | |
CN110300328B (zh) | 一种视频播放控制方法、装置及可读存储介质 | |
CN111831434A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN111831414A (zh) | 线程迁移方法、装置、存储介质及电子设备 | |
CN103455376A (zh) | 对操作系统中多个进程对现场可编程门阵列的使用的管理 | |
CN111831438A (zh) | 资源分配方法、装置、存储介质及电子设备 | |
CN111831435A (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111813521A (zh) | 线程调度方法、装置、存储介质及电子设备 | |
CN111831413A (zh) | 线程调度方法、装置、存储介质及电子设备 | |
CN111831432B (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN112256421B (zh) | 通信处理方法、装置、存储介质及电子设备 | |
CN112035768A (zh) | 快应用的页面渲染方法、装置、存储介质及电子设备 | |
CN111831411A (zh) | 任务处理方法、装置、存储介质及电子设备 | |
US11221881B2 (en) | Computer resource leak detection | |
CN111831436A (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN111831462A (zh) | Io请求的处理方法、装置、存储介质及电子设备 | |
CN111475299A (zh) | 内存分配方法、装置、存储介质及电子设备 | |
CN111831437A (zh) | 设备管理方法、装置、存储介质及电子设备 | |
CN111831439A (zh) | Io请求的处理方法、装置、存储介质及电子设备 | |
CN111831442A (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 |