一种线程调度方法、电子设备及存储介质转让专利

申请号 : CN202211589988.0

文献号 : CN115629884B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王文文

申请人 : 荣耀终端有限公司

摘要 :

本申请提供了一种线程调度方法、电子设备及存储介质,涉及电子设备技术领域。该方法包括:在第一线程进入阻塞状态后,处理器确定持有第一线程依赖的互斥锁的第二线程;将为第二线程分配的运行资源由第一运行资源增加至第二运行资源;待第二线程完成访问对应的共享资源后,释放第一线程依赖的互斥锁,并将为第二线程分配的运行资源恢复为第一运行资源;当第二线程释放第一线程依赖的互斥锁后就不需要加快运行第二线程了,故将分配给第二线程的运行资源调整至原来的运行资源;然后继续执行第一线程。如此可以加快第二线程释放第一线程依赖的互斥锁,进一步减少第一线程的等待时间,以减少应用界面出现卡顿的现象,显著缩短前台应用的响应时间。

权利要求 :

1.一种线程调度方法,其特征在于,线程依赖的互斥锁用于支持所述线程访问对应的共享资源;当所述线程依赖的互斥锁被其它线程持有,且所述线程访问所述共享资源时,第一线程进入阻塞状态;所述方法包括:在第一线程进入阻塞状态后,确定持有所述第一线程依赖的互斥锁的第二线程;

当所述第二线程依赖的互斥锁被第三线程持有,且所述第三线程与其它n个线程间存在互斥锁竞争,所述n为正整数,待所述第三线程完成访问对应的共享资源后,释放所述第二线程依赖的互斥锁之前,确定所述第三线程与所述其它n个线程间的互斥锁持有关系,所述互斥锁持有关系为第i线程持有第i‑1线程依赖的互斥锁i‑1,所述i= n+3,…,4;i的取值依次为n+3,…,4;

根据所述互斥锁持有关系,在所述第i‑1线程进入阻塞状态后,将所述第i线程加入动态资源调度队列;

将所述第i线程的标识设为第一标识,所述第一标识用于表征线程需要优先进行调度;

根据所述第一标识,增加为第i线程分配的运行资源;

待所述第i线程完成访问对应的共享资源后,释放所述第i‑1线程依赖的互斥锁,恢复为所述第i线程分配的运行资源;

当所述第二线程依赖的互斥锁被第三线程持有时,待所述第二线程完成访问对应的共享资源后,释放所述第一线程依赖的互斥锁之前,在所述第二线程进入阻塞状态后,将所述第三线程加入动态资源调度队列;将所述第三线程的标识设为第一标识,根据所述第一标识,将对所述第三线程分配的运行资源由第三运行资源增加至第四运行资源;

待所述第三线程完成访问对应的共享资源后,释放所述第二线程依赖的互斥锁,并将为所述第三线程分配的运行资源恢复为所述第三运行资源;

将所述第二线程加入动态资源调度队列;

将所述第二线程的标识设为第一标识;

根据所述第一标识,将为所述第二线程分配的运行资源由第一运行资源增加至第二运行资源;

待所述第二线程完成访问对应的共享资源后,释放所述第一线程依赖的互斥锁,并将为所述第二线程分配的运行资源恢复为所述第一运行资源;

继续执行所述第一线程。

2.根据权利要求1所述的方法,其特征在于,所述增加为第i线程分配的运行资源,具体包括:将为第i线程分配的运行资源由第2i‑3运行资源增加至第2i‑2运行资源。

3.根据权利要求1所述的方法,其特征在于,所述将为所述第二线程分配的运行资源由第一运行资源增加至第二运行资源,具体包括:将所述第二线程的调度优先级由第一优先级调整至第二优先级,所述第二优先级高于所述第一优先级。

4.根据权利要求1所述的方法,其特征在于,所述将为所述第二线程分配的运行资源由第一运行资源增加至第二运行资源,具体包括:将所述第二线程由当前运行所述第二线程的处理器内核调整至处理器中的大核上运行。

5.根据权利要求1所述的方法,其特征在于,所述将为所述第二线程分配的运行资源由第一运行资源增加至第二运行资源,具体包括:将运行所述第二线程的处理器的运行频率由第一运行频率调整至第二运行频率;所述第二运行频率大于所述第一运行频率。

6.根据权利要求1所述的方法,其特征在于,所述待所述第二线程完成访问对应的共享资源后,释放所述第一线程依赖的互斥锁,并将为所述第二线程分配的运行资源恢复为所述第一运行资源,具体包括:待所述第二线程完成访问对应的共享资源后,释放所述第一线程依赖的互斥锁;

将所述第二线程移出动态资源调度队列;

将所述第二线程的标识设为第二标识,所述第二标识用于表征线程不需要优先进行调度;

根据所述第二标识,将为所述第二线程分配的运行资源恢复为所述第一运行资源。

7.根据权利要求1所述的方法,其特征在于,所述继续执行所述第一线程,具体包括:增加为所述第一线程分配的运行资源;

利用增加后的运行资源,继续执行所述第一线程。

8.一种电子设备,其特征在于,包括:处理器和存储器;

其中,在所述存储器中存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令;当所述指令被所述处理器执行时,使得所述电子设备执行如权利要求1‑7中任一项所述的线程调度方法。

9.一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,所述电子设备执行如权利要求1‑7中任一项所述的线程调度方法。

说明书 :

一种线程调度方法、电子设备及存储介质

技术领域

[0001] 本申请涉及电子设备技术领域,尤其涉及一种线程调度方法、电子设备及存储介质。

背景技术

[0002] 目前,安卓(Android)系统绝大多数的跨进程通信都是利用Binder IPC机制实现的。其中,Binder是客户端和服务端通信的媒介,IPC(Inter‑Process Communication)为进程间的通信。
[0003] 安卓系统在执行线程时,通常按照预先分配好的CPU内核以及CPU运行频率执行该线程对应的程序代码。但是,电子设备的性能是有限的,当用户不断启动新的应用,使得设备后台系统高负载、多任务并发时,在采用Binder IPC机制进行跨进程通信的时候,如果多个进程需要访问同一个共享资源,则会发生互斥锁竞争。例如,执行线程A时,可能出现线程A访问的共享资源的互斥锁被线程B占用的情况,需要先执行线程B,待线程B释放互斥锁后
才能继续执行线程A;并且在执行线程B的时候,还有可能出现线程B需要访问的共享资源的互斥锁被线程C占用的情况,同样需要先执行线程C,待线程C释放互斥锁之后再继续执行线程B。进而导致发生互斥锁竞争时会产生较长时间的阻塞,使得通信时间变长,造成前台应用卡顿和响应时间变长等问题,影响用户体验。

发明内容

[0004] 为了解决上述问题,本申请提供了一种线程调度方法、电子设备及存储介质,旨在解决现有技术中电子设备在后台系统高负载、多任务并发时,前台应用卡顿和响应时间长的问题。
[0005] 第一方面,本申请提供了一种线程调度方法,线程依赖的互斥锁用于支持线程访问对应的共享资源;该方法应用于当线程依赖的互斥锁被其它线程持有,且线程访问共享
资源时,第一线程进入阻塞状态;该方法包括:
[0006] 在第一线程进入阻塞状态后,处理器确定持有第一线程依赖的互斥锁的第二线程;将为第二线程分配的运行资源由第一运行资源增加至第二运行资源;如此可以提高第
二线程的运行速度;待第二线程完成访问对应的共享资源后,释放第一线程依赖的互斥锁,并将为第二线程分配的运行资源恢复为第一运行资源;当第二线程释放第一线程依赖的互
斥锁后就不需要加快运行第二线程了,故将分配给第二线程的运行资源调整至原来的运行
资源;然后继续执行第一线程。如此可以加快第二线程释放第一线程依赖的互斥锁,进一步减少第一线程的等待时间,以减少应用界面出现卡顿的现象,显著缩短前台应用的响应时
间。
[0007] 在一种可能的实现方式中,当第二线程依赖的互斥锁被第三线程持有时,待第二线程完成访问对应的共享资源后,释放第一线程依赖的互斥锁之前,该方法还包括:
[0008] 在第二线程进入阻塞状态后,处理器将对第三线程分配的运行资源由第三运行资源增加至第四运行资源;如此可以提高第三线程的运行速度。待第三线程完成访问对应的
共享资源后,释放第二线程依赖的互斥锁,并将为第三线程分配的运行资源恢复为第三运
行资源;当第三线程释放第二线程依赖的互斥锁后,就不需要加快运行第三线程了,可以将第三线程的运行资源恢复至第三线程原来的运行资源。将为第二线程分配的运行资源增加
至第二运行资源。待第二线程拥有互斥锁后,增加第二线程的运行速度。如此,当第三线程占有第二线程的互斥锁时,加快运行第三线程,以使第三线程尽快释放第二线程依赖的互
斥锁,减少第二线程的等待时间,进一步加快释放第一线程依赖的互斥锁,以减少第一线程的等待时间。
[0009] 在一种可能的实现方式中,当第二线程依赖的互斥锁被第三线程持有,且第三线程与其它n个线程间存在互斥锁竞争,n为正整数,待第三线程完成访问对应的共享资源后,释放第二线程依赖的互斥锁之前,该方法还包括:
[0010] 处理器确定第三线程与其它n个线程间的互斥锁持有关系,互斥锁持有关系为第i线程持有第i‑1线程依赖的互斥锁i‑1,i= n+3,…,4;然后根据互斥锁持有关系,在第i‑1线程进入阻塞状态后,将为第i线程分配的运行资源由第2i‑3运行资源增加至第2i‑2运行资源;例如,当n=1,即i=4时,第4线程持有第3线程依赖的互斥锁3,第3线程进入阻塞等待状态,为第4线程分配的运行资源由第5运行资源增加至第6运行资源,如此是为了增加第4线
程的运行速度,如此可以加快第4线程释放第3线程依赖的互斥锁3,进一步减少第3线程的
等待时间。待第i线程完成访问对应的共享资源后,释放第i‑1线程依赖的互斥锁,并将为第i线程分配的运行资源恢复为第2i‑3运行资源;也就是在第4线程释放完互斥锁3后,就不需要加快运行第4线程了,就可以将第4线程的运行资源恢复至原来的运行资源。然后将为第
i‑1线程分配的运行资源增加至第2i‑4运行资源,也就是将第3线程分配的运行增加到第4运行资源,用来加快第三线程的运行速度。该方法中,首先找到占有第一线程的互斥锁的最终持有者线程,提高占有第一线程的互斥锁的最终持有者线程的运行速度,以实现加快释
放互斥锁的目的,以便加快依赖该互斥锁的线程加快运行速度,最终以实现加快释放第一
线程依赖的互斥锁的释放速度,减少第一线程的等待时间,进一步减少应用界面发生卡顿
的情况,缩短应用的响应时间。
[0011] 在一种可能的实现方式中,将为第二线程分配的运行资源由第一运行资源增加至第二运行资源,具体包括:
[0012] 处理器将第二线程加入动态资源调度队列;并且将第二线程的标识设为第一标识,第一标识用于表征线程需要优先进行调度;然后根据第一标识,将为第二线程分配的运行资源由第一运行资源增加至第二运行资源。如此,处理器通过将第二线程加入动态资源
调度队列,并且将第二线程的标识设为第一标识,就可以根据第一标识识别出第二线程需
要优先进行调度,以便处理器对第二线程进行后续的优先调度。
[0013] 在一种可能的实现方式中,将为第二线程分配的运行资源由第一运行资源增加至第二运行资源,具体包括:
[0014] 处理器将第二线程的调度优先级由第一优先级调整至第二优先级,第二优先级高于第一优先级。如此,可以通过提高第二线程的调度优先级的方式加快第二线程的运行速
度。
[0015] 在一种可能的实现方式中,将为第二线程分配的运行资源由第一运行资源增加至第二运行资源,具体包括:
[0016] 处理器将第二线程由当前运行第二线程的处理器内核调整至处理器中的大核上运行。如此,可以通过将第二线程调整至大核上运行,来提高第二线程的运行速度。
[0017] 在一种可能的实现方式中,将为第二线程分配的运行资源由第一运行资源增加至第二运行资源,具体包括:
[0018] 处理器将运行第二线程的处理器的运行频率由第一运行频率调整至第二运行频率;第二运行频率大于第一运行频率。如此可以通过提高运行第二线程的处理器的运行频
率来提高第二线程的运行速度。
[0019] 在一种可能的实现方式中,待第二线程完成访问对应的共享资源后,释放第一线程依赖的互斥锁,并将为第二线程分配的运行资源恢复为第一运行资源,具体包括:
[0020] 待第二线程完成访问对应的共享资源后,处理器释放第一线程依赖的互斥锁;并将第二线程移出动态资源调度队列;将第二线程的标识设为第二标识,第二标识用于表征
线程不需要优先进行调度;根据第二标识,将为第二线程分配的运行资源恢复为第一运行
资源。当第二线程释放了第一线程的互斥锁后,就不需要对第二线程进行优先调度了,可以通过将第二线程移出动态资源调度队列,并设置第二线程的标识为第二标识,根据第二标
识将第二线程的运行资源恢复至原来的运行资源。
[0021] 在一种可能的实现方式中,继续执行第一线程,具体包括:
[0022] 处理器增加为第一线程分配的运行资源;并利用增加后的运行资源,继续执行第一线程。为了进一步加快调度第一线程,也可以增加第一线程的运行资源,以进一步加快应用的响应速度。
[0023] 第二方面,本申请提供了一种电子设备,该电子设备包括:处理器和存储器;
[0024] 其中,在存储器中存储有一个或多个计算机程序,一个或多个计算机程序包括指令;当指令被处理器执行时,使得电子设备执行如上述第一方面中任一种可能的设计中所
述的线程调度方法。
[0025] 第三方面,本申请提供了一种计算机存储介质,该计算机存储介质包括计算机指令,当所述计算机指令在电子设备上运行时,所述电子设备执行如上述第一方面中任一种
可能的设计中所述的线程调度方法。

附图说明

[0026] 图1A为本申请实施例提供的一种进程间通信原理图;
[0027] 图1B为本申请实施例提供的一种Binder通信架构示意图;
[0028] 图1C为本申请实施例提供的一种互斥锁的应用场景示意图;
[0029] 图1D为本申请实施例提供的一种电子设备的结构示意图;
[0030] 图2为本申请实施例提供的一种电子设备的软件结构框图;
[0031] 图3为本申请实施例提供的一种用户使用电子设备的显示屏的界面示意图;
[0032] 图4A为本申请实施例提供的一种线程调度方法的时序图;
[0033] 图4B为本申请实施例提供的另一种线程调度方法的时序图。

具体实施方式

[0034] 本申请说明书和权利要求书及附图说明中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于限定特定顺序。
[0035] 在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
[0036] 为了下述各实施例的描述清楚简洁,首先给出相关术语及技术的简要介绍:
[0037] 进程(process):进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
[0038] 线程(thread):线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,并且每条线程并行执行不同的任务。线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;也可以为由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程进行混合调度的线程,如Windows 7的线程。
[0039] 线程和进程的关系:
[0040] 一个进程可以有多个线程,但至少有一个线程;每条线程并行执行不同的任务,而一个线程只能在一个进程的地址空间内活动;资源分配给进程,同一个进程的所有线程共享该进程所有资源;CPU分配给线程,即真正在处理器运行的是线程;线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
[0041] Binder:是一种进程间通信的机制。
[0042] IPC:即Inter‑Process Communication,意为进程间的通信。
[0043] 互斥锁:在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。
[0044] 参见图1A,图1A为本申请实施例提供的一种进程间通信原理图。
[0045] 从进程角度来看IPC机制原理:
[0046] Android的每个进程,只能运行在自己进程所拥有的虚拟地址空间。例如虚拟地址空间的大小为4GB,其中3GB是用户空间,1GB是内核空间,当然内核空间的大小是可以通过参数配置调整的。对于用户空间,不同进程之间彼此是不能共享的,而内核空间却是可共享的。Client进程向Server进程通信,需要利用进程间可共享的内核内存空间来完成底层通
信。
[0047] Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制的。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC机制。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案。
[0048] 相比于其他的IPC方式,如管道、Socket、内存共享,消息队列等,Binder的进程间通信机制具有以下优点:
[0049] 在性能方面,Binder相对于传统的IPC方式,更加方便、高效。Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要2次,内存共享方式不需要数据拷贝,但实现方式又比较复杂。
[0050] 在安全性方面,传统的进程通信方式对于通信双方的身份并没有做出严格的验证,比如Socket通信ip地址是客户端手动填入,很容易进行伪造,而Binder机制从协议本身就支持对通信双方做身份校检,因而大大提升了安全性。
[0051] 参见图1B,图1B为本申请实施例提供的一种Binder通信架构示意图。
[0052] Binder通信采用C/S架构,从组件视角来说,包含Client、Server、Service Manager以及Binder驱动。
[0053] 其中,Client进程是指使用服务的进程;Server进程是指提供服务的进程;Service Manager进程用于管理系统中的各种服务,其作用是将字符形式的Binder名字转
化成Client中对该Binder的引用,使得Client能够通过Binder名字获得对Server中Binder
实体的引用;Binder驱动负责进程之间Binder通信的建立,在具体的通信过程中做中转,比如需要传递的数据,通过Binder驱动在两个进程间传递。
[0054] 图中Client、Server、Service Manage之间的相互通信都是基于Binder机制。既然基于Binder机制通信,那么同样也是C/S架构,则图中的3个步骤都有相应的Client端与Server端。
[0055] 注册服务:Server进程要先注册Service到Service Manager。该过程中Server是客户端,Service Manager是服务端。
[0056] 获取服务:Client进程使用某个Service前,须先向Service Manager中获取相应的Service。该过程中Client是客户端,Service Manager是服务端。
[0057] 使用服务:Client根据得到的Service信息建立与Service所在的Server进程通信的通路,然后就可以直接与Service交互。该过程:Client是客户端,Server是服务端。
[0058] 图中的Client,Server,Service Manager之间不是直接交互的,而是都通过与Binder驱动进行交互的,从而实现IPC通信。其中Binder驱动位于内核空间,Client,
Server,Service Manager位于用户空间。Binder驱动和Service Manager可以看作是
Android平台的基础架构,而Client和Server是Android的应用层,开发人员只需自定义实
现Client、Server端,借助Android的基本平台架构便可以直接进行IPC通信。
[0059] 为了使本技术领域的人员更清楚地理解本申请的方案,下面首先说明本申请技术方案的应用场景。
[0060] 目前,Android系统绝大多数的跨进程通信都是利用Binder IPC机制实现的。采用Android系统的终端产品的性能是有限的,当用户不断启动新的应用,使得后台高负载、多任务并发时,在进行跨进程通信的时候,会发生互斥锁竞争,导致通信时间变长,造成前台应用卡顿和响应时间变长等问题,影响用户体验。
[0061] 参见图1C,图1C为本申请实施例提供的一种互斥锁的应用场景示意图。
[0062] 互斥锁mutex为Linux系统提供的,每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。
[0063] 同一时刻,只能有一个线程持有该锁,通过“锁”就将资源的访问变成互斥操作,如此可以避免数据访问的混乱。
[0064] 图1C中的线程T1想要访问共享资源,首先需要对共享资源进行加锁操作,成为共享资源互斥锁的持有者,之后T1才能对共享资源进行访问;并且在访问完成后,释放互斥
锁。如果线程T2在T1访问共享资源的过程中,也想实现对共享资源的访问,由于共享资源的互斥锁为线程T1持有,线程T2只能等待线程T1访问完成并释放互斥锁以后才能对共享资源
进行访问。
[0065] 目前,安卓系统在执行线程时,通常按照预先分配好的CPU内核以及CPU运行频率执行该线程对应的程序代码。但是,电子设备的性能是有限的,当用户不断启动新的应用,使得设备后台系统高负载、多任务并发时,在进行跨进程通信的时候,如果多个进程需要访问同一个共享资源,则会发生互斥锁竞争。
[0066] 例如,执行线程A时,可能出现线程A访问的共享资源的互斥锁被线程B占用的情况,需要先执行线程B,待线程B释放互斥锁后才能继续执行线程A;在执行线程B的时候,还有可能出现线程B需要访问的共享资源的互斥锁被线程C占用的情况,同样需要先执行线程
C,待线程C释放互斥锁之后再继续执行线程B。也即多个线程中存在互斥锁的嵌套占用情
况。
[0067] 而由于执行各个线程的CPU内核以及CPU运行频率已经被预先分配,因此在互斥锁竞争时会产生较长时间的阻塞,导致通信时间变长,造成前台应用卡顿和响应时间变长等
问题,影响用户体验。
[0068] 有鉴于此,本申请实施例提供一种线程调度方法,可应用于电子设备。应用于多个线程之间存在互斥锁竞争的场景,本申请提供的方案通过确定出当前线程依赖的互斥锁的最终持有者线程,并优先为当前线程依赖的互斥锁的最终持有者线程分配资源以提升执行
速度,加快互斥锁的释放。对应于以上的示例,也即优先为线程C分配运行资源,提高线程C的运行速度,待线程C释放互斥锁B后,再优先为线程B分配运行资源以提高线程B的运行速
度;待线程B释放互斥锁A后,继续执行线程A,如此通过依次优先调度互斥锁的最终持有者线程,提高了线程的运行速度,加快了互斥锁的释放,减少了线程A的等待时间,缩短了应用响应时间,显著缓解了应用响应卡顿的问题。
[0069] 在一些实施例中,电子设备可以是手机、平板电脑、桌面型、膝上型、笔记本电脑、超级移动个人计算机(Ultra‑mobile Personal Computer,UMPC)、手持计算机、上网本、个人数字助理(Personal Digital Assistant,PDA)、可穿戴电子设备、智能手表等设备,本申请对上述电子设备的具体形式不做特殊限制。在本实施例中,电子设备的结构可以如图1D所示,图1D为本申请实施例提供的一种电子设备的结构示意图。
[0070] 电子设备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等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
[0071] 可以理解的是,本发明实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
[0072] 处理器110可以包括一个或多个处理单元,多个处理单元用于执行处理各种任务的线程。例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processing unit,GPU),图像信号处理器(image signal 
processor,ISP),控制器,视频编解码器,数字信号处理器(digitalsignal processor,DSP),基带处理器,和/或神经网络处理器(neural‑network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
[0073] 控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
[0074] 处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令
或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
[0075] 在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter‑integrated circuit,I2C)接口,集成电路内置音频(inter‑integratedcircuit sound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口
(mobile industryprocessor interface,MIPI),通用输入输出(general‑purpose input/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universalserial bus,USB)接口等。
[0076] I2C接口是一种双向同步串行总线,包括一根串行数据线(serial data line,SDA)和一根串行时钟线(derail clock line,SCL)。在一些实施例中,处理器110可以包含多组I2C总线。处理器110可以通过不同的I2C总线接口分别耦合触摸传感器180K,充电器,闪光灯,摄像头193等。例如:处理器110可以通过I2C接口耦合触摸传感器180K,使处理器
110与触摸传感器180K通过I2C总线接口通信,实现电子设备100的触摸功能,用户可以利用电子设备100的触摸功能发起调用与用户交互事件相关的进程的请求,以完成与电子设备
的交互。
[0077] I2S接口可以用于音频通信。在一些实施例中,处理器110可以包含多组I2S总线。处理器110可以通过I2S总线与音频模块170耦合,实现处理器110与音频模块170之间的通
信。在一些实施例中,音频模块170可以通过I2S接口向无线通信模块160传递音频信号,发起调用相关进程的请求,以实现通过蓝牙耳机接听电话等功能。
[0078] PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过PCM总线接口耦合。在一些实施例中,音频模块170也可以通过PCM接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功
能。所述I2S接口和所述PCM接口都可以用于音频通信。
[0079] UART接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,UART接口通常被用
于连接处理器110与无线通信模块160。例如:处理器110通过UART接口与无线通信模块160
中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过UART接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。
[0080] MIPI接口可以被用于连接处理器110与显示屏194,摄像头193等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI),显示屏串行接口(display 
serial interface,DSI)等。在一些实施例中,处理器110和摄像头193通过CSI接口通信,用于发起实现拍摄的进程,以实现电子设备100的拍摄功能。处理器110和显示屏194通过DSI
接口通信,实现电子设备100的显示功能。
[0081] GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器110与摄像头193,显示屏194,无线通信模块160,音频模块170,传感器模块180等。GPIO接口还可以被配置为I2C接口,I2S接口,UART接口,MIPI接口等。
[0082] USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备100充电,也可以用于电子设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如AR设备等。
[0083] 可以理解的是,本发明实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
[0084] 充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
[0085] 电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,显示屏
194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
[0086] 电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
[0087] 显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light‑emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active‑matrix 
organic light emittingdiode的,AMOLED),柔性发光二极管(flex light‑emitting 
diode,FLED),Miniled,MicroLed,Micro‑oLed,量子点发光二极管(quantumdot light emitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
[0088] NPU为神经网络(neural‑network ,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
[0089] 外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
[0090] 内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universalflash storage,UFS)等。处理器110通过运行存储在内部存储器121的指令,和/或存储在设置于处理器中的存储器的指令,执行电子设
备100的各种功能应用以及数据处理。
[0091] 按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信
号输入。
[0092] 马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏194不同区域的触摸操作,马达191也可对应不同的振动反馈效果。
不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。
[0093] 指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
[0094] 电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本发明实施例以分层架构的Android系统为例,示例性说明电子设备100的软件结构。
[0095] 参见图2,图2为本申请实施例提供的一种电子设备100的软件结构框图。
[0096] 分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
[0097] 应用程序层可以包括一系列应用程序包。
[0098] 如图2所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
[0099] 应用程序框架层为应用程序层的应用程序提供应用编程接口(application programming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
[0100] 如图2所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
[0101] 窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
[0102] 内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
[0103] 视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
[0104] 电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
[0105] 资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
[0106] 通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通
知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
[0107] Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
[0108] 核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
[0109] 应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
[0110] 系统库可以包括多个功能模块。例如:表面1管理器(surface manager),媒体库(Media Libraries),三维图形处理库(例如:OpenGL ES),二维图形引擎(例如:SGL)等。
[0111] 表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
[0112] 媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如: MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
[0113] 三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。
[0114] 二维图形引擎是二维绘图的绘图引擎。
[0115] 内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动,Binder驱动。
[0116] Binder驱动负责进程之间Binder通信的建立,在具体的通信过程中做中转,需要传递的数据,通过Binder驱动在两个进程间传递。
[0117] 下面结合线程调度场景,示例性说明电子设备100软件以及硬件的工作流程。
[0118] 参见图3,图3为本申请实施例提供的一种用户使用电子设备的显示屏的界面示意图。
[0119] 当用户点击视频的图标时,与用户交互的事件为播放视频等操作,处理器需要响应这一交互事件,处理器中需要执行与用户交互的事件的线程,在处理与用户交互的事件
的线程的过程中,该线程会获取相关的共享资源,当相关的共享资源被占用时,本申请实施例提供的方法可以优先执行占用相关共享资源的线程,以缩短处理与用户交互的事件的线
程获取相关共享资源的时间,减少电子设备出现前台应用卡顿和响应时间长的问题。
[0120] 下面以两个线程之间存在互斥锁竞争为例,详细介绍本申请实施例提供的方案。
[0121] 参见图4A,图4A为本申请实施例提供的一种线程调度方法的时序图,具体包括以下步骤:
[0122] S401、线程A被处理器启动并调度,用于执行用户交互事件。
[0123] 当用户控制电子设备,发起某一交互事件时,电子设备中的处理器会发起用于执行用户交互事件中相关任务的线程来处理该事件,以做出对该事件的响应,将用于执行用
户交互事件中相关任务的线程中的某一个线程用线程A表示,线程A即为第一线程。
[0124] 例如,如图3所示,用户点击视频图标后,处理器会发起用于播放视频的线程,用于播放视频的线程包括UI主线程和子线程等线程。一个Android程序开始运行的时候,会单独启动一个进程(process)。一个Android程序默认只有一个process,但一个process下可以有多个线程(thread)。
[0125] 在多个thread中,一个thread我们称之为UI Thread。UI Thread在Android程序运行的时候就被创建,是一个process中的主线程(Main thread)。UI Thread主要负责控制UI界面的显示,更新和控件交互。在Android程序创建之初,一个process呈现的是单线程模
型,所有的任务都在一个线程中运行。因此,UIThread所执行的每一个函数,所花费的时间越短越好。而其他比较耗费时间的工作,例如访问网络,下载数据等,都应交给其他子线程去执行,避免阻塞主线程。
[0126] S402、线程A与其他线程B发生互斥锁竞争时,进入阻塞等待状态。
[0127] 当线程A与线程B发生互斥锁争夺时,由于线程B先于线程A持有互斥锁,故线程B继续执行,线程A进入阻塞等待状态。线程B即为第二线程。
[0128] 线程A与线程B发生互斥锁争夺是由于线程A和线程B在同一时间段内访问同一共享资源,而同一共享资源同一时间只支持一个线程对其访问,也就是持有互斥锁的线程B可以对其进行访问。只有线程B访问完成以后,释放互斥锁,线程A才可以访问。
[0129] S403、线程B被处理器加入动态资源调度队列,线程B的标识flag被标记为1,且线程B被优先调度。
[0130] 为了缩短线程A的响应等待时间,线程A需要缩短获取共享资源的时间,又因为线程B与线程A发生了互斥锁争夺,需要加快线程B的处理时间,才能使得线程A拥有互斥锁,获取到共享资源。
[0131] 基于此,线程B被处理器加入动态资源调度队列,并且处理器标记线程B的标识为第一标识,即flag=1。flag为1时,用于表示线程B需要加快线程的调度速度。
[0132] 为了加快调度线程B,需要将为线程B分配的运行资源由第一运行资源增加至第二运行资源。可以采用升高线程B调度的优先级,使得线程B可以优先进行调度。例如,可以将线程B的调度优先级由第一优先级调整至第二优先级,第二优先级高于第一优先级,如此可以加快线程B的运行速度。此处需要说明的一点是,第一优先级与第二优先级中的第一、第二,不是顺序上的第一、第二,只是用于区别不同的对象。
[0133] 在一些可能的实现方式中,为了加快调度线程B,还可以将线程B调整至处理器的大核上运行。其中,处理器通常为CPU。一个CPU中,默认大核的运行速度大于小核的运行速度,故将线程调整至大核运行,可以实现加快线程运行速度的目的。
[0134] 在一些可能的实现方式中,为了加快调度线程B,还可以将运行线程B的CPU的运行频率由第一运行频率提高至第二运行频率,第二运行频率大于第一运行频率。也就是提高
运行线程B的CPU的频率。提高了CPU的运行频率,就可以提高CPU中线程的运行速度,由此也可以实现提高线程运行速度的目的。
[0135] 相较于现有技术中线程的CPU内核以及CPU运行频率被预先分配的方案,本申请方案中通过为当前持有互斥锁的线程B优先分配资源,能够使线程B更快地完成执行,进而更
快的释放互斥锁。
[0136] S404、线程B释放互斥锁。
[0137] 线程B获取完共享资源后释放互斥锁。
[0138] S405、线程B被处理器从动态资源调度队列中移除,线程B的flag被标记为0。
[0139] 当线程B释放了互斥锁以后,可以将线程B移除动态资源调度队列,并将线程B标识置为第二标识,即flag=0。flag=0用于表示线程B不需要优先执行。如此可以将线程B的运行资源由第二运行资源调整至第一运行资源。例如可以将线程B的优先级由第二优先级调整
至第一优先级。
[0140] 在一些可能的实现方式中,当线程B的flag被置为0后,可以将线程B由大核调整至原来的内核上运行。
[0141] 在一些可能的实现方式中,当线程B的flag被置为0后,还可以将运行线程B的CPU的运行频率由第二运行频率调整至第一运行频率。
[0142] S406、线程A获取互斥锁,并访问共享资源。
[0143] 当线程B释放互斥锁后,线程A获取互斥锁,成为互斥锁的持有者,可以访问共享资源,由此线程A正常执行,完成相应的任务。
[0144] 此时,在一种可能的实现方式中,同样可以提高线程A的优先级,为线程A优先分配资源,以便加快线程A的处理速度;或者可以将线程A调整至大核上运行;还可以提高运行线程A的CPU的运行频率,以加快线程A的运行速度。
[0145] 在另一种可能的实现方式中,对于线程A,可以继续按照分配好的CPU内核以及CPU运行频率执行该线程A对应的程序代码。
[0146] 本申请实施例中,通过将与第一线程发生互斥锁争夺的第二线程加入动态资源调度队列,并对第二线程进行标记,以便对标记的第二线程进行调整优先级等处理,提高第二线程的运行速度,加快释放互斥锁,进而缩短了第一线程的阻塞时间,以使第一线程能够更快的访问资源,也即提升了第一线程被处理的速度,减少了应用响应卡顿和响应时间长的
问题。
[0147] 下面以两个以上的线程之间存在互斥锁竞争为例,介绍本申请实施例提供的方案。
[0148] 参见图4B,图4B为本申请实施例提供的另一种线程调度方法的时序图。
[0149] 其与图4A中的区别主要在于,本实施例中的线程B的互斥锁进一步被线程C所持有;线程C即为第三线程。为了表述方便,将第一线程需要获取的共享资源的互斥锁命名为锁A,将线程B需要获取的共享资源的互斥锁命名为锁B,也即此时锁B被线程C占用。该时序图包括以下步骤:
[0150] S401、线程A被处理器启动并调度,用于执行用户交互事件。
[0151] 当用户控制电子设备,发起某一交互事件时,电子设备中的处理器会发起用于执行用户交互事件中相关任务的线程来处理该事件,以做出对该事件的响应。将用于执行用
户交互事件中相关任务的线程中的某一个线程用线程A表示。
[0152] S402、线程A当与其他线程B发生互斥锁A竞争时,进入阻塞等待状态。
[0153] S403、线程B被处理器加入动态资源调度队列,线程B的标识flag被标记为1,且线程B被优先调度。
[0154] 为了加快调度线程B,可以采用将分配给线程B的运行资源由第一运行资源调整至第二运行资源,使得线程B可以优先进行调度。
[0155] 步骤S401‑S403可采用上一个实施例中的实现方式,在此不再赘述。
[0156] 在线程B的被优先调度的过程中,还包括以下的步骤。
[0157] S404、线程B当与线程C发生互斥锁B竞争时,进入阻塞等待状态。
[0158] 在线程B执行的过程中,可能会发生线程B需要获取的共享资源被其他线程占用着,无法继续执行的情况,例如被线程C占用着,即线程C与线程B发生互斥锁B争夺,由于线程C先于线程B持有互斥锁B,故线程C继续执行,线程B由优先调度的状态进入阻塞等待状
态。
[0159] 线程B与线程C发生互斥锁B争夺是由于线程B和线程C在同一时间段内访问同一共享资源,而同一共享资源同一时间只支持一个线程对其访问,也就是持有互斥锁B的线程C
可以对其进行访问。只有线程C访问完成以后,释放互斥锁B,线程B才可以访问。
[0160] S405、线程C被处理器加入动态资源调度队列,线程C的标识flag被标记为1,且线程C被优先调度。
[0161] 为了缩短线程B的响应等待时间,需要缩短线程B获取共享资源的时间,又因为线程C与线程B发生了互斥锁争夺,需要加快线程C的处理时间,才能使得线程B拥有互斥锁B,获取到共享资源。基于此,处理器将线程C加入动态资源调度队列,并标记线程C的标识为第一标识,即flag=1,flag=1用于表示线程C需要加快线程的调度速度。为了加快调度线程C,可以采用将线程C的运行资源由第三运行资源增加至第四运行资源,如此可以加快线程C的
运行速度。例如,可以升高线程C调度的优先级,使得线程C可以优先进行调度。
[0162] 在一些可能的实现方式中,还可以将线程C调整至CPU的大核上运行,由此也可以提高线程C的运行速度。
[0163] 在一些可能的实现方式中,还可以采用提高运行线程C的CPU的运行频率的方式,来提高线程C的运行速度。相较与现有技术中线程的CPU内核以及CPU运行频率被预先分配
的方案,本申请方案中通过为当前持有互斥锁的线程C优先分配资源,能够使线程C更快地
完成执行,进而更快的释放互斥锁。
[0164] S406、线程C释放互斥锁B。
[0165] 线程C获取完共享资源后释放互斥锁B。该共享资源为线程B与线程C共同访问的共享资源。
[0166] S407、线程C被处理器移除动态资源调度队列,线程C的flag标识被置为0。
[0167] 当线程C释放了互斥锁B以后,可以将线程C移除动态资源调度队列,并将线程C的标识置为第二标识,即置flag=0,flag=0用于表示线程C并不需要优先执行,如此可以将线程C的运行资源由第四运行资源调整至第三运行资源。例如,可以将线程C的优先级调整至
原来的优先级。
[0168] 在一些可能的实现方式中,还可以将线程C调整至原来的内核上运行。
[0169] 在一些可能的实现方式中,还可以将运行线程C的CPU的运行频率调整至原来的运行频率。
[0170] S408、线程B获取互斥锁B后,解除阻塞状态,获取共享资源,继续执行任务。
[0171] 当线程C释放互斥锁B后,线程B获取互斥锁B后,成为互斥锁B的拥有者,由阻塞状态转变为运行状态,可以访问共享资源,由此可以继续执行线程B,完成相应的任务。
[0172] S409、线程B释放互斥锁A。
[0173] 线程B获取完共享资源后释放互斥锁A,该共享资源为线程A与线程B共同访问的共享资源。
[0174] S410、线程B被移除动态资源调度队列,并且线程B的flag被置为0。
[0175] 当线程B释放了互斥锁A以后,可以将线程B移除动态资源调度队列,并将线程B的标识置为第二标识,即将flag置为0,flag=0用于表示线程B并不需要优先执行,如此可以将线程B的运行资源调整至原来的运行资源。
[0176] S411、线程A获取互斥锁A,访问共享资源。
[0177] 当线程B释放互斥锁A后,线程A获取互斥锁A,成为互斥锁A的拥有者,可以访问共享资源,由此线程A可以继续执行,完成相应的任务。
[0178] 此时,在一种可能的实现方式中,同样可以增加线程A的运行资源,以便加快线程A的处理速度。具体增加运行资源的方式可以参见上述实施例,在此不再赘述。
[0179] 在另一种可能的实现方式中,对于线程A,可以继续按照分配好的CPU内核以及CPU运行频率执行该线程A对应的程序代码。
[0180] 在一些实施例中,在第三线程持有第二线程的互斥锁,并且第三线程与其他n个线程间还存在互斥锁竞争的情况时,为了加快释放第二线程依赖的互斥锁,可以采用以下实
现方式:
[0181] 首先确定第三线程与其它n个线程间的互斥锁持有关系,该持有关系为第i线程持有第i‑1线程依赖的互斥锁i‑1,所述i= n+3,…,4;n为正整数。本实施例以n=1为例进行说明。
[0182] n=1时,i=4,i‑1=3,2i‑2=6,2i‑3=5,2i‑4=4。第三线程与其它n个线程间的互斥锁持有关系为:第4线程持有第3线程依赖的互斥锁3。在i‑1=3的情况下,本实施例中的第3线程与第三线程指代的是同一个线程,为了表述方便,在本实施例中用第3线程进行叙述。
[0183] 第3线程的互斥锁3被第4线程占用着,第3线程由运行状态转变为阻塞状态,为了加快互斥锁3的释放时间,需要缩短第4线程占用互斥锁3的时间,由此需要加快第4线程的
运行速度。同样可以将第4线程加入动态资源调度队列,并将第4线程的标识设为第一标识,用于表征第4线程需要优先进行调度。由此可以将为第4线程分配的运行资源由第5(2i‑3)运行资源增加至第6(2i‑2)运行资源。也就是提高第4线程的运行速度。
[0184] 具体提高第4线程的运行速度的方式可以参见前述实施例中的方式,在此不再赘述。
[0185] 待第4线程完成访问对应的共享资源后,释放第3线程依赖的互斥锁3后,处理器将第4线程移出动态资源调度队列,并将第4线程的标识置为第二标识,用于表征第4线程不需要进行优先调度;并根据第二标识,将第4线程的运行资源由第6(2i‑2)运行资源调整至第5(2i‑3)运行资源。
[0186] 当第4线程释放互斥锁3后,第3线程成为互斥锁3的持有者线程,处理器将第3线程的运行资源增加至第4(2i‑4)运行资源。本实施例中的第4运行资源与上述实施例中的第四运行资源指代的是同一个运行资源,只是表述不一样。然后依据上述实施例介绍的调度第3线程的方式继续调度第3线程,直至最终释放第一线程的互斥锁。
[0187] 需要说明的一点是,本实施例中的序号i,i‑1,2i‑2,2i‑3,2i‑4等只是用来区别不同对象,而不是用于限定特定顺序。
[0188] 本申请实施例提供的方案,用于当后台高负载、多任务并发时,在进行跨进程通信的时候,可能会发生多重互斥锁竞争的情况,对于加快第一线程的运行速度的实现方式,可以首先判断出占用第一线程访问的共享资源的互斥锁的最终持有线程,标记该线程,并增加分配给该线程的运行资源,以加快该线程的运行速度,以加快释放占用的互斥锁的速度。
然后接着加快执行相对于第一线程访问的共享资源的互斥锁的最终持有线程,最终以实现
加快释放第一线程依赖的互斥锁,以减少第一线程的等待时间,进而减少了应用出现卡顿
及响应速度慢的问题。
[0189] 本实施例还提供了一种电子设备,该电子设备包括:处理器和存储器;
[0190] 在存储器中存储有一个或多个计算机程序,一个或多个计算机程序包括指令;当指令被处理器执行时,使得电子设备执行上述实施例描述的线程调度的方法。
[0191] 本实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中包括指令,当上述指令在电子设备上运行时,使得该电子设备执行上述实施例描述的相关方法步
骤,以实现上述实施例中描述的线程调度的方法。
[0192] 本申请实施例提供的方案中,主要采用以下几个步骤实现线程的调度:
[0193] 在第一线程进入阻塞状态后,确定持有第一线程依赖的互斥锁的第二线程。
[0194] 首先需要确定占用第一线程依赖的互斥锁的持有者线程,也就是第二线程。
[0195] 将为第二线程分配的运行资源由第一运行资源增加至第二运行资源。
[0196] 将为第二线程分配的运行资源由第一运行资源增加至第二运行资源,也就是提高第二线程的运行速度。
[0197] 待第二线程完成访问对应的共享资源后,释放第一线程依赖的互斥锁,并将为第二线程分配的运行资源恢复为第一运行资源。
[0198] 当第二线程释放了第一线程依赖的互斥锁以后,就不需要加快第二线程的运行速度了,由此可以将第二线程分配的运行资源恢复为第一运行资源。
[0199] 继续执行所述第一线程。
[0200] 当第一线程获取到互斥锁以后,处理器可以继续执行第一线程。
[0201] 由于在第二线程占用第一线程的互斥锁时加快执行第二线程,也就是加快了第二线程释放互斥锁,由此进一步缩短了第一线程的等待时间,减少了应用出现卡顿及响应速
度慢的问题。
[0202] 应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“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可以是单个,也可以是多个。
[0203] 以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。