CN114816748A - 线程调度方法、装置、电子设备和存储介质 - Google Patents
线程调度方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN114816748A CN114816748A CN202210429634.3A CN202210429634A CN114816748A CN 114816748 A CN114816748 A CN 114816748A CN 202210429634 A CN202210429634 A CN 202210429634A CN 114816748 A CN114816748 A CN 114816748A
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- target
- priority
- executed
- 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/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
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/482—Application
-
- 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)
- Stored Programmes (AREA)
Abstract
本公开关于线程调度方法、装置、电子设备和存储介质,包括:响应于用户的操作指令,启动目标应用程序;在目标应用程序的运行过程中,确定目标应用程序对应的多个线程中每个线程在当前运行场景下的线程类型;基于每个线程在当前运行场景下的线程类型,对每个线程的优先级进行调整,其中,线程类型包括与当前运行场景对应的目标线程和非目标线程,每个运行场景被预先注册有各自对应的目标线程以及利用目标线程执行的目标任务。这样,在目标应用程序的运行过程中,可以基于每个线程在当前运行场景下的线程类型,对每个线程的优先级进行调整,避免出现比较重要的任务所在的线程被其他更高优先级的线程抢占而执行过慢的情况,程序运行效果较好。
Description
技术领域
本公开涉及计算机技术领域,更具体地说,涉及线程调度方法、装置、电子设备和存储介质。
背景技术
线程是程序运行的基本单元,程序在运行过程中,可能有几十个线程在同时运行着,并且,每个设备在同一时刻分配给线程的时间片是有限的,根据线程的优先级的不同,每个线程会获得不同的时间片。同一优先级的线程被分配的时间片可以相同,低优先级的线程会被高优先级的线程抢占。
相关技术中,开发者只能指定线程的初始优先级,无法干预程序运行过程中线程的调度,而程序在运行过程中可能会动态的调整每个线程的优先级。此时,可能出现比较重要的任务所在的线程被其他更高优先级的线程抢占而执行过慢的情况,导致程序运行效果较差。
发明内容
本公开提供线程调度方法、装置、电子设备和存储介质,以至少解决上述相关技术中,程序运行效果较差的问题。
根据本公开实施例的第一方面,提供一种线程调度方法,包括:响应于用户的操作指令,启动目标应用程序;在所述目标应用程序的运行过程中,确定所述目标应用程序对应的多个线程中每个线程在当前运行场景下的线程类型;基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整,其中,所述线程类型包括与所述当前运行场景对应的目标线程和非目标线程,所述目标应用程序包含多个运行场景,每个运行场景被预先注册有各自对应的目标线程以及利用所述目标线程执行的目标任务。
可选地,所述基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整,包括:若所述每个线程在当前运行场景下的线程类型为非目标线程,且所述每个线程的优先级处于最高优先级,则降低优先级处于所述最高优先级的、且为当前运行场景下的非目标线程的优先级。
可选地,所述降低优先级处于所述最高优先级的、且为当前运行场景下的非目标线程的优先级,包括:按预定优先级顺序,将优先级处于所述最高优先级的、且为当前运行场景下的非目标线程的优先级降低一级。
可选地,在基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整的步骤之后,所述线程调度方法还包括:检测所述当前运行场景下是否存在待执行任务;在所述当前运行场景下存在待执行任务的情况下,确定所述待执行任务的任务类型;根据所述待执行任务的任务类型,从所述多个线程中选择一个线程执行所述待执行任务。
可选地,所述根据所述待执行任务的任务类型,从所述多个线程中选择一个线程执行所述待执行任务,包括:在所述待执行任务的任务类型为用户界面UI任务的情况下,选择所述多个线程中的主线程执行所述UI任务。
可选地,所述根据所述待执行任务的任务类型,从所述多个线程中选择一个线程执行所述待执行任务,包括:在所述待执行任务的任务类型为输入输出IO任务的情况下,从所述多个线程中选择优先级最高的一个子线程执行所述IO任务。
可选地,所述根据所述待执行任务的任务类型,从所述多个线程中选择一个线程执行所述待执行任务,包括:在所述待执行任务的任务类型为中央处理器CPU密集任务的情况下,检测所述多个线程中是否存在空余的用于处理CPU密集任务的子线程;若所述多个线程中存在空余的用于处理CPU密集任务的子线程,则利用该空余的用于处理CPU密集任务的子线程执行所述CPU密集任务;否则,控制所述待执行任务进行排队等待,直至所述多个线程中存在空余的用于处理CPU密集任务的子线程执行所述待执行任务。
可选地,所述线程调度方法还包括:在所述当前运行场景对应的锁函数被触发的情况下,从所述多个线程中查找持有所述锁函数的线程;调高所述持有所述锁函数的线程的优先级为最高优先级。
根据本公开实施例的第二方面,提供一种线程调度装置,包括:启动模块,被配置为响应于用户的操作指令,启动目标应用程序;线程类型确定模块,被配置为在所述目标应用程序的运行过程中,确定所述目标应用程序对应的多个线程中每个线程在当前运行场景下的线程类型;调整模块,被配置为基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整,其中,所述线程类型包括与所述当前运行场景对应的目标线程和非目标线程,所述目标应用程序包含多个运行场景,每个运行场景被预先注册有各自对应的目标线程以及利用所述目标线程执行的目标任务。
根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现根据本公开的线程调度方法。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行根据本公开的线程调度方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据本公开的线程调度方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
在目标应用程序的运行过程中,可以基于每个线程在当前运行场景下的线程类型,对每个线程的优先级进行调整,避免出现比较重要的任务所在的线程被其他更高优先级的线程抢占而执行过慢的情况,程序运行效果较好。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是示出根据本公开的示例性实施例的一种线程调度方法的流程图;
图2是示出根据本公开的示例性实施例的一种线程调度方法的具体实施方案的流程图;
图3是示出根据本公开的示例性实施例的一种线程调度装置的框图;
图4是示出根据本公开的示例性实施例的一种电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在此需要说明的是,在本公开中出现的“若干项之中的至少一项”均表示包含“该若干项中的任意一项”、“该若干项中的任意多项的组合”、“该若干项的全体”这三类并列的情况。例如“包括A和B之中的至少一个”即包括如下三种并列的情况:(1)包括A;(2)包括B;(3)包括A和B。又例如“执行步骤一和步骤二之中的至少一个”,即表示如下三种并列的情况:(1)执行步骤一;(2)执行步骤二;(3)执行步骤一和步骤二。
图1是示出根据本公开的示例性实施例的一种线程调度方法的流程图。
参照图1,在步骤101中,响应于用户的操作指令,可以启动目标应用程序。例如,用户可以用手指点击终端上的目标应用程序的图标,进而可以启动目标应用程序。
在步骤102中,在目标应用程序的运行过程中,可以确定目标应用程序对应的多个线程中每个线程在当前运行场景下的线程类型。其中,线程类型可以包括与当前运行场景(scene)对应的目标线程和非目标线程,目标应用程序可以包含多个运行场景,每个运行场景可以被预先注册有各自对应的目标线程以及利用目标线程执行的目标任务。
例如,目标应用程序可以包含依次运行的3个运行场景,分别为主题界面运行场景、请求数据运行场景和播放视频运行场景。
在主题界面运行场景中,需要向用户展示目标应用程序的主题界面,此时用户界面(User Interface,UI)任务为主要的任务,即渲染主题界面的任务为主要的任务,可以为主题界面运行场景注册用户界面(UI)任务为该运行场景下的目标任务,以及注册用于处理用户界面(UI)任务的主线程为该运行场景下的目标线程。
在请求数据运行场景中,需要拉取数据,此时输入输出(Input Output,IO)任务为主要的任务,即收发数据的任务为主要的任务,可以为请求数据运行场景注册输入输出(IO)任务为该运行场景下的目标任务,以及注册用于处理输入输出(IO)任务的子线程为该运行场景下的目标线程。
在播放视频运行场景中,需要对拉取到的视频帧进行解码,此时中央处理器(Central Processing Unit,CPU)密集任务为主要的任务,即解码视频帧的任务为主要的任务,可以为播放视频运行场景注册解码视频帧的任务为该运行场景下的目标任务,以及注册用于解码视频帧的子线程为该运行场景下的目标线程。
在步骤103中,可以基于每个线程在当前运行场景下的线程类型,对每个线程的优先级进行调整。
根据本公开的示例性实施例,在多个线程中存在与当前运行场景对应的目标线程的情况下,可以将目标线程的优先级调整为多个线程的优先级中的最高优先级。例如,在当前运行场景为主题界面运行场景时,可以将该主题界面运行场景对应的用于处理用户界面(UI)任务的主线程的优先级调整为最高优先级;在当前运行场景为请求数据运行场景时,可以将该请求数据运行场景对应的用于处理输入输出(IO)任务的子线程的优先级调整为最高优先级;在当前运行场景为播放视频运行场景时,可以将该播放视频运行场景对应的用于解码视频帧的子线程的优先级调整为最高优先级。这样,通过将与当前运行场景对应的目标线程的优先级调整为多个线程的优先级中的最高优先级,可以保证当前运行场景下的目标任务可以被高优执行,即可以保证当前运行场景下的核心任务可以被优先执行,避免出现当前运行场景下的核心任务所在的目标线程被其他更高优先级的线程抢占而执行过慢的情况,程序运行效果较好。
根据本公开的示例性实施例,需要说明的是,如果存在优先级处于最高优先级的非目标线程,目标线程与这些最高优先级的非目标线程相比不再具有优先优势,会导致目标线程被分配到的时间片的减少。因此,如果每个线程在当前运行场景下的线程类型为非目标线程,且每个线程的优先级处于最高优先级,则可以降低优先级处于最高优先级的、且为当前运行场景下的非目标线程的优先级,保证目标线程成为唯一一个最高优先级的线程,这样可以避免最高优先级的非目标线程与目标线程抢夺时间片,可以保证目标线程上的目标任务尽可能快的执行完。
根据本公开的示例性实施例,需要说明的是,线程的优先级可以包含4个等级,分别为background、low、default和high,并且这4个等级逐级升高,即background为最低优先级,high为最高优先级。可以按预定优先级顺序,将优先级处于最高优先级的、且为当前运行场景下的非目标线程的优先级降低一级,即可以将优先级处于最高优先级high的非目标线程的优先级降低一级,即降为default。
根据本公开的示例性实施例,可以检测当前运行场景下是否存在待执行任务。在当前运行场景下存在待执行任务的情况下,可以确定待执行任务的任务类型。然后,可以根据待执行任务的任务类型,从多个线程中选择一个线程执行待执行任务。
根据本公开的示例性实施例,任务类型可以包括用户界面(UI)任务、输入输出(IO)任务和中央处理器(CPU)密集任务中的至少一个。其中,用户界面(UI)任务为对用户界面进行渲染的任务,即用户界面(UI)任务为对应用程序的主题界面进行渲染的任务;输入输出(IO)任务为收发数据的任务,中央处理器(CPU)密集任务为需要CPU持续进行计算的任务,例如,中央处理器(CPU)密集任务可以为解码视频帧的任务。
根据本公开的示例性实施例,在待执行任务的任务类型为用户界面(UI)任务的情况下,可以选择多个线程中的主线程执行用户界面(UI)任务。
根据本公开的示例性实施例,在待执行任务的任务类型为输入输出(IO)任务的情况下,可以从多个线程中选择优先级最高的一个子线程执行输入输出(IO)任务。需要说明的是,由于输入输出(IO)任务不会占用线程的时间片,因此不需要控制线程并发数。
根据本公开的示例性实施例,在待执行任务的任务类型为中央处理器(CPU)密集任务的情况下,中央处理器(CPU)密集任务的执行情况与CPU的核心数相关。例如,CPU的核心数可以为4,但是只有2个活跃核心,如果出现3,4个中央处理器(CPU)密集任务待处理,超过CPU的活跃核心数2,此时,每个中央处理器(CPU)密集任务均会抢夺时间片,一个CPU的活跃核心无法一直计算一个中央处理器(CPU)密集任务,导致每个中央处理器(CPU)密集任务均无法完整执行。
为了解决上述问题,本公开的线程调度方法,在待执行任务的任务类型为中央处理器(CPU)密集任务的情况下,可以检测多个线程中是否存在空余的用于处理CPU密集任务的子线程。如果多个线程中存在空余的用于处理CPU密集任务的子线程,则可以利用该空余的用于处理CPU密集任务的子线程执行CPU密集任务;如果多个线程中不存在空余的用于处理CPU密集任务的子线程,此时若强行执行该新检测到的CPU密集任务,就会删减其他正在执行的任务的时间片,导致其他正在执行的任务无法完整执行。因此,可以控制待执行任务进行排队等待,直至多个线程中存在空余的用于处理CPU密集任务的子线程执行该待执行任务。
根据本公开的示例性实施例,在当前运行场景对应的锁函数被触发的情况下,可以从多个线程中查找持有锁函数的线程。接下来,可以调高持有锁函数的线程的优先级为最高优先级。例如,在当前运行场景为播放视频运行场景时,用于解码视频帧的子线程为目标线程,即此时解码视频帧的子线程处于高优执行状态。如果播放视频运行场景的锁函数被触发,此时用于解码视频帧的子线程就会被暂停(block),等待持有播放视频运行场景的锁函数的线程放开对锁函数的持有之后,解码视频帧的子线程才能继续运行。因此,可以调高持有锁函数的线程的优先级为最高优先级,使持有锁函数的线程尽可能快的执行完毕,可以保证被block的目标线程尽快恢复运行。
根据本公开的示例性实施例,多个运行场景中的每个运行场景对应的锁函数被预先添加有钩子(hook)函数。其中,钩子(hook)函数用于在锁函数被触发的情况下,指示多个线程中持有锁函数的线程。这样,通过为多个运行场景中的每个运行场景对应的锁函数预先添加钩子(hook)函数的方式,在某个运行场景对应的锁函数被触发的情况下,可以通过该运行场景预先添加的钩子(hook)函数得知持有锁函数的线程到底为哪个线程,进而可以调高持有锁函数的线程的优先级为最高优先级,使持有锁函数的线程尽可能快的执行完毕,即使持有锁函数的线程尽可能快的放开对锁函数的持有,可以保证因锁函数的触发导致被block的目标线程尽快恢复运行。
图2是示出根据本公开的示例性实施例的一种线程调度方法的具体实施方案的流程图。
参照图2,本公开的线程调度方法的具体实施方案可以包含4个部分,分别为注册部分、线程调度部分、线程池调度部分和触发锁函数部分。
在步骤201,注册需要调度的线程到指定的场景,即为不同的场景注册各自对应的目标线程。
在步骤202,注册需要执行的任务到指定的场景,即为不同的场景注册各自对应的目标任务。其中,目标任务为利用相应场景下的目标线程执行的任务。
在步骤203,为不同的场景下的锁函数添加钩子(hook)函数。
在步骤204,用户启动应用程序之后,在应用程序运行的过程中,触发运行场景。
在步骤205,判断当前运行场景下是否有需要调度的线程。
在步骤206,在当前运行场景下有需要调度的线程时,遍历应用程序的所有线程,找到当前运行场景对应的目标线程。
在步骤207,调整当前运行场景下目标线程的优先级为可以调度的最高优先级。
在步骤208,判断当前运行场景下是否有高CPU占用的非目标线程。
在步骤209,在当前运行场景下有高CPU占用的非目标线程时,调低高CPU占用的非目标线程的优先级。
在步骤2010,判断当前运行场景下是否有待执行任务。
在步骤2011,在当前运行场景下有待执行任务时,提交该待执行任务至线程池。
在步骤2012,判断待执行任务的任务类型。
在步骤2013,在待执行任务为用户界面(UI)任务时,派发至应用程序的主线程执行。
在步骤2014,在待执行任务为输入输出(IO)任务时,派发至优先级最高的子线程执行。
在步骤2015,在待执行任务为中央处理器(CPU)密集任务时,如果当前运行场景下存在空余的用于处理CPU密集任务的子线程,则将检测到的中央处理器(CPU)密集任务派发至空余的用于处理CPU密集任务的子线程执行。
在步骤2016,触发了当前运行场景对应的锁函数,导致当前运行场景下的目标线程被block。
在步骤2017,查找(check)当前运行场景下持有锁函数的线程为哪个线程。
在步骤2018,调高持有锁函数的线程的优先级为最高优先级。
图3是示出根据本公开的示例性实施例的一种线程调度装置的框图。
参照图3,该装置300可包括启动模块301、线程类型确定模块302和调整模块303。
启动模块301响应于用户的操作指令,可以启动目标应用程序。例如,用户可以用手指点击终端上的目标应用程序的图标,进而可以启动目标应用程序。
在目标应用程序的运行过程中,线程类型确定模块302可以确定目标应用程序对应的多个线程中每个线程在当前运行场景下的线程类型。其中,线程类型可以包括与当前运行场景(scene)对应的目标线程和非目标线程,目标应用程序可以包含多个运行场景,每个运行场景可以被预先注册有各自对应的目标线程以及利用目标线程执行的目标任务。
例如,目标应用程序可以包含依次运行的3个运行场景,分别为主题界面运行场景、请求数据运行场景和播放视频运行场景。
在主题界面运行场景中,需要向用户展示目标应用程序的主题界面,此时用户界面(UI)任务为主要的任务,即渲染主题界面的任务为主要的任务,可以为主题界面运行场景注册用户界面(UI)任务为该运行场景下的目标任务,以及注册用于处理用户界面(UI)任务的主线程为该运行场景下的目标线程。
在请求数据运行场景中,需要拉取数据,此时输入输出(IO)任务为主要的任务,即收发数据的任务为主要的任务,可以为请求数据运行场景注册输入输出(IO)任务为该运行场景下的目标任务,以及注册用于处理输入输出(IO)任务的子线程为该运行场景下的目标线程。
在播放视频运行场景中,需要对拉取到的视频帧进行解码,此时中央处理器(CPU)密集任务为主要的任务,即解码视频帧的任务为主要的任务,可以为播放视频运行场景注册解码视频帧的任务为该运行场景下的目标任务,以及注册用于解码视频帧的子线程为该运行场景下的目标线程。
调整模块303可以基于每个线程在当前运行场景下的线程类型,对每个线程的优先级进行调整。
根据本公开的示例性实施例,在多个线程中存在与当前运行场景对应的目标线程的情况下,可以将目标线程的优先级调整为多个线程的优先级中的最高优先级。例如,在当前运行场景为主题界面运行场景时,可以将该主题界面运行场景对应的用于处理用户界面(UI)任务的主线程的优先级调整为最高优先级;在当前运行场景为请求数据运行场景时,可以将该请求数据运行场景对应的用于处理输入输出(IO)任务的子线程的优先级调整为最高优先级;在当前运行场景为播放视频运行场景时,可以将该播放视频运行场景对应的用于解码视频帧的子线程的优先级调整为最高优先级。这样,通过将与当前运行场景对应的目标线程的优先级调整为多个线程的优先级中的最高优先级,可以保证当前运行场景下的目标任务可以被高优执行,即可以保证当前运行场景下的核心任务可以被优先执行,避免出现当前运行场景下的核心任务所在的目标线程被其他更高优先级的线程抢占而执行过慢的情况,程序运行效果较好。
根据本公开的示例性实施例,需要说明的是,如果存在优先级处于最高优先级的非目标线程,目标线程与这些最高优先级的非目标线程相比不再具有优先优势,会导致目标线程被分配到的时间片的减少。因此,如果每个线程在当前运行场景下的线程类型为非目标线程,且每个线程的优先级处于最高优先级,则调整模块303可以降低优先级处于最高优先级的、且为当前运行场景下的非目标线程的优先级,保证目标线程成为唯一一个最高优先级的线程,这样可以避免最高优先级的非目标线程与目标线程抢夺时间片,可以保证目标线程上的目标任务尽可能快的执行完。
根据本公开的示例性实施例,需要说明的是,线程的优先级可以包含4个等级,分别为background、low、default和high,并且这4个等级逐级升高,即background为最低优先级,high为最高优先级。调整模块303可以按预定优先级顺序,将优先级处于最高优先级的、且为当前运行场景下的非目标线程的优先级降低一级,即可以将优先级处于最高优先级high的非目标线程的优先级降低一级,即降为default。
根据本公开的示例性实施例,线程调度装置300还可以包含检测模块、任务类型确定模块和选择模块。检测模块可以检测当前运行场景下是否存在待执行任务。在当前运行场景下存在待执行任务的情况下,任务类型确定模块可以确定待执行任务的任务类型。然后,选择模块可以根据待执行任务的任务类型,从多个线程中选择一个线程执行待执行任务。
根据本公开的示例性实施例,任务类型可以包括用户界面(UI)任务、输入输出(IO)任务和中央处理器(CPU)密集任务中的至少一个。其中,用户界面(UI)任务为对用户界面进行渲染的任务,即用户界面(UI)任务为对应用程序的主题界面进行渲染的任务;输入输出(IO)任务为收发数据的任务,中央处理器(CPU)密集任务为需要CPU持续进行计算的任务,例如,中央处理器(CPU)密集任务可以为解码视频帧的任务。
根据本公开的示例性实施例,选择模块还被配置为在待执行任务的任务类型为用户界面(UI)任务的情况下,可以选择多个线程中的主线程执行用户界面(UI)任务。
根据本公开的示例性实施例,选择模块还被配置为在待执行任务的任务类型为输入输出(IO)任务的情况下,可以从多个线程中选择优先级最高的一个子线程执行输入输出(IO)任务。需要说明的是,由于输入输出(IO)任务不会占用线程的时间片,因此不需要控制线程并发数。
根据本公开的示例性实施例,在待执行任务的任务类型为中央处理器(CPU)密集任务的情况下,中央处理器(CPU)密集任务的执行情况与CPU的核心数相关。例如,CPU的核心数可以为4,但是只有2个活跃核心,如果出现3,4个中央处理器(CPU)密集任务待处理,超过CPU的活跃核心数2,此时,每个中央处理器(CPU)密集任务均会抢夺时间片,一个CPU的活跃核心无法一直计算一个中央处理器(CPU)密集任务,导致每个中央处理器(CPU)密集任务均无法完整执行。
为了解决上述问题,本公开的线程调度方法,在待执行任务的任务类型为中央处理器(CPU)密集任务的情况下,选择模块还可以检测多个线程中是否存在空余的用于处理CPU密集任务的子线程。如果多个线程中存在空余的用于处理CPU密集任务的子线程,则可以利用该空余的用于处理CPU密集任务的子线程执行CPU密集任务;如果多个线程中不存在空余的用于处理CPU密集任务的子线程,此时若强行执行该新检测到的CPU密集任务,就会删减其他正在执行的任务的时间片,导致其他正在执行的任务无法完整执行。因此,可以控制待执行任务进行排队等待,直至多个线程中存在空余的用于处理CPU密集任务的子线程执行该待执行任务。
根据本公开的示例性实施例,线程调度装置300还可以包含查找模块和调高模块。在当前运行场景对应的锁函数被触发的情况下,查找模块可以从多个线程中查找持有锁函数的线程。接下来,调高模块可以调高持有锁函数的线程的优先级为最高优先级。例如,在当前运行场景为播放视频运行场景时,用于解码视频帧的子线程为目标线程,即此时解码视频帧的子线程处于高优执行状态。如果播放视频运行场景的锁函数被触发,此时用于解码视频帧的子线程就会被暂停(block),等待持有播放视频运行场景的锁函数的线程放开对锁函数的持有之后,解码视频帧的子线程才能继续运行。因此,可以调高持有锁函数的线程的优先级为最高优先级,使持有锁函数的线程尽可能快的执行完毕,可以保证被block的目标线程尽快恢复运行。
根据本公开的示例性实施例,多个运行场景中的每个运行场景对应的锁函数被预先添加有钩子(hook)函数。其中,钩子(hook)函数用于在锁函数被触发的情况下,指示多个线程中持有锁函数的线程。这样,通过为多个运行场景中的每个运行场景对应的锁函数预先添加钩子(hook)函数的方式,在某个运行场景对应的锁函数被触发的情况下,可以通过该运行场景预先添加的钩子(hook)函数得知持有锁函数的线程到底为哪个线程,进而可以调高持有锁函数的线程的优先级为最高优先级,使持有锁函数的线程尽可能快的执行完毕,即使持有锁函数的线程尽可能快的放开对锁函数的持有,可以保证因锁函数的触发导致被block的目标线程尽快恢复运行。
图4是示出根据本公开的示例性实施例的一种电子设备400的框图。
参照图4,电子设备400包括至少一个存储器401和至少一个处理器402,所述至少一个存储器401中存储有指令,当指令被至少一个处理器402执行时,执行根据本公开的示例性实施例的线程调度方法。
作为示例,电子设备400可以是PC计算机、平板装置、个人数字助理、智能手机、或其他能够执行上述指令的装置。这里,电子设备400并非必须是单个的电子设备,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。电子设备400还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子设备。
在电子设备400中,处理器402可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。
处理器402可运行存储在存储器401中的指令或代码,其中,存储器401还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,网络接口装置可采用任何已知的传输协议。
存储器401可与处理器402集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储器401可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储器401和处理器402可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器402能够读取存储在存储器中的文件。
此外,电子设备400还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。电子设备400的所有组件可经由总线和/或网络而彼此连接。
根据本公开的示例性实施例,还可提供一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行根据本公开的线程调度方法。这里的计算机可读存储介质的示例包括:只读存储器(ROM)、随机存取可编程只读存储器(PROM)、电可擦除可编程只读存储器(EEPROM)、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存、非易失性存储器、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、蓝光或光盘存储器、硬盘驱动器(HDD)、固态硬盘(SSD)、卡式存储器(诸如,多媒体卡、安全数字(SD)卡或极速数字(XD)卡)、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘以及任何其他装置,所述任何其他装置被配置为以非暂时性方式存储计算机程序以及任何相关联的数据、数据文件和数据结构并将所述计算机程序以及任何相关联的数据、数据文件和数据结构提供给处理器或计算机使得处理器或计算机能执行所述计算机程序。上述计算机可读存储介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,此外,在一个示例中,计算机程序以及任何相关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得计算机程序以及任何相关联的数据、数据文件和数据结构通过一个或多个处理器或计算机以分布式方式存储、访问和执行。
根据本公开的示例性实施例,还可提供一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现根据本公开的线程调度方法。
根据本公开的线程调度方法、装置、电子设备和存储介质,在目标应用程序的运行过程中,可以基于每个线程在当前运行场景下的线程类型,对每个线程的优先级进行调整,避免出现比较重要的任务所在的线程被其他更高优先级的线程抢占而执行过慢的情况,程序运行效果较好。进一步的,通过将与当前运行场景对应的目标线程的优先级调整为多个线程的优先级中的最高优先级,可以保证当前运行场景下的目标任务可以被高优执行,即可以保证当前运行场景下的核心任务可以被优先执行,避免出现当前运行场景下的核心任务所在的目标线程被其他更高优先级的线程抢占而执行过慢的情况,程序运行效果较好。进一步的,可以降低优先级处于最高优先级的非目标线程的优先级,使目标线程成为唯一一个最高优先级的线程,这样可以避免最高优先级的非目标线程与目标线程抢夺时间片,可以保证目标线程上的目标任务尽可能快的执行完。进一步的,可以调高持有锁函数的线程的优先级为最高优先级,使持有锁函数的线程尽可能快的执行完毕,可以保证被block的目标线程尽快恢复运行。进一步的,通过为多个运行场景中的每个运行场景对应的锁函数预先添加钩子(hook)函数的方式,在某个运行场景对应的锁函数被触发的情况下,可以通过该运行场景预先添加的钩子(hook)函数得知持有锁函数的线程到底为哪个线程,进而可以调高持有锁函数的线程的优先级为最高优先级,使持有锁函数的线程尽可能快的执行完毕,即使持有锁函数的线程尽可能快的放开对锁函数的持有,可以保证因锁函数的触发导致被block的目标线程尽快恢复运行。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种线程调度方法,其特征在于,包括:
响应于用户的操作指令,启动目标应用程序;
在所述目标应用程序的运行过程中,确定所述目标应用程序对应的多个线程中每个线程在当前运行场景下的线程类型;
基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整,其中,所述线程类型包括与所述当前运行场景对应的目标线程和非目标线程,所述目标应用程序包含多个运行场景,每个运行场景被预先注册有各自对应的目标线程以及利用所述目标线程执行的目标任务。
2.如权利要求1所述的线程调度方法,其特征在于,所述基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整,包括:
若所述每个线程在当前运行场景下的线程类型为非目标线程,且所述每个线程的优先级处于最高优先级,则降低优先级处于所述最高优先级的、且为当前运行场景下的非目标线程的优先级。
3.如权利要求2所述的线程调度方法,其特征在于,所述降低优先级处于所述最高优先级的、且为当前运行场景下的非目标线程的优先级,包括:
按预定优先级顺序,将优先级处于所述最高优先级的、且为当前运行场景下的非目标线程的优先级降低一级。
4.如权利要求1所述的线程调度方法,其特征在于,在基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整的步骤之后,所述线程调度方法还包括:
检测所述当前运行场景下是否存在待执行任务;
在所述当前运行场景下存在待执行任务的情况下,确定所述待执行任务的任务类型;
根据所述待执行任务的任务类型,从所述多个线程中选择一个线程执行所述待执行任务。
5.如权利要求4所述的线程调度方法,其特征在于,所述根据所述待执行任务的任务类型,从所述多个线程中选择一个线程执行所述待执行任务,包括:
在所述待执行任务的任务类型为用户界面UI任务的情况下,选择所述多个线程中的主线程执行所述UI任务。
6.如权利要求4所述的线程调度方法,其特征在于,所述根据所述待执行任务的任务类型,从所述多个线程中选择一个线程执行所述待执行任务,包括:
在所述待执行任务的任务类型为输入输出IO任务的情况下,从所述多个线程中选择优先级最高的一个子线程执行所述IO任务。
7.一种线程调度装置,其特征在于,包括:
启动模块,被配置为响应于用户的操作指令,启动目标应用程序;
线程类型确定模块,被配置为在所述目标应用程序的运行过程中,确定所述目标应用程序对应的多个线程中每个线程在当前运行场景下的线程类型;
调整模块,被配置为基于所述每个线程在当前运行场景下的线程类型,对所述每个线程的优先级进行调整,其中,所述线程类型包括与所述当前运行场景对应的目标线程和非目标线程,所述目标应用程序包含多个运行场景,每个运行场景被预先注册有各自对应的目标线程以及利用所述目标线程执行的目标任务。
8.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至6中任一项所述的线程调度方法。
9.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至6中任一项所述的线程调度方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的线程调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210429634.3A CN114816748A (zh) | 2022-04-22 | 2022-04-22 | 线程调度方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210429634.3A CN114816748A (zh) | 2022-04-22 | 2022-04-22 | 线程调度方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114816748A true CN114816748A (zh) | 2022-07-29 |
Family
ID=82505804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210429634.3A Pending CN114816748A (zh) | 2022-04-22 | 2022-04-22 | 线程调度方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114816748A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115695334A (zh) * | 2022-10-11 | 2023-02-03 | 广州市玄武无线科技股份有限公司 | 一种多服务节点的线程分配控制方法 |
CN116661985A (zh) * | 2022-10-25 | 2023-08-29 | 荣耀终端有限公司 | 一种垃圾回收的守护线程的管理方法、装置及电子设备 |
CN117707716A (zh) * | 2023-05-26 | 2024-03-15 | 荣耀终端有限公司 | 线程调度方法、电子设备及计算机可读存储介质 |
-
2022
- 2022-04-22 CN CN202210429634.3A patent/CN114816748A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115695334A (zh) * | 2022-10-11 | 2023-02-03 | 广州市玄武无线科技股份有限公司 | 一种多服务节点的线程分配控制方法 |
CN116661985A (zh) * | 2022-10-25 | 2023-08-29 | 荣耀终端有限公司 | 一种垃圾回收的守护线程的管理方法、装置及电子设备 |
CN116661985B (zh) * | 2022-10-25 | 2024-05-14 | 荣耀终端有限公司 | 一种垃圾回收的守护线程的管理方法、装置及电子设备 |
CN117707716A (zh) * | 2023-05-26 | 2024-03-15 | 荣耀终端有限公司 | 线程调度方法、电子设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114816748A (zh) | 线程调度方法、装置、电子设备和存储介质 | |
US8904067B2 (en) | Adaptive multi-threaded buffer | |
EP3442238A1 (en) | Video frame capturing method and device | |
US10601901B2 (en) | Methods, systems, and media for stored content distribution and access | |
US10348815B2 (en) | Command process load balancing system | |
US20170237936A1 (en) | Information processing apparatus, method for controlling the information processing apparatus, and recording medium | |
CN112473144A (zh) | 游戏资源数据的处理方法及装置 | |
CN113613055A (zh) | 信息显示方法和装置、电子设备和存储介质 | |
CN115525631A (zh) | 数据库数据迁移方法、装置、设备、存储介质 | |
JP4719782B2 (ja) | 分散処理装置、分散処理システム、分散処理方法および分散処理プログラム | |
US8667157B2 (en) | Hardware bus redirection switching | |
US9864637B2 (en) | Adaptable software resource managers based on intentions | |
CN109639827A (zh) | 客户端升级方法及装置 | |
US10165245B2 (en) | Pre-fetching video content | |
CN115220656A (zh) | 数据存储方法及装置、计算机可读存储介质、电子设备 | |
US11366613B2 (en) | Method and apparatus for writing data | |
CN112702511B (zh) | 用于输出视频的方法及装置 | |
US20240163521A1 (en) | Method and system for displaying information on page | |
CN113821157B (zh) | 一种本地磁盘挂载方法、装置、设备及存储介质 | |
CN114968532A (zh) | 任务执行方法及装置、电子设备、计算机可读存储介质 | |
US8390632B1 (en) | Rendering device, non-transitory computer readable medium, and image output apparatus | |
CN116319744A (zh) | 资源获取方法及装置 | |
CN113986492A (zh) | 设备调用方法及装置 | |
KR20240014742A (ko) | 성능 정보를 고려하는 메모리 관리 방법 및 장치 | |
CN113805776A (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 |