CN111831414A - 线程迁移方法、装置、存储介质及电子设备 - Google Patents

线程迁移方法、装置、存储介质及电子设备 Download PDF

Info

Publication number
CN111831414A
CN111831414A CN202010631175.8A CN202010631175A CN111831414A CN 111831414 A CN111831414 A CN 111831414A CN 202010631175 A CN202010631175 A CN 202010631175A CN 111831414 A CN111831414 A CN 111831414A
Authority
CN
China
Prior art keywords
thread
processor core
target
core
type
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.)
Withdrawn
Application number
CN202010631175.8A
Other languages
English (en)
Inventor
范辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN202010631175.8A priority Critical patent/CN111831414A/zh
Publication of CN111831414A publication Critical patent/CN111831414A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • G06F9/5088Techniques for rebalancing the load in a distributed system involving task migration

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

线程迁移方法、装置、存储介质及电子设备
技术领域
本申请涉及电子设备技术领域,特别涉及一种线程迁移方法、装置、存储介质及电子设备。
背景技术
随着技术的发展,电子设备中安装的各类应用程序越来越多,例如视频类应用、游戏类应用以及即时通讯类应用等。这使得电子设备经常需要在前台和后台运行多个应用程序,容易在用户交互场景中出现卡顿现象。
发明内容
第一方面,本申请实施例提供一种线程迁移方法,所述方法包括:
检测初始处理器核心中是否有第一类线程,所述第一类线程为执行用户交互事件中相关任务的线程;
当所述初始处理器核心中有所述第一类线程时,将所述初始处理器核心中的所述第一类线程作为第一目标线程;
从所述多个处理器核心中确定出计算能力比所述初始处理器核心高的第一目标处理器核心;
将所述第一目标线程迁移到所述第一目标处理器核心。
第二方面,本申请实施例提供一种的线程迁移装置,所述装置包括:
检测模块,用于检测初始处理器核心中是否有第一类线程,所述第一类线程为执行用户交互事件中相关任务的线程;
第一确定模块,用于当所述初始处理器核心中有所述第一类线程时,将所述初始处理器核心中的所述第一类线程作为第一目标线程;
第二确定模块,用于从所述多个处理器核心中确定出计算能力比所述初始处理器核心高的第一目标处理器核心;
处理模块:用于将所述第一目标线程迁移到所述第一目标处理器核心。
第三方面,本申请实施例提供一种存储介质,其上存储有计算机程序,当所述计算机程序在计算机上执行时,使得所述计算机执行本申请实施例提供的方法。
第四方面,本申请实施例还提供一种电子设备,包括存储器,处理器,所述处理器通过调用所述存储器中存储的计算机程序,用于执行本申请实施例提供的方法。
本申请实施例中检测初始处理器核心中是否有第一类线程,所述第一类线程为执行用户交互事件中相关任务的线程;当所述初始处理器核心中有所述第一类线程时,将所述初始处理器核心中的第一类线程作为第一目标线程;从所述多个处理器核心中确定出计算能力比所述初始处理器核心高的第一目标处理器核心;将所述第一目标线程迁移到所述第一目标处理器核心。本申请实施例中当检测到第一类线程在计算能力低的处理器核心时,将第一类线程迁移到计算能力高的处理器核心中,使得执行用户交互事件相关任务的第一类线程获得更高效的处理,从而减少了用户交互场景下的卡顿现象,提升了用户体验。
附图说明
下面结合附图,通过对本申请的具体实施方式详细描述,将使本申请的技术方案及其有益效果显而易见。
图1是本申请实施例提供的线程迁移方法的流程示意图。
图2是本申请实施例提供的线程迁移方法的另一流程示意图。
图3是本申请实施例提供的线程迁移方法的场景示意图。
图4是本申请实施例提供的线程迁移的装置的结构示意图。
图5是本申请实施例提供的电子设备的结构示意图。
图6是本申请实施例提供的电子设备的另一结构示意图。
具体实施方式
请参照图示,其中相同的组件符号代表相同的组件,本申请的原理是以实施在一适当的运算环境中来举例说明。以下的说明是基于所例示的本申请具体实施例,其不应被视为限制本申请未在此详述的其它具体实施例。
可以理解的是,本申请实施例的执行主体可以是诸如智能手机或平板电脑等的电子设备。
请参阅图1,图1是本申请实施例提供的线程迁移方法的流程示意图。该线程调度方法可以应用于电子设备。该线程调度方法的流程可以包括:
在101中,检测初始处理器核心中是否有第一类线程,第一类线程为执行用户交互事件中相关任务的线程。
随着技术的发展,电子设备中安装的各类应用程序越来越多,例如视频类应用、游戏类应用以及即时通讯类应用等。这使得电子设备经常需要在前台和后台运行多个应用程序,容易在用户交互场景中出现卡顿现象。
本申请实施例中,电子设备的操作系统可以是基于Linux内核的系统,例如,安卓操作系统等。电子设备上运行着系统进程和应用程序的进程,线程是进程的一条执行路径,是程序执行时的最小单位。一个进程可以有多个线程,但至少有一个线程。
对于内核来说,在进行资源调度时,比如CPU调度,都是具体到某个线程的。进程内有一个主线程,它也会创建出很多子线程来协助工作。比如一个内容交互应用程序的进程,它会创建一个主线程来执行代码,执行途中也会创建其它子线程来协助运行各部分的任务代码。
一般情况下,内核中的线程是有区分调度类的。内核中的线程最常见的是CFS(complete fair schedule,完全公平调度)调度类线程(比如UI线程、Render线程以及很多比较常见的线程都是CFS的)、RT(Real Time scheduler,实时调度)调度类线程(比如Surface flinger线程以及一些其他核心线程)。本申请实施例的方案适用于CFS线程的调度。
本申请实施例可以应用于多核心处理器。在ARM标准的架构中,CPU核心的计算能力是存在差异的,一般会将计算能力较强的核心称为大核,计算能力较弱的核心称为小核,计算能力介于大核和小核的核心称为中核。大核、中核和小核均具有各自固定的逻辑结构,包括缓存、执行单元、指令级单元和总线接口等逻辑单元。比如,对于八核心处理器来说,其具有一个大核,三个中核、四个小核。上述核心数量仅为举例说明,本申请实施例对于处理器的核心数量并不做具体限制,当至少有两个核心时,都可以使用本申请实施例的方案。如果电子设备的处理器是多核心处理器,则每一个核心可以当作一个独立的处理器核心。比如,如果电子设备为八核处理器,则每一个核心为一个独立的处理器核心。
其中,处理器核心的计算能力,也就是说处理器核心的能够提供的计算能力。在同样的频率下,一个微架构是A77的处理器核心显然算力要大于A57的处理器核心。如果处理器核心的微架构都是一样的,那么一个最大频率是2.2GHz的处理器核心算力肯定是大于最大频率是1.1GHz的处理器核心。因此,确定了微架构和最大频率,一个处理器核心的算力就基本确定了。
当线程生成时,Linux系统根据各个处理器核心的负载和计算能力为每一个线程分配一个初始处理器核心。Linux内核会定时产生一个中断,启动周期性调度器,周期性调度器由scheduler_tick()函数实现,当中断产生后,触发Linux系统对各个处理器核心负载情况进行检测,并根据检测的负载情况调整各个处理器核心上线程的分布。本申请实施例中,当中断产生后,会触发检测初始处理器核心中是否为第一类线程,第一类线程为执行用户交互事件中相关任务的线程。
在一种实施方式中,检测初始处理器核心是否是多个处理器核心中计算能力最高的处理器核心;若否,则检测初始处理器核心中是否有第一类线程。可以理解的是,当初始处理器核心已经是计算能力最高的处理器核心时,初始处理器核心上如果有第一线程也都已经获得最高的线程执行效率,因此不需要再检测初始处理器核心中是否有第一类线程。
执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,故本申请实施例中,确定出执行用户交互事件中相关任务的线程,并将这些与用户体验紧密相关的线程记为ux(user experience,用户体验)线程,作为第一类线程。
由于产生用户可感知的界面的卡顿的场景多是相对于运行在前台的进程来说的。因此,在一种实施方式中,在检测到有进程切换到前台运行时,确定前台进程;从前台进程的线程中识别出用于执行用户交互事件中相关任务的线程,将这些线程作为第一类线程。
在一种实施方式中,第一类线程包括进程运行时创建的一些用于直接执行用户交互事件的相关任务的线程,如UI(user interface,用户界面)线程,Render(渲染)线程,GL线程,用户输入事件的分发线程,用户输入事件的检测线程等。这些线程是否能够流畅运行决定着是否会在用户与该进程的交互界面中产生用户可感知的卡顿。
其中,第一类线程一般是应用级线程,这些线程可以是通过对实际的卡顿场景进行分析来确定。比如,在测试中,如果某一用户交互场景下发生了应用卡顿,通过对该场景分析发现卡顿现象是某个线程处理任务太慢导致的,则可以认为该线程是用于执行用户交互事件中相关任务的,该线程的运行与用户体验紧密相关,可以将该线程作为第一类线程。
由于在执行用户交互事件的过程中,除了应用级线程之外,可能还涉及到一些系统级的线程来完成任务,系统框架层也需要将这些系统级线程标记为第一类线程。一般这些线程在系统启动时就会创建,因此,可以在检测到系统启动时,识别出这些线程并进行标记,比如,Surfaceflinger线程、系统动画线程等。或者,在系统运行过程中,如果检测到有新的系统进程的线程创建并用来执行用户交互事件中相关任务,系统框架层也将这些线程标记为第一类线程。
此外,在一种实施方式中,还有一些线程虽然并没有直接地执行用户交互事件的相关任务,但是这些线程的运行情况也会影响到第一类线程的运行情况,进而间接地影响到用户交互事件的相关任务的执行。也就是说,这些线程并不是总是与用户体验相关,但是这些线程在执行过程的某段时间内,可能通过资源约束与第一类线程产生关联,因此,在一些实施例中,为了进一步地减少交互场景下的卡顿现象,内核层将这些与第一类线程之间有约束关系的线程也标记为第一类线程。而一旦这种约束关系结束,就会将该线程恢复至非第一类线程。其中,具体的约束关系包括但不限于进程间通信、线程间通信或者持有临界资源等。比如,第一类线程通过进程间通信请求的普通线程,持有第一类线程需要的等待信号量、读写信号量、互斥锁等临界资源的普通线程等,本申请实施例中将这类线程也标记为第一类线程。
在102中,当初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。
第一类线程为执行用户交互事件中相关任务的线程,执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,因此本申请实施例从线程的运行情况是否会影响到用户体验的角度出发,检测初始处理器核心中是否有第一类线程时,当初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。
在一种实施方式中,若初始处理器核心不是多个处理器核心中计算能力最高的处理器核心,且初始处理器核心中有第一类线程,可以计算该第一类线程执行该所需的计算能力,若该第一类线程执行所需的计算能力占初始处理器核心所能提供的计算能力的比例超过预设阈值,则将初始处理器核心中的第一类线程作为第一目标线程。
在一种实施方式中,若初始处理器核心不是多个处理器核心中计算能力最高的处理器核心,且初始处理器核心中有第一类线程,可以根据该初始处理器核心的计算能力,计算出初始处理器核心处理完该第一类线程的处理时长,若处理时长大于第一预设时长,则将初始处理器核心中的第一类线程作为第一目标线程。
在103中,从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心。
本申请实施例可以应用于多核心处理器。比如,对于八核心处理器来说,其具有一个大核,三个中核、四个小核。大核拥有比中核更高的计算能力,中核拥有比小核更高的计算能力,例如大核的时钟频率比中核时钟频率大,中核的时钟频率比小核时钟频率大,即大核的线程执行效率高于中核的线程执行效率、中核的线程执行效率高于小核的线程执行效率。
当检测到初始处理器核心中有第一类线程时,从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心。也可以理解为,电子设备具有多个处理器核心,如果初始处理器核心的计算能力低于其它处理器核心,那么计算能力高于初始处理器的其它处理器核心都可以作为第一目标处理器核心。
可以理解的是,如果初始处理器核心的计算能力不低于其它处理器核心,也就是说第一线程已经在计算能力最高的处理器核心中,则不需要从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心。
比如,电子设备的处理器是八核心处理器,其具有四个大核、四个小核,大核的计算能力高于小核计算能力。若初始处理器核心为小核,且检测到初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。由于初始处理器的计算能力低于四个大核的计算能力,那么四个大核都可以作为第一目标处理器核心。
在一种实施方式中,当从多个处理器核心中确定出计算能力最高的处理器核心有多个时,从计算能力最高的处理器核心中确定出负载最轻的一个处理器核心作为第一目标处理器核心,比如上述四个大核都可以作为第一目标处理器核心,那么从四个大核中确定出负载最轻的一个处理器核心作为第一目标处理器核心。可以理解的是,选择任务负载最轻的处理器核心作为第一目标处理器核心,有利于各个处理器核心负载均衡,也有利于第一目标处理器核心保持快速的线程处理效率。
在一种实施方式中,当从多个处理器核心中确定出计算能力最高的处理器核心有多个时,比如上述四个大核都可以作为第一目标处理器核心,那么可以计算多个处理器核心中,执行第一目标线程所需的等待时长,将所需等待时长最短的一个处理器核心作为第一目标处理器核心。可以理解的是,选择等待时长最短的一个处理器核心作为第一目标处理器核心,可以使得第一目标线程能够更加及时执行,缩短其等待时间,减少了用户交互场景下的卡顿现象。
再比如,电子设备的处理器是八核心处理器,其具有一个大核,三个中核、四个小核。其中,大核的计算能力高于中核计算能力,中核的计算能力高于小核计算能力。当检测到初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。若初始处理器核心是小核,那么初始处理器核心的计算能力低于其它三个中核、一个大核的计算能力,那么,这三个中核、一个大核都可以作为第一目标处理器核心。
在一种实施方式中,当多个处理器核心可以作为第一目标处理器核心时,可以优先将计算能力最强的大核作为第一目标处理器核心。比如,上述三个中核、一个大核都可以作为第一目标处理器核心,那么优先将大核作为第一目标处理器核心。
在一种实施方式中,当多个处理器核心可以作为第一目标处理器核心时,比如,上述三个中核、一个大核都可以作为第一目标处理器核心,可以按照处理器核心的计算能力由高到低的顺序,计算若将第一目标线程迁移到计算能力最高的大核,执行该第一目标线程所需的等待时长,若等待时长小于第二预设时长,则确定出计算能力最高的大核为第一目标处理器核心;若等待时长大于第二预设时长,比如,大核中已经有多个第一类线程,则新迁移的第一目标线程需要等待较长时间才能被执行。那么,计算若将该第一目标线程迁移到计算能力高于初始处理器核心的中核,执行该第一目标线程所需的等待时长,若等待时长小于第三预设时长,则确定出计算能力高于初始处理器的中核作为第一目标处理器核心;其中第二预设时长大于第三预设时长。可以理解的是,大核的线程执行效率高于中核的执行效率,因此设置的第二预设时长可以大于第三预设时长。
若初始处理器核心是中核,初始处理器的计算能力低于一个大核的计算能力,则将计算能力最高的大核作为第一目标处理器核心。
在104中,将第一目标线程迁移到第一目标处理器核心。
本申请实施例中,当检测到初始处理器核心中有第一类线程,将初始处理器核心中的第一类线程作为第一目标线程;从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心;将第一目标线程迁移到第一目标处理器核心。其中,第一类线程为执行用户交互事件中相关任务的线程,执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,因此本申请实施例从线程的运行情况是否会影响到用户体验的角度出发,当检测到第一类线程在计算能力低的处理器核心时,将第一类线程迁移到计算能力强的处理器核心中,使得执行用户交互事件相关任务的第一类线程获得更高效的处理,从而减少了用户交互场景下的卡顿现象,提升了用户体验。
请参阅图2,图2为本申请实施例提供的线程迁移方法的另一流程示意图,流程可以包括:
在201中,确定出用于执行用户交互事件中相关任务的第二目标线程。
本申请实施例中,电子设备的操作系统可以是基于Linux内核的系统,例如,安卓操作系统等。电子设备上运行着系统进程和应用程序的进程,线程是进程的一条执行路径,是程序执行时的最小单位。一个进程可以有多个线程,但至少有一个线程。
对于内核来说,在进行资源调度时,比如CPU调度,都是具体到某个线程的。进程内有一个主线程,它也会创建出很多子线程来协助工作。比如一个内容交互应用程序的进程,它会创建一个主线程来执行代码,执行途中也会创建其它子线程来协助运行各部分的任务代码。
其中,执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,故本申请实施例中,确定出执行用户交互事件中相关任务的线程,并将这些与用户体验紧密相关的线程记为ux线程(user experience,用户体验),也即第二目标线程。
在202中,为第二目标线程添加预设标签,以将第二目标线程标记为第一类线程。
由于第二目标线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,故本申请实施例中,确定出执行用户交互事件中相关任务的第二目标线程,为第二目标线程添加预设标签,以将第二目标线程标记为第一类线程。
其中,电子设备的系统架构至少包括应用框架(framework)层和内核(kernel)层,本申请实施例,从应用框架层和内核层的角度对ux线程进行识别和标记,例如,应用框架层为一些直接执行用户交互事件中相关任务的线程添加预设标签,以将这些线程标记为静态ux线程,内核层将一些间接地影响到用户交互事件中相关任务执行的线程标记为动态ux线程。
可以理解的,预设标签可以为ux标签,其添加方式如下:Linux使用task_struct结构体描述和记录线程,每个线程都有对应的task_struct结构体。task_struct中记录了线程的名称、标识符、状态、优先级、内存指针、上下文数据等属性信息。因此,应用框架层可以在task_struct结构体中增加对应的ux flag成员,以将前台进程的UI线程、Render线程、GL线程等执行用户交互事件中相关任务的线程,通过标记ux flag位,使内核层能够识别该线程的任务属性。
本申请实施例中的进程包括系统级进程和应用级进程。由于产生用户可感知的界面的卡顿的场景多是相对于运行在前台的进程来说的。因此,本申请实施例的方案中,“确定出用于执行用户交互事件中相关任务的第二目标线程”包括:在检测到有进程切换到前台运行时,确定前台进程;从前台进程的线程中识别出用于执行用户交互事件中相关任务的第一预设线程,将第一预设线程作为第二目标线程。
在一种实施方式中,第一预设线程包括进程运行时创建的一些用于直接执行用户交互事件的相关任务的线程,如UI(user interface,用户界面)线程,Render(渲染)线程,GL线程,用户输入事件的分发线程,用户输入事件的检测线程等。这些线程是否能够流畅运行决定着是否会在用户与该进程的交互界面中产生用户可感知的卡顿。
比如,用户使用聊天软件与某一好友聊天,用户在对话框输入文字,电子设备通过服务器将用户输入的文字发送至该好友的电子设备。在这次交互事件中,需要UI线程、Render线程、用户输入事件的分发线程、用户输入事件的检测线程等线程共同工作,以完成本次用户交互事件,其中,每一个线程的运行都需要系统为其分配资源。因此,在检测到该聊天软件在前台运行时,识别出这些线程,将这些线程作为第一预设线程,并标记为ux线程。
其中,第一预设线程一般是应用级线程,这些线程可以是通过对实际的卡顿场景进行分析来确定。比如,在测试中,如果某一用户交互场景下发生了应用卡顿,通过对该场景分析发现卡顿现象是某个线程处理任务太慢导致的,则可以认为该线程是用于执行用户交互事件中相关任务的,该线程的运行与用户体验紧密相关,可以将该线程作为第一预设线程。
基于此,可以通过对各种可能的卡顿场景进行测试,记录这些导致卡顿出现的线程。电子设备中存储这些第一预设线程的相关信息,当进程切换到前台运行时,将该进程下的属于预先记录的第一预设线程的线程都标记为ux线程。
可以理解的是,对于电子设备来说,存储的第一预设线程的相关信息并不是不可修改的,当进行系统升级时,可以对第一预设线程的相关信息进行更新。
在一种实施例中,为第二目标线程添加预设标签之后,该方法还包括:若前台进程为应用进程,则在检测到前台进程切换至后台运行时,删除第一预设线程的预设标签。当前台进程切换到后台运行时,该进程的运行情况已经与用户体验无关,其线程的重要程度也有所下降,因此,可以将该进程对应的第一预设线程的ux标记删除,将这些ux线程恢复为普通线程。
此外,在另一实施例中,该方法还包括:当检测到有第二预设线程创建时,将创建的第二预设线程作为第二目标线程,其中,第二预设线程为系统级线程。
由于在执行用户交互事件的过程中,除了应用级线程之外,可能还涉及到一些系统级的线程来完成任务,系统框架层也需要将这些系统级线程标记为ux线程。一般这些线程在系统启动时就会创建,因此,可以在检测到系统启动时,识别出这些线程并进行标记,比如,Surfaceflinger线程、系统动画线程等。或者,在系统运行过程中,如果检测到有新的系统进程的线程创建并用来执行用户交互事件中相关任务,系统框架层也将这些线程标记为ux线程。比如,SystemUI线程。其中,第二预设线程也可以通过对实际的卡顿场景进行分析来确定。比如,在测试中,如果某一用户交互场景下发生了应用卡顿,通过对该场景分析发现卡顿现象是某个系统级线程处理任务太慢导致的,则可以认为该系统级线程是用于执行用户交互事件中相关任务的,该系统级线程的运行与用户体验紧密相关,可以将该系统级线程作为第二预设线程。电子设备中存储这些第二预设线程的相关信息,如果检测到系统创建了这些线程,则将其标记为ux线程。
对于系统级的第二预设线程来说,即使发生了进程的前后台切换,这些线程始终与用户体验相关,所以始终保有ux标签。
在另一实施例中,在前台进程的运行过程中,当检测到有新线程创建时,确定新创建的线程是否用于执行用户交互事件中的相关任务;当新创建的线程用于执行用户交互事件中的相关任务时,将新创建的线程标记为ux线程。
前台进程在运行过程中,如果有用户交互事件发生,除了上述应用级的第一预设线程和系统级的第二预设线程之外,还可能会有一些临时创建的任务线程,这些任务线程的运行也会直接影响到是否会在用户与该进程的交互界面中产生用户可感知的卡顿。因此,应用框架层会将这些线程也标记为ux线程,以优化系统对该线程的资源分配。
其中,电子设备根据检测到的用户指令确定发生的用户交互事件。用户交互事件一般是指用户触发了某指令后,电子设备需要即时的对该指令进行响应,进行某种处理并将处理结果显示在界面上的情况。例如,用户使用电子设备观看视频、编辑短信、使用聊天软件、使用游戏软件、控制电子设备界面的切换、使用浏览浏览网页等,都属于用户交互事件。比如,用户使用聊天软件与某一好友聊天,用户在对话框输入文字,电子设备通过服务器将用户输入的文字发送至该好友的电子设备。在这个过程中,电子设备需要调度多个线程以完成本次用户交互事件,从该用户交互事件的开始到完成的整个过程中,进程创建的用来完成这次用户交互事件的线程都可以认为是与用户体验相关的线程。
在用户交互事件中临时创建的任务线程在执行完对应的任务后就会被销毁,其自然会丢失掉ux标签。
需要说明的是,上述几种ux线程仅为举例说明,并不局限于此,只要是直接地执行用户交互事件中相关任务的线程,使得其运行情况直接地影响到用户体验的线程,都可以将其标记为ux线程。对于应用框架层来说,在检测到新创建的线程是用来执行用户交互事件,或者检测到某些常驻系统级线程是用以处理用户交互事件时,为这些线程添加ux标签,以将其标记为ux线程。
还有一些线程虽然并没有直接地执行用户交互事件的相关任务,但是这些线程的运行情况也会影响到ux线程的运行情况,进而间接地影响到用户交互事件的相关任务的执行。也就是说,这些线程并不是总是与用户体验相关,但是这些线程在执行过程的某段时间内,可能通过资源约束与ux线程产生关联,因此,在一些实施例中,为了进一步地减少交互场景下的卡顿现象,内核层将这些与ux线程之间有约束关系的线程也标记为ux线程。而一旦这种约束关系结束,就会将该线程恢复至非ux线程。其中,具体的约束关系包括但不限于进程间通信、线程间通信或者持有临界资源等。比如,ux线程通过进程间通信请求的普通线程,持有ux线程需要的等待信号量、读写信号量、互斥锁等临界资源的普通线程等,本申请实施例中将这类线程也标记为ux线程。
基于此,在一些实施例中,该方法还包括:对第一类线程的运行状态进行检测;当检测到有第一类线程进入阻塞状态时,确定与进入阻塞状态的第一类线程之间有约束关系的关联线程;为关联线程添加预设标签,以将关联线程标记为第一类线程。
在一些实施例中,将关联线程标记为第一类线程之后,还包括:当检测到约束关系解除时,删除关联线程的预设标签。
其中,关于线程的阻塞状态,在内核层面一般会区分为D状态(Uninterruptablesleep状态,不可中断的睡眠状态)和S状态(interruptable sleep状态,可中断的睡眠状态),比如,线程发起IO请求但得不到满足,就进入D状态;线程发起同步Binder请求,就会进入S状态。线程进入这些状态一般都是因为这些都是线程任务执行途中因为某些原因或者逻辑,需要主动或者被动地放弃CPU资源。
该实施例中,内核层对ux线程的状态进行检测,当检测到ux线程进入到堵塞状态时,确定出与进入堵塞状态的ux线程之间具有约束关系的关联线程,如果这些关联线程没有及时分配到资源,比如IO资源,而导致运行受阻,则由于关联线程的运行缓慢又会导致该ux线程长时间处于阻塞状态,因此,为了避免该ux线程长时间处于阻塞状态,内核层会将识别出的关联线程也标记为ux线程,以提高其IO处理效率,保证其及时执行,进而快速解除该ux线程的阻塞状态。
在203中,检测初始处理器核心中是否有第一类线程,第一类线程为执行用户交互事件中相关任务的线程。
一般情况下,内核中的线程是有区分调度类的。内核中的线程最常见的是CFS(complete fair schedule,完全公平调度)调度类线程(比如UI线程、Render线程以及很多比较常见的线程都是CFS的)、RT(Real Time scheduler,实时调度)调度类线程(比如Surface flinger线程以及一些其他核心线程)。本申请实施例的方案适用于CFS线程的调度。
因此本申请实施例中,检测初始处理器核心中是否有第一类线程包括:检测初始处理器核心中是否有完全公平调度线程;若有,则检测初始处理器核心中完全公平调度线程是否为第一类线程。
本申请实施例可以应用于多核心处理器。在ARM标准的架构中,CPU核心的计算能力是存在差异的,一般会将计算能力较强的核心称为大核,计算能力较弱的核心称为小核,计算能力介于大核和小核的核心称为中核。大核、中核和小核均具有各自固定的逻辑结构,包括缓存、执行单元、指令级单元和总线接口等逻辑单元。比如,对于八核心处理器来说,其具有一个大核,三个中核、四个小核。上述核心数量仅为举例说明,本申请实施例对于处理器的核心数量并不做具体限制,当至少有两个核心时,都可以使用本申请实施例的方案。如果电子设备的处理器是多核心处理器,则每一个核心可以当作一个独立的处理器核心。比如,如果电子设备为八核处理器,则每一个核心为一个独立的处理器核心。
本申请实施例中已确定出执行用户交互事件中相关任务的第二目标线程,且为第二目标线程添加预设标签,以将第二目标线程标记为第一类线程。因此检测初始处理器核心中是否有第一类线程,可以通过检测初始处理器核心上每一个线程是否具有预设标签,以确定初始处理器核心中是否有第一类线程,其中,将具有预设标签的线程确定为第一类线程。若初始处理器核心中至少有一个线程具有预设标签,则初始处理器核心中具有第一类线程;若初始处理器核心中的全部线程都没有预设标签,则初始处理器核心中没有第一类线程。
当线程生成时,Linux内核根据各个处理器核心的负载和计算能力为每一个线程分配一个初始处理器核心。Linux内核为每个处理器核心都配置一个运行队列,用以维护各个处理器核心需要运行的所有线程,调度器会按一定的规则从运行队列中获取某个线程来执行。如果一个线程正挂在某个处理器核心的运行队列上,此时它处于就绪状态,尚未得到处理器核心资源,调度器会适时地通过负载均衡来调整任务的分布;当线程从运行队列中取出并开始执行时,便处于运行状态,若该状态下的任务负载不是当前处理器核心所能承受的,那么该线程就是超负载线程,调度器会将其标记为misfit task,周期性地触发主动迁移,将misfit task布置到更高计算能力的处理器核心。
在一种实施方式中,检测初始处理器核心中是否有第一类线程之前,还包括:检测初始处理器核心中是否有超负载线程,也就是检测是否有线程标记为misfit task;若有,则从多个处理器核心中确定出计算能力比初始处理器核心高的第二目标处理器核心,并将超负载线程迁移到第二目标处理器核心;若否,则执行检测初始处理器核心中是否有第一类线程。
因此如果初始处理器核心中有超负载线程,比如,对于八核心处理器来说,其具有一个大核,三个中核、四个小核,如果初始处理器核心为小核,小核上有超负载线程,那么Linux系统将根据各个处理器核心的负载均衡情况,将超负载线程迁移至三个中核或一个大核。而且,本申请实施例中即使初始处理器核心中没有超负载线程,也就是没有标记为misfit task的线程,本申请实施例也会检测初始处理器中是否有执行用户交互事件中相关任务的第一类线程。
在一种实施方式中,检测初始处理器核心是否是多个处理器核心中计算能力最高的处理器核心;若否,则检测初始处理器核心中是否有第一类线程。可以理解的是,当初始处理器核心已经是计算能力最高的处理器核心时,在初始处理器核心上的线程如果有第一线程也都已经获得最高的线程执行效率,因此不需要再检测初始处理器核心中是否有第一类线程。
在204中,当初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。
第一类线程为执行用户交互事件中相关任务的线程,执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,因此本申请实施例从线程的运行情况是否会影响到用户体验的角度出发,检测初始处理器核心中是否有第一类线程时,当初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。
在一种实施方式中,若初始处理器核心不是多个处理器核心中计算能力最高的处理器核心,且初始处理器核心中有第一类线程,可以计算该第一类线程执行该所需的计算能力,若该第一类线程执行所需的计算能力占初始处理器核心所能提供的计算能力的比例超过预设阈值,则将初始处理器核心中的第一类线程作为第一目标线程。
在一种实施方式中,若初始处理器核心不是多个处理器核心中计算能力最高的处理器核心,且初始处理器核心中有第一类线程,可以根据该初始处理器核心的计算能力,计算出初始处理器核心处理完该第一类线程的处理时长,若处理时长大于第一预设时长,则将初始处理器核心中的第一类线程作为第一目标线程。
在205中,从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心。
本申请实施例可以应用于多核心处理器。比如,对于八核心处理器来说,其具有一个大核,三个中核、四个小核。大核拥有比中核更高的计算能力,中核拥有比小核更高的计算能力,例如大核的时钟频率比中核时钟频率大,中核的时钟频率比小核时钟频率大,即大核的线程执行效率高于中核的线程执行效率、中核的线程执行效率高于小核的线程执行效率。
当检测到初始处理器核心中有第一类线程时,从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心。也可以理解为,电子设备的处理器具有多个处理器核心,如果初始处理器核心的计算能力低于其它处理器核心,那么计算能力高于初始处理器的其它处理器核心都可以作为第一目标处理器核心。
如果初始处理器核心的计算能力不低于其它处理器核心,也就是说第一线程已经在计算能力最高的处理器核心中,则不需要从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心。
比如,电子设备的处理器是八核心处理器,其具有四个大核、四个小核,大核的计算能力高于小核计算能力。若初始处理器核心为小核,且检测到初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。由于初始处理器的计算能力低于四个大核的计算能力,那么四个大核都可以作为第一目标处理器核心。
在一种实施方式中,当从多个处理器核心中确定出计算能力最高的处理器核心有多个时,从计算能力最高的处理器核心中确定出负载最轻的一个处理器核心作为第一目标处理器核心。比如上述四个大核都可以作为第一目标处理器核心,那么从四个大核中确定出负载最轻的一个处理器核心作为第一目标处理器核心。可以理解的是,选择任务负载最轻的处理器核心作为第一目标处理器核心,有利于各个处理器核心负载均衡,也有利于第一目标处理器核心保持快速的线程处理效率。
在一种实施方式中,当从多个处理器核心中确定出计算能力最高的处理器核心有多个时,比如上述四个大核都可以作为第一目标处理器核心,那么可以计算多个处理器核心中,执行第一目标线程所需的等待时长,将所需等待时长最短的一个处理器核心作为第一目标处理器核心。可以理解的是,选择等待时长最短的一个处理器核心作为第一目标处理器核心,可以使得第一目标线程能够更加及时执行,缩短其等待时长,减少了用户交互场景下的卡顿现象。
再比如,电子设备的处理器是八核心处理器,其具有一个大核,三个中核、四个小核。其中,大核的计算能力高于中核计算能力,中核的计算能力高于小核计算能力。当检测到初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程。若初始处理器核心是小核,那么初始处理器核心的计算能力低于其它三个中核和一个大核的计算能力,那么,这三个中核和一个大核都可以作为第一目标处理器核心。
在一种实施方式中,当多个处理器核心可以作为第一目标处理器核心时,可以优先将计算能力最强的大核作为第一目标处理器核心。比如,上述三个中核和一个大核都可以作为第一目标处理器核心,那么优先将大核作为第一目标处理器核心。
在一种实施方式中,当多个处理器核心可以作为第一目标处理器核心时,比如,上述三个中核和一个大核都可以作为第一目标处理器核心,可以按照处理器核心的计算能力由高到低的顺序,计算若将第一目标线程迁移到计算能力最高的大核,执行该第一目标线程所需的等待时长,若等待时长小于第二预设时长,则确定出计算能力最高的大核为第一目标处理器核心;若等待时长大于第二预设时长,比如,大核中已经有多个第一类线程,则新迁移的第一目标线程需要等待较长时间才能被执行。那么,计算若将该第一目标线程迁移到计算能力高于初始处理器核心的中核,执行该第一目标线程所需的等待时长,若等待时长小于第三预设时长,则确定出计算能力高于初始处理器的中核作为第一目标处理器核心;其中第二预设时长大于第三预设时长。可以理解的是,大核的线程执行效率高于中核的执行效率,因此设置的第二预设时长可以大于第三预设时长。
若初始处理器核心是中核,初始处理器的计算能力低于一个大核的计算能力,则将计算能力最高的大核作为第一目标处理器核心。
在206中,将所述第一目标线程迁移到所述第一目标处理器核心。
本申请实施例中,当检测到初始处理器核心中有第一类线程,将初始处理器核心中的第一类线程作为第一目标线程;从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心;将第一目标线程迁移到第一目标处理器核心。
其中,第一类线程为执行用户交互事件中相关任务的线程,执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿。因此本申请实施例从线程的运行情况是否会影响到用户体验的角度出发,当检测到第一类线程在计算能力低的处理器核心时,将第一类线程迁移到计算能力强的处理器核心中,使得执行用户交互事件相关任务的第一类线程获得更高效的处理。
在207中,基于第一目标处理器核心优先执行第一目标线程。
将第一目标线程迁移到第一目标处理器核心后,第一目标处理器核心将优先执行第一目标线程。
在一种实施方式中,当识别到第一目标处理器核心有第一类线程时,则第一目标处理器核心将优先执行第一类程序。使得第一目标线程能够及时执行,且由于第一目标处理器核心的线程执行效率高,使得执行用户交互事件相关任务的第一类线程可以既及时又高效得到执行,从而减少了用户交互场景下的卡顿现象,提升了用户体验。
请参阅图3,图3是本申请实施例提供的线程迁移方法的场景示意图。
执行用户交互事件中相关任务的线程是否能够流畅运行决定着是否会在用户交互事件中产生用户可感知的卡顿,故本申请实施例,确定出执行用户交互事件中相关任务的线程,并将这些与用户体验紧密相关的线程记为ux线程(user experience,用户体验),也即第二目标线程。具体的第二目标线程请参考上述实施例,在此不在赘述。
为第二目标线程添加预设标签,以将第二目标线程标记为第一类线程。
本申请实施例可以应用于多核心处理器。在ARM标准的架构中,CPU核心的计算能力是存在差异的,一般会将计算能力较强的核心称为大核,计算能力较弱的核心称为小核,计算能力介于大核和小核的核心称为中核。
例如,如图3所示,电子设备具有八核心处理器,其具有一个大核,三个中核、四个小核。大核拥有比中核更高的计算能力,中核拥有比小核更高的计算能力,例如大核的时钟频率比中核时钟频率大,中核的时钟频率比小核时钟频率大,即大核的线程执行效率高于中核的线程执行效率、中核的线程执行效率高于小核的线程执行效率。
本申请实施例中,如图3所示,比如,初始处理器核心为八个处理器核心中的一个小核,且初始处理器核心中,检测到执行用户交互事件相关任务的第一类线程:A1,那么初始处理器核心中的第一类线程A1作为第一目标线程。需要说明的是,大核、中核以及小核的线程图中没有标识。
当检测到初始处理器核心中有第一类线程时,从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心。也可以理解为,电子设备的处理器具有多个处理器核心,如果初始处理器核心的计算能力低于其它处理器核心,那么计算能力高于初始处理器的其它处理器核心都可以作为第一目标处理器核心。
如图3所示,比如,初始处理器核心是小核,因此初始处理器的计算能力低于其它三个中核和一个大核的计算能力,那么三个中核和一个大核都可以作为第一目标处理器核心
在一种实施方式中,当多个处理器核心可以作为第一目标处理器核心时,可以从多个处理器核心中确定出计算能力最高的处理器核心,作为第一目标处理器核心。比如,上述三个中核和一个大核都可以作为第一目标处理器核心,那么可以将大核作为第一目标处理器核心。
然后,将第一目标线程从初始处理器核心迁移到第一目标处理器核心,如图3所示,将第一目标线程A1从小核迁移到大核上,并基于大核优先执行第一目标线程A1,使得第一目标线程能够及时执行,且由于大核的线程执行效率高于小核的线程执行效率,使得执行用户交互事件相关任务的第一类线程A1可以既及时又高效得到执行,从而减少了用户交互场景下的卡顿现象,提升了用户体验。
请参阅图4,图4为本申请实施例提供的线程调度装置的结构示意图。该线程调度装置可以应用于电子设备。线程迁移装置300可以包括检测模块301,第一确定模块302,第二确定模块303、处理模块304。
检测模块301用于:检测初始处理器核心中是否有第一类线程,第一类线程为执行用户交互事件中相关任务的线程;
第一确定模块302用于:当初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程;
第二确定模块303用于:从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心;
处理模块304用于:将第一目标线程迁移到第一目标处理器核心。
在一种实施方式中,检测初始处理器核心中是否有第一类线程之前,检测模块301可以用于:
检测初始处理器核心中是否有超负载线程;
若有,则从多个处理器核心中确定出计算能力比初始处理器核心高的第二目标处理器核心,并将超负载线程迁移到第二目标处理器核心;
若否,则执行检测初始处理器核心中是否有第一类线程。
在一种实施方式中,第二确定模块303可以用于:
从多个处理器核心中确定出计算能力最高的处理器核心,作为第一目标处理器核心。
在一种实施方式中,第二确定模块303可以用于:
当从多个处理器核心中确定出计算能力最高的处理器核心有多个时,从计算能力最高的处理器核心中确定出负载最轻的一个处理器核心作为第一目标处理器核心。
在一种实施方式中,将第一目标线程迁移到第一目标处理器核心之后,处理模块304可以用于:
基于第一目标处理器核心优先执行第一目标线程。
在一种实施方式中,检测模块301可以用于:
检测初始处理器核心中是否有完全公平调度线程;
若有,则检测初始处理器核心中完全公平调度线程是否为第一类线程。
在一种实施方式中,检测模块301可以用于:
检测初始处理器核心中的每一个线程是否具有预设标签,以确定目标处理器核心中是否具有第一类线程,其中,将具有预设标签的线程确定为第一类线程。
在一种实施方式中,检测模块301可以用于:
确定出用于执行用户交互事件中相关任务的第二目标线程;
为第二目标线程添加预设标签,以将第二目标线程标记为第一类线程。
申请实施例提供一种计算机可读的存储介质,其上存储有计算机程序,当计算机程序在计算机上执行时,使得计算机执行如本实施例提供的线程调度方法中的流程。
本申请实施例还提供一种电子设备,包括存储器,处理器,处理器通过调用存储器中存储的计算机程序,用于执行本实施例提供的线程调度方法中的流程。
例如,上述电子设备可以是诸如平板电脑或者智能手机等移动终端。请参阅图5,图5为本申请实施例提供的电子设备的结构示意图。
该电子设备400可以包括存储器402、处理器401等部件。本领域技术人员可以理解,图5中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储器402可用于存储应用程序和数据。存储器402存储的应用程序中包含有可执行代码。应用程序可以组成各种功能模块。处理器401通过运行存储在存储器402的应用程序,从而执行各种功能应用以及数据处理。其中,处理器401与存储器402电性连接。
处理器401是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的应用程序,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
在本实施例中,电子设备中的处理器401按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行代码加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而执行:
检测初始处理器核心中是否有第一类线程,第一类线程为执行用户交互事件中相关任务的线程;
当初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程;
从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心;
将第一目标线程迁移到第一目标处理器核心。
请参阅图6,图6为本申请实施例提供的电子设备的第二种结构示意图。电子设备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中的应用程序,从而执行:
检测初始处理器核心中是否有第一类线程,第一类线程为执行用户交互事件中相关任务的线程;
当初始处理器核心中有第一类线程时,将初始处理器核心中的第一类线程作为第一目标线程;
从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心;
将第一目标线程迁移到第一目标处理器核心。
在一种实施方式中,在检测初始处理器核心中是否有第一类线程之前,处理器401执行检测初始处理器核心中是否有超负载线程;
若有,则从多个处理器核心中确定出计算能力比初始处理器核心高的第二目标处理器核心,并将超负载线程迁移到第二目标处理器核心;
若否,则执行检测初始处理器核心中是否有第一类线程。
在一种实施方式中,在从多个处理器核心中确定出计算能力比初始处理器核心高的第一目标处理器核心中,处理器401执行从多个处理器核心中确定出计算能力最高的处理器核心,作为第一目标处理器核心。
在一种实施方式中,在从多个处理器核心中确定出计算能力最高的处理器核心,作为第一目标处理器核心中,处理器401执行当从多个处理器核心中确定出计算能力最高的处理器核心有多个时,从计算能力最高的处理器核心中确定出负载最轻的一个处理器核心作为第一目标处理器核心。
在一种实施方式中,在将所述第一目标线程迁移到第一目标处理器核心之后,处理器401执行基于第一目标处理器核心优先执行第一目标线程。
在一种实施方式中,在检测初始处理器核心中是否有第一类线程中,处理器401执行检测初始处理器核心中是否有完全公平调度算法线程;
若有,则检测初始处理器核心中完全公平调度算法线程是否为第一类线程。
在一种实施方式中,在检测初始处理器核心中是否有第一类线程中,处理器401执行检测初始处理器核心中的每一个线程是否具有预设标签,以确定目标处理器核心中是否具有第一类线程,其中,将具有预设标签的线程确定为第一类线程。
在一种实施方式中,处理器401执行确定出用于执行用户交互事件中相关任务的第二目标线程;
为第二目标线程添加预设标签,以将第二目标线程标记为第一类线程。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见上文针对线程调度方法的详细描述,此处不再赘述。
本申请实施例提供的线程调度装置与上文实施例中的线程调度方法属于同一构思,在线程调度装置上可以运行线程调度方法实施例中提供的任一方法,其具体实现过程详见线程调度方法实施例,此处不再赘述。
需要说明的是,对本申请实施例线程调度方法而言,本领域普通技术人员可以理解实现本申请实施例线程调度方法的全部或部分流程,是可以通过计算机程序来控制相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,如存储在存储器中,并被至少一个处理器执行,在执行过程中可包括如线程调度方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)等。
对本申请实施例的线程调度装置而言,其各功能模块可以集成在一个处理芯片中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中,存储介质譬如为只读存储器,磁盘或光盘等。
以上对本申请实施例所提供的线程调度方法、装置、存储介质以及电子设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

Claims (11)

1.一种线程迁移方法,应用于多核心处理器,所述多核心处理器包括多个处理器核心,其特征在于,所述方法包括:
检测初始处理器核心中是否有第一类线程,所述第一类线程为执行用户交互事件中相关任务的线程;
当所述初始处理器核心中有所述第一类线程时,将所述初始处理器核心中的所述第一类线程作为第一目标线程;
从所述多个处理器核心中确定出计算能力比所述初始处理器核心高的第一目标处理器核心;
将所述第一目标线程迁移到所述第一目标处理器核心。
2.根据权利要求1所述的线程调度方法,其特征在于,所述检测初始处理器核心中是否有第一类线程之前,还包括:
检测所述初始处理器核心中是否有超负载线程;
若有,则从所述多个处理器核心中确定出计算能力比所述初始处理器核心高的第二目标处理器核心,并将所述超负载线程迁移到所述第二目标处理器核心;
若否,则执行所述检测初始处理器核心中是否有第一类线程。
3.根据权利要求1所述的线程调度方法,其特征在于,所述从所述多个处理器核心中确定出计算能力比所述初始处理器核心高的第一目标处理器核心包括:
从所述多个处理器核心中确定出计算能力最高的处理器核心,作为所述第一目标处理器核心。
4.根据权利要求3所述的线程调度方法,其特征在于,所述从所述多个处理器核心中确定出计算能力最高的处理器核心,作为所述第一目标处理器核心包括:
当从所述多个处理器核心中确定出计算能力最高的处理器核心有多个时,从所述计算能力最高的处理器核心中确定出负载最轻的一个处理器核心,作为所述第一目标处理器核心。
5.根据权利要求1所述的线程调度方法,其特征在于,所述将所述第一目标线程迁移到所述第一目标处理器核心之后,还包括:
基于所述第一目标处理器核心优先执行所述第一目标线程。
6.根据权利要求1所述的线程调度方法,其特征在于,所述检测初始处理器核心中是否有第一类线程包括:
检测所述初始处理器核心中是否有完全公平调度线程;
若有,则检测所述初始处理器核心中所述完全公平调度线程是否为所述第一类线程。
7.根据权利要求1至7任一所述的线程调度方法,其特征在于,所述检测初始处理器核心中是否有第一类线程,包括:
检测所述初始处理器核心中的每一个线程是否具有预设标签,以确定所述初始处理器核心中是否具有所述第一类线程,其中,将具有所述预设标签的线程确定为所述第一类线程。
8.根据权利要求7所述的线程调度方法,其特征在于,还包括:
确定出用于执行用户交互事件中相关任务的第二目标线程;
为所述第二目标线程添加所述预设标签,以将所述第二目标线程标记为所述第一类线程。
9.一种线程调度装置,其特征在于,所述装置包括:
检测模块,用于检测初始处理器核心中是否有第一类线程,所述第一类线程为执行用户交互事件中相关任务的线程;
第一确定模块,用于当所述初始处理器核心中有所述第一类线程时,将所述初始处理器核心中的所述第一类线程作为第一目标线程;
第二确定模块,用于从所述多个处理器核心中确定出计算能力比所述初始处理器核心高的第一目标处理器核心;
处理模块:用于将所述第一目标线程迁移到所述第一目标处理器核心。
10.一种存储介质,其上存储有计算机程序,其特征在于,当所述计算机程序在计算机上执行时,使得所述计算机执行如权利要求1至8中任一项所述的方法。
11.一种电子设备,包括存储器,处理器,其特征在于,所述处理器通过调用所述存储器中存储的计算机程序,用于执行如权利要求1至8中任一项所述的方法。
CN202010631175.8A 2020-07-01 2020-07-01 线程迁移方法、装置、存储介质及电子设备 Withdrawn CN111831414A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010631175.8A CN111831414A (zh) 2020-07-01 2020-07-01 线程迁移方法、装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010631175.8A CN111831414A (zh) 2020-07-01 2020-07-01 线程迁移方法、装置、存储介质及电子设备

Publications (1)

Publication Number Publication Date
CN111831414A true CN111831414A (zh) 2020-10-27

Family

ID=72899666

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010631175.8A Withdrawn CN111831414A (zh) 2020-07-01 2020-07-01 线程迁移方法、装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN111831414A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112799848A (zh) * 2021-02-10 2021-05-14 联想(北京)有限公司 一种控制方法及装置
CN113842642A (zh) * 2021-09-29 2021-12-28 联想(北京)有限公司 一种为游戏应用分配资源的方法及电子设备
WO2023051178A1 (zh) * 2021-09-30 2023-04-06 荣耀终端有限公司 一种任务调度方法、电子设备、芯片系统及存储介质
WO2024007970A1 (zh) * 2022-07-06 2024-01-11 华为技术有限公司 线程调度方法及电子设备
CN117793525A (zh) * 2024-02-28 2024-03-29 荣耀终端有限公司 图像处理方法、可读介质、电子设备及程序产品

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110246995A1 (en) * 2010-04-05 2011-10-06 Oracle International Corporation Cache-aware thread scheduling in multi-threaded systems
CN104969182A (zh) * 2012-12-28 2015-10-07 英特尔公司 高动态范围软件-透明异构计算元件处理器、方法及系统
CN105528330A (zh) * 2014-09-30 2016-04-27 杭州华为数字技术有限公司 负载均衡的方法、装置、丛集和众核处理器
CN108170525A (zh) * 2016-12-07 2018-06-15 晨星半导体股份有限公司 动态调整多核心处理器的任务负载配置的装置以及方法
CN109947569A (zh) * 2019-03-15 2019-06-28 Oppo广东移动通信有限公司 绑定核心的方法、装置、终端及存储介质
CN110008027A (zh) * 2019-04-09 2019-07-12 Oppo广东移动通信有限公司 进程的运行方法、装置、终端及存储介质
CN110928661A (zh) * 2019-11-22 2020-03-27 北京浪潮数据技术有限公司 一种线程迁移方法、装置、设备及可读存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110246995A1 (en) * 2010-04-05 2011-10-06 Oracle International Corporation Cache-aware thread scheduling in multi-threaded systems
CN104969182A (zh) * 2012-12-28 2015-10-07 英特尔公司 高动态范围软件-透明异构计算元件处理器、方法及系统
CN105528330A (zh) * 2014-09-30 2016-04-27 杭州华为数字技术有限公司 负载均衡的方法、装置、丛集和众核处理器
CN108170525A (zh) * 2016-12-07 2018-06-15 晨星半导体股份有限公司 动态调整多核心处理器的任务负载配置的装置以及方法
CN109947569A (zh) * 2019-03-15 2019-06-28 Oppo广东移动通信有限公司 绑定核心的方法、装置、终端及存储介质
CN110008027A (zh) * 2019-04-09 2019-07-12 Oppo广东移动通信有限公司 进程的运行方法、装置、终端及存储介质
CN110928661A (zh) * 2019-11-22 2020-03-27 北京浪潮数据技术有限公司 一种线程迁移方法、装置、设备及可读存储介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112799848A (zh) * 2021-02-10 2021-05-14 联想(北京)有限公司 一种控制方法及装置
CN113842642A (zh) * 2021-09-29 2021-12-28 联想(北京)有限公司 一种为游戏应用分配资源的方法及电子设备
CN113842642B (zh) * 2021-09-29 2024-05-28 联想(北京)有限公司 一种为游戏应用分配资源的方法及电子设备
WO2023051178A1 (zh) * 2021-09-30 2023-04-06 荣耀终端有限公司 一种任务调度方法、电子设备、芯片系统及存储介质
WO2024007970A1 (zh) * 2022-07-06 2024-01-11 华为技术有限公司 线程调度方法及电子设备
CN117793525A (zh) * 2024-02-28 2024-03-29 荣耀终端有限公司 图像处理方法、可读介质、电子设备及程序产品

Similar Documents

Publication Publication Date Title
CN111831414A (zh) 线程迁移方法、装置、存储介质及电子设备
CN111831441A (zh) 内存回收方法、装置、存储介质及电子设备
US11550627B2 (en) Hardware accelerated dynamic work creation on a graphics processing unit
JP6437579B2 (ja) 仮想化環境におけるインテリジェントgpuスケジューリング
US20190258514A1 (en) I/O Request Scheduling Method and Apparatus
CN111813520A (zh) 线程调度方法、装置、存储介质及电子设备
CN111831440A (zh) 内存回收方法、装置、存储介质及电子设备
US9875141B2 (en) Managing pools of dynamic resources
CN111831434A (zh) 资源分配方法、装置、存储介质及电子设备
CN111831410A (zh) 任务处理方法、装置、存储介质及电子设备
CN111813521A (zh) 线程调度方法、装置、存储介质及电子设备
CN111831433A (zh) 资源分配方法、装置、存储介质及电子设备
CN111831438A (zh) 资源分配方法、装置、存储介质及电子设备
CN113495780A (zh) 任务调度方法、装置、存储介质及电子设备
CN117999541A (zh) 基于资源消耗的动态策略调整
CN111831432B (zh) Io请求的调度方法、装置、存储介质及电子设备
CN110990132B (zh) 异步任务处理方法、装置、计算机设备和存储介质
CN112256421A (zh) 通信处理方法、装置、存储介质及电子设备
CN111831442A (zh) 一种资源分配的方法、装置、存储介质及电子设备
CN111831411A (zh) 任务处理方法、装置、存储介质及电子设备
CN111831439A (zh) Io请求的处理方法、装置、存储介质及电子设备
CN111831436A (zh) Io请求的调度方法、装置、存储介质及电子设备
CN111831462A (zh) Io请求的处理方法、装置、存储介质及电子设备
CN111831435A (zh) 内存分配方法、装置、存储介质及电子设备
CN111831443A (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
WW01 Invention patent application withdrawn after publication

Application publication date: 20201027

WW01 Invention patent application withdrawn after publication