CN113641476B - 一种任务调度方法、游戏引擎、设备及存储介质 - Google Patents
一种任务调度方法、游戏引擎、设备及存储介质 Download PDFInfo
- Publication number
- CN113641476B CN113641476B CN202110941214.9A CN202110941214A CN113641476B CN 113641476 B CN113641476 B CN 113641476B CN 202110941214 A CN202110941214 A CN 202110941214A CN 113641476 B CN113641476 B CN 113641476B
- Authority
- CN
- China
- Prior art keywords
- task
- target
- processing
- processing system
- cpu
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 94
- 238000012545 processing Methods 0.000 claims abstract description 804
- 230000008569 process Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 12
- 238000002360 preparation method Methods 0.000 claims description 5
- 239000000306 component Substances 0.000 description 48
- 238000009877 rendering Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 19
- 239000008186 active pharmaceutical agent Substances 0.000 description 14
- 230000000694 effects Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 12
- 238000010438 heat treatment Methods 0.000 description 7
- 230000033001 locomotion Effects 0.000 description 7
- 239000002245 particle Substances 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000013515 script Methods 0.000 description 6
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013468 resource allocation Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000006467 substitution reaction Methods 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/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/505—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 load
-
- 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
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/45—Controlling the progress of the video game
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- 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
-
- 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/506—Constraint
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Processing Or Creating Images (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请实施例公开了一种任务调度方法、游戏引擎、设备及存储介质,其中该方法应用于包括任务调度***和多个任务处理***的游戏引擎,多个任务处理***各自负责处理的任务不同,每个任务处理***配置有对应的任务处理阶段和在该任务处理阶段中的运行关联关系,运行关联关系用于表征任务处理***与其它任务处理***间的运行依赖关系;当游戏引擎工作在目标阶段时,各目标任务处理***分别生成各自负责处理的目标任务,并将目标任务传输给任务调度***;任务调度***基于CPU中各处理线程的负载情况,根据各目标任务处理***各自在目标阶段中的运行关联关系,针对各目标任务分配CPU中的处理线程。该方法能够实现对于CPU并行情况的整体控制。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种任务调度方法、游戏引擎、设备及存储介质。
背景技术
游戏引擎通常是指已编写好的可编辑游戏***、或者实时交互式的图像应用程序的核心组件,游戏引擎可以为游戏设计者提供编写游戏程序所需的各种工具,从而便于游戏设计者更快地做出游戏程式。游戏引擎通常可支持实现以下功能:物理计算、确定光影效果、碰撞检测、渲染游戏元素、生成音效、运行游戏脚本等等;游戏引擎运行时,其支持的各项功能将相互配合,以实现游戏的正常运行。
目前比较常见的游戏引擎包括UE4(UnrealEngine4)引擎和Unity引擎。本申请发明人经研究发现,目前的UE4引擎和Unity引擎在多核中央处理器(CentralProcessingUnit,CPU)上运行时,通常难以整体控制CPU的并行情况,存在某些时段CPU的并行度高、而某些时段CPU的并行度低的情况,而这极易导致游戏帧率降低、CPU发热消耗增多等问题发生。
发明内容
本申请实施例提供了一种任务调度方法、游戏引擎、设备及存储介质,能够实现对于CPU并行情况的整体控制,提高游戏帧率,减少CPU发热消耗。
有鉴于此,本申请第一方面提供了一种任务调度方法,所述方法应用于游戏引擎,所述游戏引擎包括任务调度***和多个任务处理***;所述多个任务处理***各自负责处理的任务不同,每个所述任务处理***配置有其对应的任务处理阶段、以及其在所对应的任务处理阶段中的运行关联关系,所述运行关联关系用于表征所述任务处理***与所述游戏引擎中其它任务处理***之间的运行依赖关系;所述方法包括:
当所述游戏引擎工作在目标阶段时,各目标任务处理***分别生成各自负责处理的目标任务,并将所述目标任务传输给所述任务调度***;所述目标任务处理***是所述游戏引擎中所对应的任务处理阶段为所述目标阶段的任务处理***;
所述任务调度***基于中央处理器CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程。
本申请第二方面提供了一种游戏引擎,所述游戏引擎包括任务调度***和多个任务处理***;所述多个任务处理***各自负责处理的任务不同,每个所述任务处理***配置有其对应的任务处理阶段、以及其在所对应的任务处理阶段中的运行关联关系,所述运行关联关系用于表征所述任务处理***与所述游戏引擎中其它任务处理***之间的运行依赖关系;
所述任务处理***,用于当所述游戏引擎工作在其对应的任务处理阶段时,生成其负责处理的任务,并将所述任务传输给所述任务调度***;
所述任务调度***,用于当所述游戏引擎工作在游戏帧对应的目标阶段时,基于CPU中各处理线程的负载情况,根据各目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各目标任务,分配所述CPU中的处理线程;所述目标任务处理***是所述游戏引擎中所对应的任务处理阶段为所述目标阶段的任务处理***。
本申请第三方面提供了一种设备,所述设备包括处理器以及存储器:
所述存储器用于存储计算机程序;
所述处理器用于根据所述计算机程序,执行上述第一方面所述的任务调度方法的步骤。
本申请第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行上述第一方面所述的任务调度方法的步骤。
本申请第五方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述第一方面所述的任务调度方法的步骤。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例提供了一种任务调度方法,该方法提出了游戏引擎层级的处理资源调度方式,即在游戏运行过程所涉及的每个任务处理阶段内,综合考虑游戏引擎在该任务处理阶段内产生的各个任务之间的关联关系,进而据此合理地针对各个任务分配处理资源。本申请实施例提供的任务调度方法,应用于基于ECS(Entity-Component-System)架构搭建的游戏引擎,该种游戏引擎将游戏中的各种处理逻辑解耦开来,利用若干独立的任务处理***分别执行不同的任务;本申请创新性地针对该种游戏引擎中的每个任务处理***配置了其适用的任务处理阶段、以及其在所适用的任务处理阶段中的运行关联关系,并且还在该种游戏引擎中增设了用于综合调度处理资源的任务调度***。当游戏引擎工作在某个任务处理阶段时,任务调度***可以根据适用于该任务处理阶段的各任务处理***的运行关联关系,将CPU中的处理线程合理地分配给适用于该任务处理阶段的各任务处理***生成的任务,实现从游戏引擎层面出发的处理资源配置。如此,综合考虑同一任务处理阶段内各个任务之间的运行关联关系来分配处理资源,可以实现对CPU并行情况的整体控制,从而有助于提高游戏帧率,降低CPU的发热损耗。
附图说明
图1为本申请实施例提供的任务调度方法的应用场景示意图;
图2为本申请实施例提供的游戏引擎的工作原理示意图;
图3为本申请实施例提供的预更新阶段、更新阶段和更新完成阶段的执行顺序示意图;
图4为本申请实施例提供的任务调度方法的流程示意图;
图5为本申请实施例提供的任务调度***的执行过程示意图;
图6为本申请实施例提供的游戏引擎基于本申请实施例提供的任务调度方法运行时对于CPU处理资源的占用情况示意图;
图7为本申请实施例提供的游戏引擎的结构示意图;
图8为本申请实施例提供的终端设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
相关技术中,UE4引擎、Unity引擎等游戏引擎运行时,通常只关注任务层级上的处理资源调度情况,即仅针对当前执行的任务中的子任务进行处理资源的配置,而不从游戏引擎整体运行的角度进行处理资源的配置。如此,无法对CPU的并行情况进行整体控制,容易导致游戏帧率降低、CPU的发热损耗增多等问题发生。
针对上述相关技术存在的问题,本申请实施例提供了一种任务调度方法,该方法可以实现对于CPU的并行情况的整体控制,从而提高游戏帧率,降低CPU的发热消耗。
具体的,本申请实施例提供的任务调度方法应用于ECS架构的游戏引擎,该游戏引擎中包括任务调度***和多个任务处理***;这多个任务处理***各自负责处理的任务不同,且每个任务处理***均配置有其对应的任务处理阶段、以及其在所对应的任务处理阶段中的运行关联关系,该运行关联关系用于表征任务处理***与游戏引擎中其它任务处理***之间的运行依赖关系。当游戏引擎工作在目标阶段时,各目标任务处理***分别生成各自负责处理的目标任务,并将所生成的目标任务传输给任务调度***,此处的目标任务处理***是游戏引擎中所对应的任务处理阶段为该目标阶段的任务处理***;任务调度***可以基于CPU中各处理线程的负载情况,根据各目标任务处理***各自在该目标阶段中的运行关联关系,针对来自各目标任务处理***的各目标任务分配该CPU中的处理线程。
上述任务调度方法提出了游戏引擎层级的处理资源调度方式,即在游戏运行过程所涉及的每个任务处理阶段内,综合考虑游戏引擎在该任务处理阶段内产生的各个任务之间的运行关联关系,进而,据此合理地针对各个任务分配处理资源。该任务调度方法应用于基于ECS架构搭建的游戏引擎,该种游戏引擎将游戏中的各种处理逻辑解耦开来,利用若干独立的任务处理***分别执行不同的任务;本申请在该种游戏引擎的基础上,创新性地针对其中每个任务处理***配置了其适用的任务处理阶段、以及其在所适用的任务处理阶段中的运行关联关系,并且还在该种游戏引擎中增设了用于综合调度处理资源的任务调度***。当游戏引擎工作在某个任务处理阶段时,任务调度***可以根据适用于该任务处理阶段的各任务处理***的运行关联关系,将CPU中的处理线程合理地分配给适用于该任务处理阶段的各任务处理***生成的任务,实现从游戏引擎层面出发的处理资源配置。如此,综合考虑同一任务处理阶段内各个任务之间的运行关联关系来分配处理资源,可以实现对CPU并行情况的整体控制,从而有助于提高游戏帧率,降低CPU的发热损耗。
应理解,本申请实施例提供的任务调度方法可以应用于支持游戏引擎运行的终端设备,该终端设备具体可以为智能手机、计算机、平板电脑、个人数字助理(PersonalDigitalAssistant,PDA)、车载终端等等,本申请在此不对该任务调度方法所适用的终端设备做具体限定。
为了便于理解本申请实施例提供的任务调度方法,下面对本申请实施例提供的任务调度方法的应用场景进行示例性介绍。
参见图1,图1为本申请实施例提供的任务调度方法的应用场景示意图。如图1所示,该应用场景中包括终端设备110,终端设备110可以是智能手机、计算机等可支持游戏应用程序运行的设备,应理解,图1中示出的终端设备110仅为示例。终端设备110中运行有游戏应用程序,该游戏应用程序运行时其游戏引擎中的各个部件将相互配合,以实现该游戏应用程序的各项功能。
具体的,终端设备110中运行的游戏应用程序的游戏引擎是ECS架构的游戏引擎,该游戏引擎包括任务调度***111和多个任务处理***112。其中,任务调度***111用于在游戏引擎运行时为其中各个任务处理***112生成的任务分配CPU中的处理线程;任务处理***112用于在游戏引擎运行时生成其负责处理的任务,在ECS架构的游戏引擎中,各个任务处理***112各自负责处理的任务不同。
在本申请实施例中,在游戏引擎中注册任务处理***112时,需要针对任务处理***112配置其适用的任务处理阶段,作为该任务处理***112对应的任务处理阶段;示例性的,任务处理阶段可以根据对于游戏中游戏帧的处理过程划分得到,例如,可以将游戏帧的处理过程划分为预更新(PreUpdate)阶段、更新(Update)阶段和更新完成(PostUpdate)阶段,相应地,在游戏引擎中注册任务处理***112时,可以配置该任务处理***112具体适用于预更新阶段、更新阶段和更新完成阶段中的哪个阶段或者哪些阶段。此外,在游戏引擎中注册任务处理***112时,还需要针对任务处理***112配置其在对应的任务处理阶段中的运行关联关系,该运行关联关系用于表征该任务处理***112与游戏引擎中其它任务处理***112之间的运行依赖关系,例如,对于用于执行渲染任务的任务处理***,其需要依赖用于执行物理计算任务的任务处理***的处理结果执行渲染任务,相应地在游戏引擎中注册用于执行渲染任务的任务处理***时,可以基于上述工作关系配置该任务处理***的运行关联关系。
在游戏应用程序实际运行的过程中,当游戏引擎工作至目标阶段时,各目标任务处理***可以分别生成各自负责处理的目标任务,并将生成的目标任务传输给任务调度***111。此处的目标任务处理***是游戏引擎中所对应的任务处理阶段为该目标阶段的任务处理***112,例如,当游戏引擎工作至某游戏帧对应的预更新阶段时,游戏引擎中所对应的任务处理阶段为预更新阶段的任务处理***即为目标任务处理***。
任务调度***111接收到来自各目标任务处理***的各目标任务后,可以基于终端设备110中用于支持游戏应用程序运行的CPU中的各处理线程的负载情况,根据各目标任务处理***各自在该目标阶段中的运行关联关系,针对来自各目标任务处理***的各目标任务分配该CPU中的处理线程。需要说明的是,当支持游戏应用程序运行的CPU为多核同构CPU时,任务调度***111可以基于CPU中的处理线程负载均衡的原则,为来自各目标任务分配该CPU中的处理线程;当支持游戏应用程序运行的CPU为多核异构CPU时,任务调度***111可以综合考虑CPU中各内核各自的数据处理能力,为来自各目标任务分配该CPU中的处理线程。
应理解,图1所示的应用场景仅为示例,在实际应用中,本申请实施例提供的任务调度方法还可以应用于其它场景,在此不对本申请实施例提供的任务调度方法适用的应用场景做任何限定。
为了便于理解本申请实施例提供的任务调度方法,下面在介绍本申请实施例提供的任务调度方法前,先对该任务调度方法适用的游戏引擎进行介绍。参见图2,图2为本申请实施例提供的任务调度方法所适用的游戏引擎的工作原理示意图。
如图2所示,本申请实施例提供的任务调度方法所适用的游戏引擎为ECS架构的游戏引擎,ECS架构的模式遵循组合优于继承的原则。在ECS架构中,游戏中的每个基本单元均可以被视为一个实体(Entity),此处游戏中的基本单元可以理解为游戏中每个独立的虚拟元素,如游戏世界中的虚拟角色、虚拟道具、虚拟装饰元素等等。每个实体可以包括至少一种组件(Component)数据,每种组件数据实质上是其所属的实体对应的虚拟元素的功能属性数据,组件数据通常只包括对于功能属性的描述数据,而不包括任何方法逻辑数据。ECS架构中的***(System),也即本申请实施例中的任务处理***,是用于根据实体包括的组件数据操控实体对应的虚拟元素的工具,其只拥有行为,而不拥有任何状态数据。
ECS架构中的实体其实是一种概念上的定义,其用于指代游戏中存在的虚拟元素,其中包括至少一种组件数据。为了区分游戏中不同的虚拟元素,在代码层面可以针对每个实体配置对应的唯一标识(Identitydocument,ID),该实体中包括的所有组件数据也会被该实体对应的ID标记,以便明确组件与实体之间的所属关系;如图2所示,在游戏引擎中,通常由实体管理器(Entity Manager)管理游戏引擎中的各个实体,执行上述配置ID的操作。
由于ECS架构中的实体是组件数据的集合,因此,游戏引擎运行时可以很方便地对实体中的组件数据进行动态编辑,如为实体增加新的组件数据,或者将组件数据从实体中移除;例如,假设玩家控制的虚拟角色因某些原因丧失了移动能力,则游戏引擎可以简单地将用于描述移动功能的组件数据从该虚拟角色对应的实体中移除,如此即可达到使该虚拟角色无法移动的效果。
ECS架构中的组件数据是其所属的实体对应的虚拟元素的功能属性数据,其只用于存储状态,而不表征任何行为。实体中包括的组件数据可以描述该实体对应的虚拟元素所具备的功能;例如,假设一个实体包括位置组件数据,则表示该实体对应的虚拟元素在游戏世界中占据一定的区域位置,又例如,假设一个实体包括与移动功能相关的组件数据,则表示该实体对应的虚拟元素具备移动能力。如图2所示,在游戏引擎中,通常由组件管理器(Component Manager)管理游戏引擎中各实体的组件数据,其可以为组件数据分配内存及控制器,并且管理游戏引擎中所有的组件数据。
ECS架构中的***(也即本申请实施例中的任务处理***)是游戏逻辑的执行工具,其可以操控拥有组件数据的实体,其只能执行行为,而不存储任何状态数据。在ECS架构中为了便于独立地实现各种游戏逻辑,其将游戏所支持的各种游戏逻辑解耦开来,分配到不同的任务处理***上,即由不同的任务处理***执行不同的游戏逻辑。任务处理***执行其负责处理的任务时,可以遍历游戏引擎中各实体的组件数据,确定与其负责处理的任务相关的实体,进而基于此类实体中的组件数据执行对应的任务;例如,对于用于实现移动功能的任务处理***,其可以遍历游戏引擎中的所有实体,以从中查找到拥有与移动功能相关的组件数据的实体,进而基于此类实体中与移动功能相关的组件数据,控制该实体对应的虚拟元素移动。如图2所示,在游戏引擎中,通常由***管理器(SystemManager)管理游戏引擎中的任务处理***,其可以控制各任务处理***相应地执行对应的游戏逻辑,基于实体中包括的组件数据操控游戏中虚拟元素;此外,该游戏引擎还可以通过事件管理器(EventManager)实现各任务处理***之间的消息交互。
本申请实施例在上文介绍的ECS架构的游戏引擎的基础上,进一步增设了用于为游戏引擎运行过程中生成的任务调度处理资源的任务调度***,该任务调度***的具体工作方式将在下文的方法实施例中详细介绍。
此外,本申请实施例还在上文介绍的ECS架构的游戏引擎的基础上,为该游戏引擎中的任务处理***配置了对应的任务处理阶段、以及该任务处理***在其对应的任务处理阶段中的运行关联关系,该运行关联关系能够表征该任务处理***与游戏引擎中其它任务处理***之间的运行依赖关系。
具体的,本申请实施例可以根据游戏引擎的实际工作方式,将游戏引擎的工作过程划分为若干任务处理阶段;在游戏引擎中注册任务处理***时,可以确定任务处理***负责处理的任务所适用的任务处理阶段,作为该任务处理***对应的任务处理阶段。
示例性的,本申请实施例中的任务处理阶段可以根据对于游戏帧的处理过程划分,所划分出的任务处理阶段可以包括游戏帧对应的预更新(PreUpdate)阶段、更新(Update)阶段以及更新完成(PostUpdate)阶段;其中,预更新阶段用于执行更新游戏帧所需的准备任务,更新阶段用于执行对于游戏帧的更新任务,更新完成阶段用于执行更新完游戏帧后所需的收尾任务。
考虑到游戏正常运行时游戏引擎通常以游戏帧为单位执行相关处理任务,因此,本申请实施例可以将对于一个游戏帧的处理过程划分为预更新阶段、更新阶段和更新完成阶段,这三个阶段的执行顺序如图3所示,即先执行预更新阶段,再执行更新阶段,最后执行更新完成阶段。
在游戏帧对应的预更新阶段内,游戏引擎可以执行更新该游戏帧所需的准备任务;例如,游戏引擎中用于执行脚本逻辑的任务处理***可以执行触发更新物***置、触发播放特定动画效果等操作,游戏引擎中用于执行物理计算任务的任务处理***可以执行计算虚拟元素的运动参数的操作,等等。在游戏帧对应的更新阶段,游戏引擎可以执行对于该游戏帧的更新任务;例如,游戏引擎中用于执行渲染任务的任务处理***可以执行对于虚拟元素的渲染操作,等等。在游戏帧对应的更新完成阶段,游戏引擎可以执行更新完该游戏帧后所需的收尾工作;例如,游戏引擎中用于执行脚本逻辑的任务处理***可以执行对于该游戏帧内的相关数据的统计操作,等等。
在所划分出的任务处理阶段包括预更新阶段、更新阶段和更新完成阶段的情况下,在游戏引擎中注册任务处理***时,可以根据该任务处理***所负责处理的任务的执行时机,相应地为该任务处理***配置对应的任务处理阶段。例如,针对用于执行渲染任务的任务处理阶段,可以配置其对应的任务处理阶段为更新阶段;针对用于执行物理计算任务的任务处理***,可以配置其对应的任务处理阶段为预更新阶段;针对用于执行脚本逻辑的任务处理***,可以配置其对应的任务处理阶段为预更新阶段和更新完成阶段。
应理解,针对一个任务处理***,可以根据其负责处理的任务的执行时机,为其配置一个或者多个对应的任务处理阶段,本申请在此不对一个任务处理***对应的任务处理阶段的数目做任何限定。
如此,按照对于游戏帧的处理过程划分任务处理阶段,并相应地为任务处理***配置对应的任务处理阶段,可以保证针对任务处理***配置的任务处理阶段比较合理,并且为针对任务处理***配置运行关联关系提供了较好的配置基础条件,可以更明确所配置的运行关联关系具体适用的时机。
本申请实施例除了针对任务处理***配置对应的任务处理阶段外,还会针对任务处理***配置其在所对应的任务处理阶段中的运行关联关系,运行关联关系能够表征任务处理***与游戏引擎中其它的任务处理***之间的运行依赖关系。示例性的,若任务处理***A在其对应的任务处理阶段内需要依赖任务处理***B的处理结果执行其负责处理的任务,则可以针对该任务处理***A配置用于表征其需要依赖任务处理***B的处理结果执行任务的运行关联关系;如此,指定每个任务处理***在其对应的任务处理阶段内的运行关联关系,可以方便任务调度***根据该运行关联关系,合理地为任务处理阶段内各任务处理***生成的任务分配处理线程。
应理解,若某任务处理***在其对应的任务处理阶段内与其它任务处理***之间不具有运行依赖关系,即该任务处理***可以独立地执行其负责的任务,而不需要依赖其它任务处理***的处理结果,则可以针对该任务处理***配置用于表征其不需要依赖其它任务处理***的运行关联关系。本申请在此不对针对任务处理***配置的运行关联关系做任何限定。
在了解了本申请实施例适用的游戏引擎、以及针对该游戏引擎中各任务处理***配置的基础信息的情况下,下面通过方法实施例对本申请实施例提供的任务调度方法进行详细介绍。参见图4,图4为本申请实施例提供的任务调度方法的流程示意图。如图4所示,该任务调度方法包括以下步骤:
步骤401:当所述游戏引擎工作在目标阶段时,各目标任务处理***分别生成各自负责处理的目标任务,并将所述目标任务传输给所述任务调度***;所述目标任务处理***是所述游戏引擎中所对应的任务处理阶段为所述目标阶段的任务处理***。
在游戏运行的过程中,当游戏引擎工作至目标阶段时,游戏引擎中的各目标任务处理***将分别生成其各自负责处理的目标任务,并将生成的目标任务传送给游戏引擎中的任务调度***。此处的目标任务处理***是指游戏引擎中所对应的任务处理阶段为目标阶段的任务处理***。
示例性的,假设本申请实施例中的任务处理阶段包括根据对于游戏帧的处理过程划分出的预更新阶段、更新阶段以及更新完成阶段,则当游戏引擎工作至某游戏帧对应的预更新阶段时,即当游戏引擎工作至需要执行更新某游戏帧所需的准备工作的阶段时,游戏引擎中所对应的任务处理阶段为预更新阶段的任务处理***皆为目标任务处理***,此时这些目标任务处理***需要相应地生成各自负责处理的目标任务,并将所生成的目标任务传输给任务调度***。例如,假设游戏引擎中所对应的任务处理阶段为预更新阶段的任务处理***包括任务处理***A、任务处理***B和任务处理***C,当游戏引擎工作至某游戏帧对应的预更新阶段时,任务处理***A、任务处理***B和任务处理***C可以分别生成目标任务a、目标任务b和目标任务c,任务处理***A可以将其生成的目标任务a传送给任务调度***,任务处理***B可以将其生成的目标任务b传送给任务调度***,任务处理***C可以将其生成的目标任务c传送给任务调度***。
应理解,在实际应用中,适用于目标阶段的目标任务处理***可以包括一个,也可以包括多个,本申请在此不对游戏引擎中在目标阶段工作的目标任务处理***的数量做任何限定。
在一种可能的实现方式中,本申请实施例可以为任务处理***提供便捷的应用程序接口(ApplicationProgrammingInterface,API),以便任务处理***可以通过该API向游戏引擎中的任务调度***传输其生成的任务。即各目标任务处理***生成其各自负责处理的目标任务后,可以通过本申请实施例提供的API,将所生成的目标任务传输给任务调度***。
具体的,本申请实施例可以在游戏引擎中新增任务调度***的基础上,进一步针对游戏引擎中的各个任务处理***,配置用于支持其与任务调度***进行通信的API。示例性的,可以针对游戏引擎中的各个任务处理***配置其各自对应的API,每个任务处理***对应的API专用于支持该任务处理***与任务调度***进行通信;或者,也可以针对游戏引擎中的多个任务处理***配置一个API,该API可以支持这些任务处理***与任务调度***进行通信。本申请在此不对API的配置方式做任何限定。
针对游戏引擎中的各个任务处理***配置对应的API后,任务处理***一旦生成所需处理的任务,即可通过其对应的API将所生成的任务传输给任务调度***。如此,提高了任务处理***与任务调度***之间通信的便利性,并且每个任务处理***通过API将其生成的任务传输给任务调度***,无需考虑自身与其它任务处理***之间的复杂的依赖关系。
步骤402:所述任务调度***基于CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程。
任务调度***接收到游戏引擎中目标任务处理***传输过来的目标任务后,可以基于支持游戏运行的CPU中的各个处理线程当前的负载情况,根据各个目标任务处理***各自在目标阶段中的运行关联关系,为来自各个目标任务处理***的各目标任务,分别分配该CPU中的处理线程。
示例性的,假设任务调度***接收到任务处理***A、任务处理***B和任务处理***C分别传来的目标任务a、目标任务b和目标任务c,则任务调度***可以根据当前支持游戏运行的CPU中各个处理线程的负载情况、以及任务处理***A、任务处理***B和任务处理***C各自在当前所处的目标阶段中的运行关联关系,为目标任务a、目标任务b和目标任务c分别分配对应的处理线程。例如,假设任务处理***B在目标阶段内需要依赖任务处理***A的处理结果执行其负责处理的目标任务b,任务处理***C在目标阶段内无需依赖其它任务处理***的处理结果,则任务调度***可以先为目标任务a和目标任务c分配对应的处理线程,并预估目标任务a完成后CPU中处理线程的负载情况,再据此为目标任务b分配处理线程。
正如上文所介绍的,游戏引擎中还包括与游戏中的虚拟元素对应的实体,且实体包括至少一种用于描述该实体对应的虚拟元素具备的功能属性的组件数据,实体包括的组件数据均配置有该实体的标识。在该种架构的游戏引擎中,目标任务处理***在生成目标任务时,还需要根据该游戏引擎中各实体各自包括的组件数据,确定与其负责处理的目标任务相关的实体作为目标实体,并将目标实体的标识传输给任务调度***。相应地,任务调度***针对来自该目标任务处理***的目标任务分配完处理线程后,还需要将目标实体的标识传输给所分配的处理线程,以使该处理线程基于该目标实体包括的组件数据执行目标任务。
示例性的,假设目标任务处理***为用于实现移动功能的任务处理***,该目标任务处理***生成目标任务时,可以遍历游戏引擎中包括的各个实体,以从中查找出包括与移动功能相关的组件数据的实体作为目标实体,并将该目标实体的标识通过自身对应的API传输给任务调度***。任务调度***针对该目标任务处理***传输过来的目标任务分配好对应的处理线程后,可以将该目标任务处理***传输过来的目标实体的标识提供给所分配的处理线程;如此,该处理线程可以在执行该目标任务处理***生成的目标任务时,根据该目标实体的标识确定执行目标任务时依据的组件数据,并基于该目标实体包括的与移动功能相关的组件数据,实现该目标实体对应的虚拟元素的移动功能,如确定该目标实体对应的虚拟元素移动后所处的位置。
需要说明的是,目标任务处理***确定目标实体时,会遍历游戏引擎中包括的所有实体,游戏引擎中与该目标任务处理***负责处理的目标任务相关的所有实体,均会被视为目标实体。
应理解,在实际应用中,目标任务处理***可以在向任务调度***传输目标任务的同时传输目标实体的标识,也可以在完成目标任务的传输后、再传输目标实体的标识,还可以先传输目标实体的标识、后传输目标任务,本申请在此不对目标任务与目标实体的标识的传输顺序做任何限定。
如此,在ECS架构的游戏引擎中,通过上述方式确定目标任务所需处理的组件数据,并在基于所确定的组件数据执行目标任务,保证了任务执行的完整性,实现了对于游戏引擎中组件数据的灵活调用、以及对于实体对应的虚拟元素的灵活控制。
在一种可能的实现方式中,在游戏引擎中注册任务处理***时,还可以针对任务处理***配置其对应的优先级,该优先级通常是根据任务处理***负责处理的任务的重要程度、和/或任务处理***负责处理的任务所需占用的处理资源确定的。在该种情况下,任务调度***针对来自目标任务处理***的目标任务分配处理线程时,可以基于CPU中处理线程的负载情况,根据各目标任务处理***各自对应的优先级、以及各目标任务处理***各自在目标阶段中的运行关联关系,针对来自各目标任务处理***的各目标任务,分配CPU中的处理线程。
具体的,在游戏引擎中注册任务处理***时,可以根据该任务处理***负责处理的任务的重要程度、和/或该任务处理***负责处理的任务所需占用的处理资源,来为该任务处理***配置对应的优先级;应理解,任务处理***负责处理的任务越重要、所需占用的处理资源越多,任务处理***对应的优先级应当越高。
示例性的,在游戏引擎中,负责处理渲染任务的任务处理***执行渲染任务时所需耗费的处理资源通常比较多,并且渲染任务对于游戏的整体实现来说比较重要,因此,可以针对负责处理渲染任务的任务处理***配置较高的优先级;负责处理粒子效果的任务处理***、以及负责处理音效的任务处理***执行其负责处理的任务时所需耗费的处理资源通常比较少,并且粒子效果和音效对于游戏的整体实现来说重要程度较低,因此,可以针对负责处理粒子效果的任务处理***、以及负责处理音效的任务处理***配置较低的优先级。应理解,上述任务处理***的优先级的配置方式仅为示例,在实际应用中,可以根据游戏引擎的实际运行情况,为其中的任务处理***配置对应的优先级,本申请在此不对优先级的配置方式做任何限定。
在游戏引擎中各任务处理***均配置有对应的优先级的情况下,任务调度***针对来自各目标任务处理***的各目标任务分配处理线程时,还需要综合考虑各目标任务处理***各自对应的优先级;例如,优先针对来自高优先级的目标任务处理***的目标任务,分配性能较优、和/或资源占用率较低的处理线程。
作为一种示例,当CPU为多核异构CPU时,针对所对应的优先级高于第一预设级别的目标任务处理***,任务调度***可以为来自该目标任务处理***的目标任务,分配CPU中由目标内核支持运行的处理线程,该目标内核是该CPU中处理性能最优的内核。
目前,很多移动终端中的CPU由规模不同、频率不同的多个内核组成,为了使本申请实施例提供的任务调度方法能够较好地适配于此类移动终端,任务调度***可以在针对来自任务处理***的任务分配处理线程时,将比较重要的任务锁定在CPU中处理性能较优的内核上执行,而对于重要度较低的任务可以使其在CPU中处理性能一般的内核上执行。
具体的,可以预先设置第一预设级别,将所对应的优先级高于第一预设级别的任务处理***负责处理的任务视为重要度较高的任务,将所对应的优先级不高于第一预设级别的任务处理***负责处理的任务视为重要度较低的任务。接收到所对应的优先级高于第一预设级别的任务处理***传输过来的任务时,任务调度***可以为该任务分配由目标内核(即CPU中性能最优的内核)支持运行的处理线程;例如,接收到负责处理渲染任务的任务处理***传输过来的渲染任务时,任务调度***可以将该渲染任务锁定在由目标内核支持运行的处理线程上执行。反之,接收到所对应的优先级不高于第一预设级别的任务处理***传输过来的任务时,任务调度***可以为该任务分配由除目标内核外的其它内核支持运行的处理线程;例如,接收到负责处理粒子效果的任务处理***传输过来的粒子效果处理任务时,任务调度***可以将该粒子效果处理任务放置到由性能一般的内核支持运行的处理线程上执行。
应理解,在CPU中包括的内核的处理性能更多样的情况下,本申请实施例还可以适应性地针对游戏引擎中的各任务处理***配置更多样的优先级,并且设置更多对应于不同处理性能的内核的级别区间;根据任务处理***所对应的优先级所处的级别区间,为来自该任务处理***的任务配置对应的处理内核。
如此,通过上述方式,实现适配于多核异构CPU的任务调度方案,保证将较为重要的任务放置在CPU中处理性能较优的内核上执行,从而保证游戏能够更稳定的运行。
作为一种示例,当CPU为多核同构CPU时,任务调度***可以根据CPU中各处理线程的负载情况,确定该CPU中占用率满足预设条件的处理线程,作为优选处理线程;针对所对应的优先级高于第二预设级别的目标任务处理***,任务调度***可以为来自该目标任务处理***的目标任务,分配此类优选处理线程。
目前,很多电脑端中的CPU由规模相同、频率相同的多个内核组成,当本申请实施例提供的游戏引擎运行在此类电脑端时,任务调度***可以基于CPU负载均衡的原则,为任务处理***生成的任务分配CPU中的处理线程;对于来自所对应的优先级较高的任务处理***的任务,任务调度***可以为其优先分配CPU中占用率较低的处理线程。
具体的,可以预先设置第二预设级别,将所对应的优先级高于第二预设级别的任务处理***负责处理的任务视为重要度较高的任务,将所对应的优先级不高于第二预设级别的任务处理***负责处理的任务视为重要度较低的任务。
任务调度***针对来自各目标任务处理***的各目标任务分配处理线程时,可以先根据支持游戏运行的CPU中各个处理线程的负载情况,确定该CPU中占用率满足预设条件的处理线程,作为优选处理线程;此处可以将占用率低于预设阈值作为预设条件,也可以将对CPU中各个处理线程的占用率进行升序排序,确定其中排序靠前的若干个处理线程满足预设条件,本申请在此不对该预设条件做任何限定。进而,针对来自所对应的优先级高于第二预设级别的目标任务处理***的目标任务,分配所确定的优选处理线程。
如此,通过上述方式,实现适配于多核同构CPU的任务调度方案,保证将较为重要的任务放置在CPU中处理资源较丰富的处理线程上执行,从而保证游戏能够更稳定的运行。
在实际应用中,任务处理***负责处理的任务可能由若干具有关联关系的子任务组成,即目标任务处理***向任务调度***传输的目标任务中可能包括多个目标子任务以及这多个目标子任务各自对应的执行关联关系,此处的执行关联关系用于表征其对应的目标子任务与目标任务中其它目标子任务之间的执行依赖关系。此时,任务调度***可以通过以下方式针对目标任务以及其中的目标子任务配置处理线程:
基于CPU中各处理线程的负载情况,根据各目标任务处理***各自在目标阶段中的运行关联关系,针对来自各目标任务处理***的各目标任务分配对应的处理线程集合。进而,针对每个目标任务,基于该目标任务对应的处理线程集合中各处理线程的负载情况,根据该目标任务中各目标子任务各自对应的执行关联关系,针对为目标任务中各目标子任务分配处理线程集合中的处理线程。
具体的,目标任务处理***生成的目标任务实质上可以由多个具有关联关系的目标子任务组成,目标任务处理***将其生成的目标任务传输给任务调度***,实质上即是将其生成的目标任务中的多个目标子任务以及这多个目标子任务各自对应的执行关联关系传输给任务调度***。此处目标子任务对应的执行关联关系能够表征该目标子任务与目标任务中其它的目标子任务之间的执行依赖关系,例如,假设目标子任务1的执行需要依赖目标子任务2的处理结果,则可以基于此生成目标子任务1对应的执行关联关系。
任务调度***分配处理线程时,可以先在游戏引擎层级上针对所接收的各个目标任务分配对应的处理线程集合,所分配的处理线程集合中可以包括一个处理线程,也可以包括多个处理线程;在游戏引擎层级上针对目标任务分配处理线程集合的实现方式,实质上与上文介绍的针对目标任务分配处理线程的实现方式相同,详细可参见上文的相关介绍内容,此处不再赘述。
任务调度***分配得到目标任务对应的处理线程集合后,可以进一步在任务层级上针对目标任务中的各个目标子任务分配对应的处理线程。具体的,任务调度***可以根据目标任务中各个目标子任务各自对应的执行关联关系,结合目标任务对应的处理线程集合中各处理线程当前的负载情况,为目标任务中的各个目标子任务分配对应的处理线程;例如,假设目标任务包括目标子任务1、目标子任务2和目标子任务3,并且目标子任务2的执行需要依赖目标子任务1的处理结果,而目标子任务3可以独立执行,不依赖其它目标子任务的处理结果,则任务调度***可以先为目标子任务1和目标子任务3分配对应的处理线程,并预估目标子任务1完成后处理线程集合中处理线程的负载情况,再据此为目标子任务2分配处理线程。
如此,通过上述方式,在游戏引擎层级和任务层级这两个层级上实现双层级的处理资源分配,既保证了针对每个所需处理的任务合理分配处理资源,又保证了针对任务中的每个子任务合理分配处理资源,更细化地实现了对于处理资源的合理分配,进一步提高了CPU的并行度。
可选的,目标任务中各个目标子任务也可以有其对应的优先级,即目标任务处理***在生成目标任务时,可以根据该目标任务中目标子任务的重要程度、和/或所需占用的处理资源,配置该目标子任务对应的优先级;在该种情况下,任务调度***针对目标任务中的目标子任务分配处理线程时,可以根据该目标任务对应的处理线程集合中各处理线程的负载情况,确定该处理线程集合中占用率最低的处理线程作为目标处理线程;针对所对应的优先级高于第三预设级别的目标子任务,任务调度***可以为该目标子任务分配该目标处理线程。
具体的,目标任务处理***生成目标任务时,可以根据该目标任务中各目标子任务的重要程度、和/或该目标任务中各目标子任务所需占用的处理资源,为该目标任务中的各目标子任务配置对应的优先级;应理解,目标任务中重要程度越高、所需占用的处理资源越多的目标子任务,所对应的优先级应当越高。在目标任务中各目标子任务配置有对应的优先级的情况下,任务调度***针对目标任务中的各目标子任务分配处理线程时,还需要综合考虑各目标子任务各自对应的优先级;例如,针对所对应的优先级较高的目标子任务,分配处理线程集合中资源占用率较低的处理线程。
示例性的,可以预先设置第三预设级别,将所对应的优先级高于该第三预设级别的目标子任务视为重要度较高的子任务,将所对应的优先级不高于该第三预设级别的目标子任务视为重要度较低的子任务。任务调度***针对目标任务中各目标子任务分配处理线程时,可以先根据该目标任务对应的处理线程集合中各处理线程的负载情况,确定其中占用率最低的处理线程作为目标处理线程;进而,针对所对应的优先级高于第三预设级别的目标子任务,分配所确定的目标处理线程。
如此,通过上述方式,实现对于任务层级的处理资源分配方式的进一步优化,使得比较重要的子任务可以在占用率较低的处理线程上执行,从而保证目标任务能够较好地执行。
上述任务调度方法提出了游戏引擎层级的处理资源调度方式,即在游戏运行过程所涉及的每个任务处理阶段内,综合考虑游戏引擎在该任务处理阶段内产生的各个任务之间的运行关联关系,进而,据此合理地针对各个任务分配处理资源。该任务调度方法应用于基于ECS架构搭建的游戏引擎,该种游戏引擎将游戏中的各种处理逻辑解耦开来,利用若干独立的任务处理***分别执行不同的任务;本申请在该种游戏引擎的基础上,创新性地针对其中每个任务处理***配置了其适用的任务处理阶段、以及其在所适用的任务处理阶段中的运行关联关系,并且还在该种游戏引擎中增设了用于综合调度处理资源的任务调度***。当游戏引擎工作在某个任务处理阶段时,任务调度***可以根据适用于该任务处理阶段的各任务处理***的运行关联关系,将CPU中的处理线程合理地分配给适用于该任务处理阶段的各任务处理***生成的任务,实现从游戏引擎层面出发的处理资源配置。如此,综合考虑同一任务处理阶段内各个任务之间的运行关联关系来分配处理资源,可以实现对CPU并行情况的整体控制,从而有助于提高游戏帧率,降低CPU的发热损耗。
为了便于进一步理解本申请实施例提供的任务调度方法,下面对该任务调度方法进行整体示例性介绍。
考虑到游戏运行时通常需要执行若干帧内的任务,因此本申请将游戏中对于一个游戏帧的处理过程划分为PreUpdate、Update和PostUpdate三个阶段。对于游戏引擎中的每个任务处理***,可以根据其负责处理的任务的执行时机,确定其具体适用于这三个阶段中的哪个阶段或者哪些阶段,并据此配置其对应的任务处理阶段;例如,对于用于执行脚本逻辑的任务处理***,其需要在游戏帧对应的PreUpdate阶段运行一些脚本逻辑(如更新物***置、播放动画等),因此可以配置其对应的任务处理阶段为PreUpdate阶段;又例如,对于用于执行渲染任务的任务处理***,其需要在游戏帧对应的Update阶段执行生成渲染命令、渲染裁剪等计算任务,因此可以配置其对应的任务处理阶段为Update阶段。
在上述PreUpdate、Update和PostUpdate中的每个阶段中,适用于该阶段的任务处理***均可以通过其对应的API,将其生成的所需执行的任务传输给任务调度***,以使该任务调度***为其生成的任务分配CPU中的处理线程。此处,任务处理***所生成的任务中可以包括若干子任务,这些子任务彼此之间可以存在依赖关系,也可以任意执行,任务处理***可以在创建任务时指定该任务中包括的子任务间的执行关联关系,例如,指定其中前置的子任务、后置的子任务等,进而将这些子任务间的执行关联关系传输给任务调度***。
在本申请实施例中,在每个任务处理***的注册阶段,还会配置其在所适用的任务处理阶段中与其它任务处理***之间的运行关联关系,即配置其是否需要依赖其它任务处理***的处理结果执行其负责处理的任务;例如,用于执行渲染任务的任务处理***,会在其适用的任务处理阶段中依赖用于执行物理计算任务的任务处理***的处理结果、以及用于执行动画任务的任务处理***的处理结果,因此可以基于此配置用于执行渲染任务的任务处理***的运行关联关系。此外,在每个任务处理***的注册阶段,还可以根据该任务处理***负责处理的任务的重要程度、和/或该任务处理***负责处理的任务所需占用的处理资源,为该任务处理***配置对应的优先级。
如此,在指定了游戏引擎中任务处理***所适用的任务处理阶段、在所适用的任务处理阶段中的运行关联关系以及优先级后,任务调度***可以基于CPU中各处理线程的负载情况,根据任务处理***的优先级和运行关联关系,合理地安排任务到相应的处理线程上执行。本申请实施例中的任务调度***在游戏运行时,针对游戏中的每个游戏帧,可以循环执行任务创建(Build ExecutionGraph)阶段和任务执行(ExecuteTaskGraph)阶段,将所有游戏任务并行执行,如图5所示。
此外,考虑到移动终端中的CPU与个人电脑(PersonalComputer,PC)端中的CPU架构不同,移动终端中的CPU通常由若干规模不同、频率不同的大小内核组成,基于此,任务调度***并不能简单地将任务按照负载均衡的原则分配到各个处理线程上。在该种情况下,本申请实施例可以根据任务处理***对应的优先级,将优先级较高的任务处理***生成的任务锁定在CPU中性能较优的内核上执行,例如,将渲染任务锁定在CPU中的大核上执行,而对于粒子、音效等任务可以放在性能较慢的小核上执行,如此更好地提高游戏在移动终端上的性能。
本申请发明人经实验发现,通过本申请实施例提供的任务调度方法,可以将所需执行的各个任务合理地分配到各个处理线程上,保证CPU具有较高的整体利用率。图6所示为游戏引擎基于本申请实施例提供的任务调度方法运行时对于CPU处理资源的占用情况,其中六条横向的线条分别代表CPU中六个不同的处理线程,线条上分布有纵向纹路的区域表示在该区域对应的时间段内该线条对应的处理线程得到了使用,线条上没有分布纵向纹路的区域表示在该区域对应的时间段内该线条对应的处理线程没有被使用,如图6所示,执行任务1、任务2、任务3和任务4(此处的任务1、任务2、任务3和任务4可以是独立的任务,也可以是包括多个任务的任务集合)时,CPU中这六个处理线程都得到了充分地利用,CPU的整体利用率不低于70%。
针对上文描述的任务调度方法,本申请还提供了对应的游戏引擎,以使上述任务调度方法在实际中得以应用及实现。
参见图7,图7是本申请实施例提供的游戏引擎的结构示意图。如图7所示,该游戏引擎700包括任务调度***701和多个任务处理***702;所述多个任务处理***702各自负责处理的任务不同,每个所述任务处理***702配置有其对应的任务处理阶段、以及其在所对应的任务处理阶段中的运行关联关系,所述运行关联关系用于表征所述任务处理***702与所述游戏引擎中其它任务处理***702之间的运行依赖关系;
所述任务处理***702,用于当所述游戏引擎工作在其对应的任务处理阶段时,生成其负责处理的任务,并将所述任务传输给所述任务调度***701;
所述任务调度***701,用于当所述游戏引擎工作在游戏帧对应的目标阶段时,基于CPU中各处理线程的负载情况,根据各目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各目标任务,分配所述CPU中的处理线程;所述目标任务处理***是所述游戏引擎中所对应的任务处理阶段为所述目标阶段的任务处理***。
可选的,在图7所示的游戏引擎的基础上,所述游戏引擎还包括多个实体,所述实体对应于游戏中的虚拟元素;所述实体包括至少一种组件数据,所述组件数据是所述实体对应的虚拟元素的功能属性数据,所述实体包括的所述组件数据均配置有所述实体的标识;
所述任务处理***702,还用于当所述游戏引擎工作在其对应的任务处理阶段时,根据所述游戏引擎中各实体各自包括的组件数据,确定与其负责处理的任务相关的实体,并将所述实体的标识传输给所述任务调度***701;
所述任务调度***701,还用于针对来自所述目标任务处理***的所述目标任务分配完处理线程后,将目标实体的标识传输给所述处理线程,以使所述处理线程基于所述目标实体包括的组件数据执行所述目标任务;所述目标实体是与所述目标任务处理***负责处理的所述目标任务相关的实体。
可选的,在图7所示的游戏引擎的基础上,每个所述任务处理***702还配置有其对应的优先级,所述优先级是根据所述任务处理***702负责处理的任务的重要程度、以及所述任务处理***702负责处理的任务所需占用的处理资源中的至少一种因素确定的;
所述任务调度***701,具体用于基于所述CPU中各处理线程的负载情况,根据各所述目标任务处理***各自对应的优先级、以及各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程。
可选的,当所述CPU为多核异构CPU时,所述任务调度***701具体用于:
针对所对应的优先级高于第一预设级别的所述目标任务处理***,为来自所述目标任务处理***的所述目标任务,分配所述CPU中由目标内核支持运行的处理线程;所述目标内核为所述CPU中处理性能最优的内核。
可选的,当所述CPU为多核同构CPU时,所述任务调度***701具体用于:
根据所述CPU中各处理线程的负载情况,确定所述CPU中占用率满足预设条件的处理线程,作为优选处理线程;针对所对应的优先级高于第二预设级别的所述目标任务处理***,为来自所述目标任务处理***的所述目标任务,分配所述优选处理线程。
可选的,在图7所示的游戏引擎的基础上,所述目标任务包括多个目标子任务以及所述多个目标子任务各自对应的执行关联关系,所述执行关联关系用于表征其对应的目标子任务与所述目标任务中其它的目标子任务之间的执行依赖关系;则所述任务调度***701具体用于:
基于所述CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配对应的处理线程集合;
针对每个所述目标任务,基于所述目标任务对应的处理线程集合中各处理线程的负载情况,根据所述目标任务中各目标子任务各自对应的执行关联关系,针对所述目标任务中各目标子任务分配所述处理线程集合中的处理线程。
可选的,所述目标任务还包括所述多个目标子任务各自对应的优先级;则所述任务调度***701具体用于:
根据所述处理线程集合中各处理线程的负载情况,确定所述处理线程集合中占用率最低的处理线程,作为目标处理线程;针对所对应的优先级高于第三预设级别的所述目标子任务,为所述目标子任务分配所述目标处理线程。
可选的,在图7所示的游戏引擎的基础上,所述任务处理阶段是根据对于游戏帧的处理过程划分的,所述任务处理阶段包括游戏帧对应的预更新阶段、更新阶段和更新完成阶段;所述预更新阶段用于执行更新所述游戏帧所需的准备任务,所述更新阶段用于执行对于所述游戏帧的更新任务,所述更新完成阶段用于执行更新完所述游戏帧后所需的收尾任务。
可选的,在图7所示的游戏引擎的基础上,所述任务处理***702具体用于:
生成其负责处理的任务,并通过API将所述任务传输给所述任务调度***701。
上述任务调度装置提出了游戏引擎层级的处理资源调度方式,即在游戏运行过程所涉及的每个任务处理阶段内,综合考虑游戏引擎在该任务处理阶段内产生的各个任务之间的运行关联关系,进而,据此合理地针对各个任务分配处理资源。该任务调度方法应用于基于ECS架构搭建的游戏引擎,该种游戏引擎将游戏中的各种处理逻辑解耦开来,利用若干独立的任务处理***分别执行不同的任务;本申请在该种游戏引擎的基础上,创新性地针对其中每个任务处理***配置了其适用的任务处理阶段、以及其在所适用的任务处理阶段中的运行关联关系,并且还在该种游戏引擎中增设了用于综合调度处理资源的任务调度***。当游戏引擎工作在某个任务处理阶段时,任务调度***可以根据适用于该任务处理阶段的各任务处理***的运行关联关系,将CPU中的处理线程合理地分配给适用于该任务处理阶段的各任务处理***生成的任务,实现从游戏引擎层面出发的处理资源配置。如此,综合考虑同一任务处理阶段内各个任务之间的运行关联关系来分配处理资源,可以实现对CPU并行情况的整体控制,从而有助于提高游戏帧率,降低CPU的发热损耗。
本申请实施例还提供了一种用于实现上述任务调度方法的设备,该设备具体可以是终端设备,下面将从硬件实体化的角度对本申请实施例提供的终端设备进行介绍。
参见图8,图8是本申请实施例提供的终端设备的结构示意图。如图8所示,为了便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示的,请参照本申请实施例方法部分。该终端可以为包括手机、平板电脑、个人数字助理、销售终端(PointofSales,POS)、车载电脑等任意终端设备,以终端为计算机为例:
图8示出的是与本申请实施例提供的终端相关的计算机的部分结构的框图。参考图8,计算机包括:射频(RadioFrequency,RF)电路810、存储器820、输入单元830(其中包括触控面板831和其他输入设备832)、显示单元840(其中包括显示面板841)、传感器850、音频电路860(其可以连接扬声器861和传声器862)、无线保真(wirelessfidelity,WiFi)模块870、处理器880、以及电源890等部件。本领域技术人员可以理解,图8中示出的计算机结构并不构成对计算机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储器820可用于存储软件程序以及模块,处理器880通过运行存储在存储器820的软件程序以及模块,从而执行计算机的各种功能应用以及数据处理。存储器820可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器880是计算机的控制中心,利用各种接口和线路连接整个计算机的各个部分,通过运行或执行存储在存储器820内的软件程序和/或模块,以及调用存储在存储器820内的数据,执行计算机的各种功能和处理数据。可选的,处理器880可包括一个或多个处理单元;优选的,处理器880可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器880中。
在本申请实施例中,该终端所包括的处理器880还具有以下功能:
支持游戏引擎的运行,所述游戏引擎包括任务调度***和多个任务处理***;所述多个任务处理***各自负责处理的任务不同,每个所述任务处理***配置有其对应的任务处理阶段、以及其在所对应的任务处理阶段中的运行关联关系,所述运行关联关系用于表征所述任务处理***与所述游戏引擎中其它任务处理***之间的运行依赖关系;
当所述游戏引擎工作在目标阶段时,各目标任务处理***分别生成各自负责处理的目标任务,并将所述目标任务传输给所述任务调度***;所述目标任务处理***是所述游戏引擎中所对应的任务处理阶段为所述目标阶段的任务处理***;
所述任务调度***基于中央处理器CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程。
可选的,所述处理器880还用于执行本申请实施例提供的任务调度方法的任意一种实现方式的步骤。
本申请实施例还提供一种计算机可读存储介质,用于存储计算机程序,该计算机程序用于执行前述各个实施例所述的一种任务调度方法中的任意一种实施方式。
本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前述各个实施例所述的一种任务调度方法中的任意一种实施方式。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文全称:Read-OnlyMemory,英文缩写:ROM)、随机存取存储器(英文全称:RandomAccess Memory,英文缩写:RAM)、磁碟或者光盘等各种可以存储计算机程序的介质。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“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可以是单个,也可以是多个。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (13)
1.一种任务调度方法,其特征在于,所述方法应用于游戏引擎,所述游戏引擎包括任务调度***和多个任务处理***;所述多个任务处理***各自负责处理的任务不同,每个所述任务处理***配置有其对应的任务处理阶段、以及其在所对应的任务处理阶段中的运行关联关系,所述运行关联关系用于表征所述任务处理***与所述游戏引擎中其它任务处理***之间的运行依赖关系;所述游戏引擎还包括多个实体,所述实体对应于游戏中的虚拟元素;所述实体包括至少一种组件数据,所述组件数据是所述实体对应的虚拟元素的功能属性数据,所述实体包括的所述组件数据均配置有所述实体的标识;所述方法包括:
当所述游戏引擎工作在目标阶段时,各目标任务处理***分别生成各自负责处理的目标任务,并将所述目标任务传输给所述任务调度***;所述目标任务处理***是所述游戏引擎中所对应的任务处理阶段为所述目标阶段的任务处理***;
所述任务调度***基于中央处理器CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程;
所述目标任务处理***根据所述游戏引擎中各实体各自包括的组件数据,确定与其负责处理的所述目标任务相关的实体作为目标实体,并将所述目标实体的标识传输给所述任务调度***;
所述任务调度***针对来自所述目标任务处理***的所述目标任务分配完处理线程后,将所述目标实体的标识传输给所述处理线程,以使所述处理线程基于所述目标实体包括的组件数据执行所述目标任务。
2.根据权利要求1所述的方法,其特征在于,每个所述任务处理***还配置有其对应的优先级,所述优先级是根据所述任务处理***负责处理的任务的重要程度、以及所述任务处理***负责处理的任务所需占用的处理资源中的至少一种因素确定的;
所述任务调度***基于中央处理器CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程,包括:
所述任务调度***基于所述CPU中各处理线程的负载情况,根据各所述目标任务处理***各自对应的优先级、以及各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程。
3.根据权利要求2所述的方法,其特征在于,当所述CPU为多核异构CPU时,所述任务调度***基于所述CPU中各处理线程的负载情况,根据各所述目标任务处理***各自对应的优先级、以及各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程,包括:
针对所对应的优先级高于第一预设级别的所述目标任务处理***,所述任务调度***为来自所述目标任务处理***的所述目标任务,分配所述CPU中由目标内核支持运行的处理线程;所述目标内核为所述CPU中处理性能最优的内核。
4.根据权利要求2所述的方法,其特征在于,当所述CPU为多核同构CPU时,所述任务调度***基于所述CPU中各处理线程的负载情况,根据各所述目标任务处理***各自对应的优先级、以及各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程,包括:
所述任务调度***根据所述CPU中各处理线程的负载情况,确定所述CPU中占用率满足预设条件的处理线程,作为优选处理线程;
针对所对应的优先级高于第二预设级别的所述目标任务处理***,所述任务调度***为来自所述目标任务处理***的所述目标任务,分配所述优选处理线程。
5.根据权利要求1所述的方法,其特征在于,所述目标任务包括多个目标子任务以及所述多个目标子任务各自对应的执行关联关系,所述执行关联关系用于表征其对应的目标子任务与所述目标任务中其它的目标子任务之间的执行依赖关系;
所述任务调度***基于中央处理器CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程,包括:
所述任务调度***基于所述CPU中各处理线程的负载情况,根据各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配对应的处理线程集合;
针对每个所述目标任务,所述任务调度***基于所述目标任务对应的处理线程集合中各处理线程的负载情况,根据所述目标任务中各目标子任务各自对应的执行关联关系,针对所述目标任务中各目标子任务分配所述处理线程集合中的处理线程。
6.根据权利要求5所述的方法,其特征在于,所述目标任务还包括所述多个目标子任务各自对应的优先级;所述任务调度***基于所述目标任务对应的处理线程集合中各处理线程的负载情况,根据所述目标任务中各目标子任务各自对应的执行关联关系,针对所述目标任务中各目标子任务分配所述处理线程集合中的处理线程,包括:
所述任务调度***根据所述处理线程集合中各处理线程的负载情况,确定所述处理线程集合中占用率最低的处理线程,作为目标处理线程;
针对所对应的优先级高于第三预设级别的所述目标子任务,所述任务调度***为所述目标子任务分配所述目标处理线程。
7.根据权利要求1所述的方法,其特征在于,所述任务处理阶段是根据对于游戏帧的处理过程划分的,所述任务处理阶段包括游戏帧对应的预更新阶段、更新阶段和更新完成阶段;所述预更新阶段用于执行更新所述游戏帧所需的准备任务,所述更新阶段用于执行对于所述游戏帧的更新任务,所述更新完成阶段用于执行更新完所述游戏帧后所需的收尾任务。
8.根据权利要求1所述的方法,其特征在于,所述各目标任务处理***分别生成各自负责处理的目标任务,并将所述目标任务传输给所述任务调度***,包括:
各所述目标任务处理***分别生成各自负责处理的所述目标任务,并通过应用程序接口API,将所述目标任务传输给所述任务调度***。
9.一种游戏引擎,其特征在于,所述游戏引擎包括任务调度***和多个任务处理***;所述多个任务处理***各自负责处理的任务不同,每个所述任务处理***配置有其对应的任务处理阶段、以及其在所对应的任务处理阶段中的运行关联关系,所述运行关联关系用于表征所述任务处理***与所述游戏引擎中其它任务处理***之间的运行依赖关系;所述游戏引擎还包括多个实体,所述实体对应于游戏中的虚拟元素;所述实体包括至少一种组件数据,所述组件数据是所述实体对应的虚拟元素的功能属性数据,所述实体包括的所述组件数据均配置有所述实体的标识;
所述任务处理***,用于当所述游戏引擎工作在其对应的任务处理阶段时,生成其负责处理的任务,并将所述任务传输给所述任务调度***;
所述任务调度***,用于当所述游戏引擎工作在游戏帧对应的目标阶段时,基于CPU中各处理线程的负载情况,根据各目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各目标任务,分配所述CPU中的处理线程;所述目标任务处理***是所述游戏引擎中所对应的任务处理阶段为所述目标阶段的任务处理***;
所述任务处理***,还用于当所述游戏引擎工作在其对应的任务处理阶段时,根据所述游戏引擎中各实体各自包括的组件数据,确定与其负责处理的任务相关的实体,并将所述实体的标识传输给所述任务调度***;
所述任务调度***,还用于针对来自所述目标任务处理***的所述目标任务分配完处理线程后,将目标实体的标识传输给所述处理线程,以使所述处理线程基于所述目标实体包括的组件数据执行所述目标任务;所述目标实体是与所述目标任务处理***负责处理的所述目标任务相关的实体。
10.根据权利要求9所述的游戏引擎,其特征在于,每个所述任务处理***还配置有其对应的优先级,所述优先级是根据所述任务处理***负责处理的任务的重要程度、以及所述任务处理***负责处理的任务所需占用的处理资源中的至少一种因素确定的;
所述任务调度***,具体用于基于所述CPU中各处理线程的负载情况,根据各所述目标任务处理***各自对应的优先级、以及各所述目标任务处理***各自在所述目标阶段中的运行关联关系,针对来自各所述目标任务处理***的各所述目标任务,分配所述CPU中的处理线程。
11.根据权利要求10所述的游戏引擎,其特征在于,当所述CPU为多核异构CPU时,所述任务调度***具体用于:
针对所对应的优先级高于第一预设级别的所述目标任务处理***,为来自所述目标任务处理***的所述目标任务,分配所述CPU中由目标内核支持运行的处理线程;所述目标内核为所述CPU中处理性能最优的内核。
12.一种设备,其特征在于,所述设备包括处理器及存储器;
所述存储器用于存储计算机程序;
所述处理器用于根据所述计算机程序执行权利要求1至8中任一项所述的任务调度方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行权利要求1至8中任一项所述的任务调度方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110941214.9A CN113641476B (zh) | 2021-08-16 | 2021-08-16 | 一种任务调度方法、游戏引擎、设备及存储介质 |
EP22857490.1A EP4310677A4 (en) | 2021-08-16 | 2022-07-19 | TASK SCHEDULING METHOD, GAME MACHINE, DEVICE AND STORAGE MEDIUM |
PCT/CN2022/106410 WO2023020177A1 (zh) | 2021-08-16 | 2022-07-19 | 一种任务调度方法、游戏引擎、设备及存储介质 |
US18/319,254 US20230289223A1 (en) | 2021-08-16 | 2023-05-17 | Task scheduling method, game engine, device and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110941214.9A CN113641476B (zh) | 2021-08-16 | 2021-08-16 | 一种任务调度方法、游戏引擎、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113641476A CN113641476A (zh) | 2021-11-12 |
CN113641476B true CN113641476B (zh) | 2023-07-14 |
Family
ID=78422254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110941214.9A Active CN113641476B (zh) | 2021-08-16 | 2021-08-16 | 一种任务调度方法、游戏引擎、设备及存储介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230289223A1 (zh) |
EP (1) | EP4310677A4 (zh) |
CN (1) | CN113641476B (zh) |
WO (1) | WO2023020177A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641476B (zh) * | 2021-08-16 | 2023-07-14 | 腾讯科技(深圳)有限公司 | 一种任务调度方法、游戏引擎、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108279980A (zh) * | 2018-01-22 | 2018-07-13 | 上海联影医疗科技有限公司 | 资源分配方法及***和资源分配终端 |
CN109783229A (zh) * | 2018-12-17 | 2019-05-21 | 平安普惠企业管理有限公司 | 线程资源分配的方法及装置 |
CN109865292A (zh) * | 2019-01-10 | 2019-06-11 | 珠海金山网络游戏科技有限公司 | 一种基于游戏引擎的游戏资源构建方法和装置 |
CN111708639A (zh) * | 2020-06-22 | 2020-09-25 | 中国科学技术大学 | 任务调度***及方法、存储介质及电子设备 |
CN111831434A (zh) * | 2020-07-01 | 2020-10-27 | Oppo广东移动通信有限公司 | 资源分配方法、装置、存储介质及电子设备 |
CN112925616A (zh) * | 2019-12-06 | 2021-06-08 | Oppo广东移动通信有限公司 | 任务分配方法、装置、存储介质及电子设备 |
CN113238838A (zh) * | 2021-04-22 | 2021-08-10 | ***股份有限公司 | 一种任务调度方法、装置及计算机可读存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10146583B2 (en) * | 2016-08-11 | 2018-12-04 | Samsung Electronics Co., Ltd. | System and method for dynamically managing compute and I/O resources in data processing systems |
US10545796B2 (en) * | 2017-05-04 | 2020-01-28 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for implementing a scheduler with preemptive termination of existing workloads to free resources for high priority items |
JP7267819B2 (ja) * | 2019-04-11 | 2023-05-02 | 株式会社 日立産業制御ソリューションズ | 並列タスクスケジューリング方法 |
KR102247249B1 (ko) * | 2019-10-31 | 2021-05-03 | 주식회사 티맥스티베로 | 데이터베이스 관리 시스템에서 비동기적 데이터 처리를 위한 컴퓨터 프로그램 |
CN112559486A (zh) * | 2020-11-11 | 2021-03-26 | 国网江苏省电力有限公司信息通信分公司 | 一种数据中台统一任务调度管理*** |
CN113641476B (zh) * | 2021-08-16 | 2023-07-14 | 腾讯科技(深圳)有限公司 | 一种任务调度方法、游戏引擎、设备及存储介质 |
-
2021
- 2021-08-16 CN CN202110941214.9A patent/CN113641476B/zh active Active
-
2022
- 2022-07-19 EP EP22857490.1A patent/EP4310677A4/en active Pending
- 2022-07-19 WO PCT/CN2022/106410 patent/WO2023020177A1/zh active Application Filing
-
2023
- 2023-05-17 US US18/319,254 patent/US20230289223A1/en active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108279980A (zh) * | 2018-01-22 | 2018-07-13 | 上海联影医疗科技有限公司 | 资源分配方法及***和资源分配终端 |
CN109783229A (zh) * | 2018-12-17 | 2019-05-21 | 平安普惠企业管理有限公司 | 线程资源分配的方法及装置 |
CN109865292A (zh) * | 2019-01-10 | 2019-06-11 | 珠海金山网络游戏科技有限公司 | 一种基于游戏引擎的游戏资源构建方法和装置 |
CN112925616A (zh) * | 2019-12-06 | 2021-06-08 | Oppo广东移动通信有限公司 | 任务分配方法、装置、存储介质及电子设备 |
CN111708639A (zh) * | 2020-06-22 | 2020-09-25 | 中国科学技术大学 | 任务调度***及方法、存储介质及电子设备 |
CN111831434A (zh) * | 2020-07-01 | 2020-10-27 | Oppo广东移动通信有限公司 | 资源分配方法、装置、存储介质及电子设备 |
CN113238838A (zh) * | 2021-04-22 | 2021-08-10 | ***股份有限公司 | 一种任务调度方法、装置及计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
A Hybrid Computing Solution and Resource Scheduling Strategy for Edge Computing in Smart Manufacturing;Xiaomin Li 等;IEEE TRANSACTIONS ON INDUSTRIAL INFORMATICS;第15卷(第7期);全文 * |
一种云环境中的动态细粒度资源调度方法;周墨颂 等;软件学报;第31卷(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
EP4310677A1 (en) | 2024-01-24 |
EP4310677A4 (en) | 2024-05-22 |
US20230289223A1 (en) | 2023-09-14 |
CN113641476A (zh) | 2021-11-12 |
WO2023020177A1 (zh) | 2023-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Shi et al. | MDP and machine learning-based cost-optimization of dynamic resource allocation for network function virtualization | |
CN109144688B (zh) | 异构多核可重构计算平台上任务调度的方法和装置 | |
CN110898428B (zh) | 多虚拟对象交互的方法、装置、服务器及存储介质 | |
CN111488205B (zh) | 面向异构硬件架构的调度方法和调度*** | |
US9898700B2 (en) | Method, apparatus, and artificial intelligence server for determining artificial intelligence behavior | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
CN105786603B (zh) | 一种基于分布式的高并发业务处理***及方法 | |
CN103765387A (zh) | 便携式计算装置中的分布式资源管理 | |
CN112416585A (zh) | 面向深度学习的gpu资源管理与智能化调度方法 | |
WO2022000972A1 (zh) | 任务的处理方法和装置、存储介质、电子装置 | |
CN113641476B (zh) | 一种任务调度方法、游戏引擎、设备及存储介质 | |
Galante et al. | A programming-level approach for elasticizing parallel scientific applications | |
CN112988344A (zh) | 分布式批量任务调度方法、装置、设备及存储介质 | |
CN111309472A (zh) | 一种基于虚拟机预部署的在线虚拟资源分配方法 | |
CN108073457B (zh) | 一种超融合基础架构的分层资源管理方法、装置及*** | |
CN112527509A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
CN113032102A (zh) | 资源重调度方法、装置、设备和介质 | |
CN110704195A (zh) | 一种cpu调整方法、服务器及计算机可读存储介质 | |
CN109960579A (zh) | 一种调整业务容器的方法及装置 | |
CN110221902A (zh) | 一种基于虚拟机的数据传输方法及相关装置 | |
CN111737166B (zh) | 数据对象的处理方法、装置及设备 | |
CN112994911B (zh) | 计算卸载方法、装置及计算机可读存储介质 | |
CN116510312A (zh) | 一种云游戏多开实现方法、装置、设备及存储介质 | |
CN114116220B (zh) | 一种gpu共享控制方法、gpu共享控制装置及存储介质 | |
Freitas et al. | A batch task migration approach for decentralized global rescheduling |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40054536 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |