CN118093348A - 关键线程识别方法及应用启动时的线程优化方法 - Google Patents
关键线程识别方法及应用启动时的线程优化方法 Download PDFInfo
- Publication number
- CN118093348A CN118093348A CN202410408141.0A CN202410408141A CN118093348A CN 118093348 A CN118093348 A CN 118093348A CN 202410408141 A CN202410408141 A CN 202410408141A CN 118093348 A CN118093348 A CN 118093348A
- Authority
- CN
- China
- Prior art keywords
- thread
- sub
- threads
- application
- waiting time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 158
- 238000005457 optimization Methods 0.000 title claims abstract description 41
- 230000008569 process Effects 0.000 claims abstract description 86
- 238000004590 computer program Methods 0.000 claims description 16
- 238000003860 storage Methods 0.000 claims description 7
- 230000000903 blocking effect Effects 0.000 claims description 6
- 230000002618 waking effect Effects 0.000 claims description 3
- 230000002708 enhancing effect Effects 0.000 claims 1
- 230000005059 dormancy Effects 0.000 abstract description 11
- 230000007958 sleep Effects 0.000 description 17
- 238000012545 processing Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 230000000694 effects Effects 0.000 description 5
- 238000012163 sequencing technique Methods 0.000 description 5
- 238000012360 testing method Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 238000001914 filtration Methods 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
- 230000004617 sleep duration Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种关键线程识别方法及应用启动时的线程优化方法,其中,关键线程识别方法通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,其中,第一等待时长与第一子线程的优先级息息相关,举例来说,优先级越低的第一子线程对应的第一等待时长可能就越久,因为处理器需要先处理其他优先级较高的子线程,也就是说虽然该第一子线程已经处于就绪状态,但是却无法立即获得处理器资源,第一等待时长越久,第一子线程唤醒主线程的时间就越迟,从而严重影响了应用的启动速度。因此,本申请可以通过统计每个第一子线程的第一等待时长,确定出多个第一子线程中影响应用启动速度的关键线程。
Description
技术领域
本申请涉及电子设备技术领域,尤其涉及一种关键线程识别方法及应用启动时的线程优化方法。
背景技术
应用的快速启动能极大地提高用户体验。然而应用启动是一个十分复杂且耗时的过程,在应用启动期间,目标应用为了提高启动性能,通常会创建很多子线程,帮助分担主线程的部分工作,但是大量的子线程同时也增大了处理器的负载压力,容易出现调度延迟的问题。
因此,为了优化应用启动的流程,除了对应用的主线程进行优化之外,可以从大量子线程中,筛选出部分影响应用启动速度的关键线程。进而可以通过对这些关键线程进行优化,以提高应用启动的速度。然而子线程数量繁多,如何识别出影响应用启动速度的关键线程是亟待解决的技术问题。
发明内容
本申请提供一种关键线程识别方法及应用启动时的线程优化方法,可以识别出影响应用启动速度的关键线程。
第一方面,本申请实施例提供了一种关键线程识别方法,该方法包括:在目标应用的冷启动过程中,检测得到目标应用的主线程对应的多个第一子线程,其中,第一子线程为冷启动过程中唤醒主线程的子线程;针对每个第一子线程,确定第一等待时长,其中,第一等待时长为第一子线程在冷启动过程中至少一次唤醒主线程需要的等待时长的累计值,每次唤醒主线程需要的等待时长为第一子线程从处于就绪状态到获取到处理器资源之间需要等待的时长;根据每个第一子线程对应的第一等待时长,从多个第一子线程中确定关键线程。
需要说明的是,在应用启动过程中,应用通常会启动一些子线程来执行一些耗时操作,比如加载资源、初始化数据、网络请求等。由于这些操作可能会耗费一定的时间,主线程会暂时进入休眠(sleep)状态,等待这些子线程完成任务之后再继续往下执行。也就是说,主线程对某些子线程有依赖,只有在这些子线程完成任务之后将主线程唤醒,主线程才能继续工作,否则主线程会一直处于等待子线程完成任务的休眠状态。
在本申请技术方案中,主要通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,其中,第一等待时长与第一子线程的优先级息息相关,举例来说,优先级越低的第一子线程对应的第一等待时长可能就越久,因为处理器需要先处理其他优先级较高的子线程,也就是说虽然该第一子线程已经处于就绪状态,但是却无法立即获得处理器资源,第一等待时长越久,第一子线程唤醒主线程的时间就越迟,从而严重影响了应用的启动速度。因此,本申请可以通过统计每个第一子线程的第一等待时长,确定出多个第一子线程中影响应用启动速度的关键线程。
其中,关键线程可以理解为对应用启动时长影响较大的第一子线程,相对应的,非关键线程就可以理解为对应用启动时长影响较小的第一子线程。例如,可以对每个第一子线程对应的第一等待时长按照从大到小进行排序,并设定关键线程的预设数量,取第一等待时长排序靠前的预设数量的第一子线程作为关键线程;或者,还可以对每个第一子线程对应的第一等待时长按照从小到大进行排序,然后取排序靠后的预设数量的第一子线程作为关键线程。又例如,可以设定第一等待时长的预设阈值,当某个第一子线程对应的第一等待时长大于或等于该预设阈值,就认为该第一子线程是关键线程;或者,当该第一子线程对应的第一等待时长小于这个预设阈值,就认为该第一子线程是非关键线程。该预设阈值还可以是第一等待时长在所有第一子线程对应的总第一等待时长中的占比的阈值,当某个第一子线程对应的第一等待时长在总第一等待时长中的占比大于或等于预设阈值的时候,认为该第一子线程为关键线程;或者当该第一子线程对应的第一等待时长在总第一等待时长中的占比小于预设阈值的时候,认为该第一子线程为非关键线程。
可选的,在第一方面一种可能的实现方式中,上述目标应用进行多次冷启动,上述方法还包括:针对目标应用的每个冷启动过程,检测得到多个第一子线程;上述根据每个第一子线程对应的第一等待时长,从多个第一子线程中确定关键线程,包括:根据每个冷启动过程中检测到的第一子线程对应的第一等待时长,从多个第一子线程中确定多个第二子线程;确定每个第二子线程在多个第一子线程中的出现次数;根据每个第二子线程在多个第一子线程中的出现次数,确定关键线程。
其中,通过对目标应用的多次冷启动进行数据统计,可以观察在不同情况下,哪些子线程更有可能稳定地唤醒主线程,进而提高关键线程确定的稳定性和可靠性。电子设备的系统并不是完全稳定的,例如在手机等电子设备上可能有多个处理器,每个第一子线程在哪个处理器上运行无法完全确定,也就是说,主线程每次休眠唤醒它的子线程会根据实际的应用场景而存在一定的波动性。此外,第一子线程还可能跟应用启动的环境相关联,应用在不同的启动环境下,每次唤醒主线程的子线程也可能会存在差异。通过对目标应用每次冷启动过程中子线程进行第一等待时长的统计,初步筛选出对应用启动速度影响较大的第二子线程(也即第一等待时间较长的第一子线程),进而将多次冷启动过程中出现次数较多的第二子线程,确定为关键线程。
可选的,在第一方面另一种可能的实现方式中,上述根据每个冷启动过程中检测到的第一子线程对应的第一等待时长,从多个第一子线程中确定多个第二子线程,包括:针对每个冷启动过程,确定第一子线程为N个,将冷启动过程对应的第一子线程按照第一等待时长从大到校排列,并将排列后的第一子线程中前i个第一子线程,确定为第二子线程,其中,N为正整数,1≤i≤N且为正整数。
其中,通过排序的方式可以初步筛选出目标应用每次启动时对应用启动速度影响较大的第二子线程。除此之外,还可以通过设置阈值等方式进行筛选,前文中有相关描述,此处不再赘述。
可选的,在第一方面又一种可能的实现方式中,上述根据每个第二子线程在多个第一子线程中的出现次数,确定关键线程,包括:根据第二子线程的线程名,对所有第二子线程进行分类,得到第二子线程的多个类别;根据每个第二子线程在多个第一子线程中的出现次数,确定每个类别的第二子线程的执行次数;根据每个类别的第二子线程的执行次数,确定关键线程。
其中,通过线程名可以确定第二子线程的多个类别,例如可以将名称前缀相同的第二子线程看成一类,再进行后续关键线程确定的步骤。通过这种方式,可以更方便地识别和处理影响应用启动速度的关键线程,而不需要单独处理每个第二子线程,从而简化关键线程确定过程并提高效率。
第二方面,本申请实施例提供了一种应用启动时的线程优化方法,该方法采用第一方面的关键线程识别方法确定目标应用的至少一个关键线程,该方法包括:当检测到目标应用启动时,确定目标应用的主线程对应的至少一个第三子线程,其中,第三子线程为目标应用启动过程中待执行的子线程;针对每个第三子线程,将第三子线程与至少一个关键线程进行匹配;对每个匹配成功的第三子线程进行关键线程资源优化。
在本申请技术方案中,主要通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,从而确定出影响应用启动速度的关键线程。进一步在后续目标应用启动时,可以将目标应用启动过程中待执行的子线程与关键线程进行匹配,并相应地对关键线程(即匹配成功的第三子线程)进行资源优化,以此提高目标应用的启动速度。
可选的,在第二方面一种可能的实现方式中,上述对每个匹配成功的第三子线程进行关键线程资源优化,包括:提升匹配成功的第三子线程的优先级,或者,利用高性能的核运行匹配成功的第三子线程。
其中,通过提升关键线程的优先级,即优先执行该关键线程,可以对该关键线程的调度时间进行优化,减少该关键线程对应的第一等待时长。另外还可以利用高性能的核运行关键线程,从而优化该关键线程的运行时间。两种优化方式均可以有效提高目标应用的启动速度。
可选的,在第二方面另一种可能的实现方式中,上述方法还包括:针对每个匹配成功的第三子线程,当检测到第三子线程存在相关联的第四子线程且第四子线程处于阻塞状态时,将第三子线程的优先级传递给第四子线程,以在第四子线程释放资源后,执行第三子线程。
其中,第四子线程是与关键线程存在依赖关系的子线程,也就是说,关键线程需要等待第四子线程完成任务之后才能执行。就算提升了关键线程的优先级,只要第四子线程处于阻塞状态,关键线程就仍需要进行等待。因此可以通过优先级传递的方式,将关键线程的优先级传递给第四子线程,以使第四子线程尽快完成任务,缩短第四子线程的阻塞时间,从而提高目标应用的启动速度。
应理解,第二方面的技术方案的技术效果,可以参照第一方面相关描述,此处不再赘述。
第三方面,本申请实施例提供了一种关键线程识别装置,该装置包括由软件和/或硬件组成的用于执行第一方面的关键线程识别方法的单元。
第四方面,本申请实施例提供了一种应用启动时的线程优化装置,该装置包括由软件和/或硬件组成的用于执行第二方面的应用启动时的线程优化方法的单元。
第五方面,本申请实施例提供了一种电子设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,当处理器执行计算机程序时,电子设备能够实现上述第一方面或第二方面的任意一种方法。
第六方面,本申请实施例提供了一种芯片系统,该芯片系统应用于电子设备,该芯片系统包括一个或多个处理器,一个或多个处理器用于调用计算机指令以使得电子设备能够执行上述第一方面或第二方面的任意一种方法。
可选的,该芯片系统还包括存储器,存储器与处理器电连接。
可选的,该芯片系统还可以包括通信接口。
第七方面,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质包括指令,当该指令在电子设备上运行时,使得电子设备能够执行上述第一方面或第二方面的任意一种方法。
第八方面,本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序,当计算机程序被电子设备执行时,电子设备能够实现上述第一方面的或第二方面的任意一种方法。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种应用冷启动过程中的线程运行状态示意图;
图2是本申请实施例提供的一种关键线程识别方法的流程示意图;
图3是本申请实施例提供的一种应用启动时的线程优化方法的流程示意图;
图4是本申请实施例的提供的关键线程资源优化的流程示例图;
图5是本申请实施例提供的一种线程运行状态示意图;
图6是本申请实施例提供的某一应用的第二子线程次数统计示例图;
图7是本申请实施例提供的另一应用的第二子线程次数统计示例图;
图8是本申请实施例提供的一种关键线程识别装置的结构示意图;
图9是本申请实施例提供的一种应用启动时的线程优化装置的结构示意图;
图10是本申请实施例提供的电子设备的结构示意图。
具体实施方式
下面结合附图对本申请实施例的方案进行介绍。
相关技术中,在常规的应用启动优化中,可能会通过动态调整处理器的频率和性能模式,以确保应用在启动阶段能够获得最大的计算资源和性能支持,以此提高应用的启动速度。另外处理器通常由多个核心组成,例如极高性能的超大核、较高性能的大核、省电的小核等,因此可以通过将应用主线程调度到超大核上运行可以提供更高的计算能力和处理速度,从而加快应用的启动。
图1是本申请实施例提供的一种应用冷启动过程中的线程运行状态示意图。如图1中应用主线程一行所示,应用主线程一行存在大量空白区域,且空白区域占比较大,其中,空白区域表示主线程当前处于休眠状态,所以可以看出,在应用启动过程中的bindApplication(应用绑定)阶段,主线程休眠了多次且休眠时间较长。这是因为应用为了提高启动性能,创建了一些子线程来帮助分担主线程的部分工作,比如加载资源、初始化数据、网络请求等。由于这些工作可能会耗费一定的时间,主线程会暂时进入休眠(sleep)状态,等待这些子线程完成任务之后再继续往下执行。也就是说,主线程对某些子线程有依赖,只有在这些子线程完成任务之后将主线程唤醒,主线程才能继续工作,否则主线程会一直处于等待子线程完成任务的休眠状态。上述现象会导致主线程在每次被唤醒之后,只能工作一小段时间,之后继续进入休眠状态,从而严重影响了应用启动速度。
基于此,为了提高应用启动速度,除了需要优化应用的主线程以外,还可以从大量子线程中,筛选出部分影响应用启动速度的关键线程进行优化,尤其是与主线程存在阻塞关系的子线程。然而,应用启动时创建的子线程数量繁多,且不同应用的子线程名称也并不相同,如何识别出每个应用的关键线程是优化应用启动速度的关键点。
有鉴于此,本申请实施例提供了一种关键线程识别方法,主要通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,其中,第一等待时长与第一子线程的优先级息息相关,举例来说,优先级越低的第一子线程对应的第一等待时长可能就越久,因为处理器需要先处理其他优先级较高的子线程,也就是说虽然该第一子线程已经处于就绪状态,但是却无法立即获得处理器资源,第一等待时长越久,第一子线程唤醒主线程的时间就越迟,从而严重影响了应用的启动速度。因此,本申请可以通过统计每个第一子线程的第一等待时长,确定出多个第一子线程中影响应用启动速度的关键线程。
参照图2,示出了本申请实施例提供的一种关键线程识别方法的流程示意图。下面对图2所示步骤进行介绍。
步骤201,在目标应用的冷启动过程中,检测得到目标应用的主线程对应的多个第一子线程。
需要说明的是,第一子线程为冷启动过程中唤醒主线程的子线程,也可以理解为主线程对第一子线程有依赖,第一子线程完成任务之后将主线程唤醒,主线程才能继续工作,否则会阻塞主线程的运行。由于应用启动过程中主线程会休眠多次,因此在主线程每次休眠之后唤醒主线程的子线程,即为第一子线程。
在本申请实施例中,主线程与各个子线程之间可能是并行,也可能是串行执行。互不依赖的主线程和子线程可以并行执行也可以串行执行,而有依赖关系的主线程和子线程之间就需要串行执行。
示例性地,主线程A需要基于子线程b和子线程c得到的运行结果继续运行,那么主线程A和子线程b之间、主线程A和子线程c之间就是串行执行的关系,需要先执行完子线程b和子线程c之后才能执行主线程A。如果子线程c的运行结束时间晚于子线程b,那么子线程c在运行结束后会唤醒主线程,子线程c即主线程A对应的第一子线程。
又例如,主线程D、子线程e和子线程f,虽然主线程D需要基于子线程e和子线程f的运行结果继续运行,但是子线程e和子线程f的一系列运行结果是边处理边输出的,那么主线程D、子线程e和子线程f之间可能就是一种交错并行执行,也就是子线程e和子线程f先执行,等子线程e和子线程f都有结果输出了子线程D就开始执行,而不需要一直等到子线程e和子线程f全部运行完成才开始。那么主线程D和子线程e之间、主线程D和子线程f之间是先串行后并行。也就是说,主线程D和子线程e之间、主线程D和子线程f之间虽然存在并行关系,但同时也存在着依赖关系。在这种情况下,子线程e和子线程f中结果输出时间较后的子线程即主线程D对应的第一子线程。
需要说明的是,冷启动是应用启动方式的一种,是指应用在手机启动后第一次运行,或者应用进程被清理(例如由于电子设备系统内存紧张而引发的清理,或者用户主动触发的清理)后再次启动。也就是说,在启动应用前,系统还没有该应用的任何进程,冷启动需要创建进程,应用需要初始化。除了冷启动之外,应用启动方式还包括热启动与温启动,其中,热启动是指应用退出之后暂时退到了后台,但是应用的进程仍然保持活动状态,资源已经加载,在热启动过程中,应用程序可以复用之前已经创建的对象和资源;温启动介于冷启动与热启动之间,指应用虽然在后台运行,但在一段时间内未被使用,导致部分资源被系统回收,需要重新加载的启动过程。在上述三种启动方式中,冷启动耗时最长,热启动耗时最短。
在本申请实施例中,冷启动是从零创建进程并完成初始化的过程,也是三种启动方式里面挑战最大的,而且优化了冷启动速度,也能间接优化其他启动方式,通常的启动速度优化指的是冷启动速度优化。另外,冷启动过程中通常会涉及更多的资源加载和初始化操作,通常需要更多子线程的参与,通过对冷启动过程进行分析,最终确定的第一子线程更加全面。
应理解,由于在应用的一次启动过程中,同一个子线程可能会唤醒主线程多次,因此第一子线程的数量会小于或等于主线程休眠的次数。
在本申请的一种可能的实现方式中,可以对目标应用的多次冷启动过程进行分析,即目标应用进行多次冷启动,针对目标应用的每个冷启动过程,检测得到多个第一子线程。通过对目标应用的多次冷启动进行数据统计,可以观察在不同情况下,哪些子线程更有可能稳定地唤醒主线程。
需要说明的是,电子设备的系统并不是完全稳定的,例如在手机等电子设备上可能有多个处理器,每个第一子线程在哪个处理器上运行无法完全确定,也就是说,主线程每次休眠唤醒它的子线程会根据实际的应用场景而存在一定的波动性。
此外,第一子线程还可能跟应用启动的环境相关联,应用在不同的启动环境下,每次唤醒主线程的子线程也可能会存在差异,举例来说,假设某应用在两个不同配置的电子设备上启动,一个电子设备具有更高的内存和处理器性能,而另一个电子设备性能较低。在高性能电子设备上,启动过程可能更快,主线程可能更容易被快速唤醒,因此启动时可能会由快速执行的子线程唤醒主线程。而在低性能设备上,由于资源有限,启动过程可能较慢,主线程可能更容易受到其他进程的影响而被慢速执行的子线程唤醒。这就导致了在不同的启动环境下,每次唤醒主线程的子线程存在差异。
因此,通过对目标应用的多次冷启动过程进行分析,可以提高后续关键线程确定的稳定性与可靠性。
步骤202,针对每个第一子线程,确定第一等待时长。
其中,第一等待时长为第一子线程在冷启动过程中至少一次唤醒主线程需要的等待时长(runnable)的累计值,每次唤醒主线程需要的等待时长为第一子线程从处于就绪状态到获取到处理器资源之间需要等待的时长。
需要说明的是,在本申请实施例中,处理器可以是中央处理单元(centralprocessing unit,CPU),或者是图形处理器(graphics processing unit,GPU),或者是其他通用处理器。
在本申请实施例中,由于应用通常需要多个子线程共同执行任务,不同子线程之间可能会存在竞争关系,即多个子线程竞争获取处理器资源,这就可能导致某些子线程需要等待其他子线程释放处理器资源之后才能运行。此外,电子设备的系统通常会根据子线程的优先级来决定哪个子线程会优先获取到处理器资源,如果某个子线程的优先级较低,那么该子线程可能需要等待更高优先级的子线程执行完毕才能获取到处理器资源。也就是说,第一子线程从处于就绪状态时开始计时,直到获取到处理器资源之后停止计时,中间计时的这段时间即该第一子线程该次唤醒主线程需要的等待时长,该第一子线程获取到处理器资源之后开始执行任务,任务执行完毕唤醒主线程。
需要说明的是,由于第一子线程在目标应用的一次启动过程中可能会唤醒主线程多次,且每次唤醒主线程均会对应一个等待时长,通过对第一子线程的线程名,统计应用启动期间该第一子线程唤醒主线程的次数,进而对该第一子线程在应用启动过程中每次唤醒主线程对应的等待时长进行累计,得到的累计值即为该第一子线程对应的第一等待时长。
步骤203,根据每个第一子线程对应的第一等待时长,从多个第一子线程中确定关键线程。
在本申请实施例中,关键线程可以理解为对应用启动时长影响较大的第一子线程,相对应的,非关键线程就可以理解为对应用启动时长影响较小的第一子线程。例如,可以对每个第一子线程对应的第一等待时长按照从大到小进行排序,并设定关键线程的预设数量,取第一等待时长排序靠前的预设数量的第一子线程作为关键线程;或者,还可以对每个第一子线程对应的第一等待时长按照从小到大进行排序,然后取排序靠后的预设数量的第一子线程作为关键线程。又例如,可以设定第一等待时长的预设阈值,当某个第一子线程对应的第一等待时长大于或等于该预设阈值,就认为该第一子线程是关键线程;或者,当该第一子线程对应的第一等待时长小于这个预设阈值,就认为该第一子线程是非关键线程。该预设阈值还可以是第一等待时长在所有第一子线程对应的总第一等待时长中的占比的阈值,当某个第一子线程对应的第一等待时长在总第一等待时长中的占比大于或等于预设阈值的时候,认为该第一子线程为关键线程;或者当该第一子线程对应的第一等待时长在总第一等待时长中的占比小于预设阈值的时候,认为该第一子线程为非关键线程。
需要说明的是,由于第一子线程与主线程存在唤醒关系,所以第一子线程的执行情况会直接影响到主线程的唤醒时间,对应用启动速度具有重要影响。因此首先筛选出第一子线程,在第一子线程的基础分析处理确定关键线程,能够提高关键线程识别的效率。
进一步的,前述实施例中阐述了可以通过对目标应用的多次冷启动进行数据统计,即执行多次步骤201,也就是说,可以针对目标应用的每个冷启动过程,可以确定多个第一子线程。其中,第一等待时长越大的第一子线程对应用启动速度的影响就越大,就越需要被优化,因此可以根据第一等待时长的大小初步筛选出每个冷启动过程中对应用启动速度影响较大的第二子线程(也即第一等待时间较长的第一子线程),进而对所有的第二子线程进行数据统计。如果某一第二子线程在每个冷启动过程对应的多个第一子线程中的出现次数较多,那么该第二子线程在目标应用的启动过程中更有可能稳定地唤醒主线程,并且该第二子线程对应用启动速度影响较大,那么可以将该第二子线程确定为关键线程。
因此作为本申请实施例一种可能的实现方式,上述步骤203,可以包括:根据每个冷启动过程中检测到的第一子线程对应的第一等待时长,从多个第一子线程中确定多个第二子线程;确定每个第二子线程在多个第一子线程中的出现次数;根据每个第二子线程在多个第一子线程中的出现次数,确定关键线程。
作为一种示例,目标应用每次启动时对应用启动速度影响较大的第二子线程可以通过排序的方式可以初步筛选出。具体来说,可以针对每个冷启动过程,确定第一子线程为N个,将冷启动过程对应的第一子线程按照第一等待时长从大到校排列,并将排列后的第一子线程中前i个第一子线程,确定为第二子线程,其中,N为正整数,1≤i≤N且为正整数。除此之外,还可以通过设置阈值等方式进行筛选,前述实施例中对于排序以及阈值判断的方式有相关描述,此处不再赘述。
作为另一种示例,除了根据第一等待时长确定第二子线程之外,还可以通过第一子线程在冷启动过程中至少一次唤醒主线程需要的等待时长的平均值或者最大值,再结合排序或阈值判断的方式确定第二子线程。
作为又一种示例,针对目标应用的每个冷启动过程,可以统计主线程每次休眠期间,第一子线程的运行时长(running)或者被阻塞时长(uninterrupt sleep)等数据,进而通过在主线程每次休眠期间,第一子线程的运行时长的累计值、平均值或最大值,确定第二子线程;又或者是通过在主线程每次休眠期间,第一子线程的被阻塞时长的累计值、平均值或最大值,确定第二子线程。应理解,具体采用具体哪种方式可以结合实际应用场景、需求和测试结果确定,本申请实施例对此不做限制。
应理解,每次唤醒主线程需要的等待时长为第一子线程从处于就绪状态到获取到处理器资源之间需要等待的时长。也就是说,第一子线程从处于就绪状态到获取到处理器资源这段时间,第一子线程的准备工作都已经准备好了,仅仅是在等待处理器资源,一但获取到处理器资源便可以立即开始工作。因此每次唤醒主线程需要的等待时长是一个能够被直接优化的指标,针对基于第一等待时长确定的关键线程进行优化,优化的效率最高。因此,通过等待时长确定第二子线程为最优选的实施例。
作为另一种示例,还可以通过同时考虑等待时长(runnable)、运行时长(running)及被阻塞时长(uninterrupt sleep)三个指标,每个指标赋予不同的权重,其中等待时长(runnable)的权重最高,接着通过分析累计值、平均值或最大值的方式,最终确定第二子线程。
在一种实施例中,上述根据每个第二子线程在多个第一子线程中的出现次数,确定关键线程,包括:根据第二子线程的线程名,对所有第二子线程进行分类,得到第二子线程的多个类别;根据每个第二子线程在多个第一子线程中的出现次数,确定每个类别的第二子线程的执行次数;根据每个类别的第二子线程的执行次数,确定关键线程。通过线程名可以确定第二子线程的多个类别,例如可以将名称前缀相同的第二子线程看成一类,再进行后续关键线程确定的步骤。通过这种方式,可以更方便地识别和处理影响应用启动速度的关键线程,而不需要单独处理每个第二子线程,从而简化关键线程确定过程并提高效率。
举例来说,在应用启动过程中使用线程池是一种常见的策略,通过线程池可以有效地管理和复用线程,提高系统的性能和效率。在线程池中,每个子线程可能会有不同的标识,例如名称前缀为“launcher”。假如目标应用在启动过程中创建了一个线程池,这个线程池里面子线程的前缀相同,主线程会分配一系列任务给该线程池中的各个子线程,这些子线程会并行地执行任务,每个子线程处理一部分工作,每个子线程并不固定地执行特定的任务,而是根据主线程的分配动态地处理不同的任务。整个任务的完成时间取决于最后一个子线程完成主线程分配的任务,因为在这种情况下,主线程会等待所有子线程完成任务后才能继续执行,所以整体的执行时间会受到最后一个子线程完成任务的影响。对于这种情况,就可以去统计子线程的前缀,并将具有相同名称前缀的子线程看成一类,如果该类别中的某个子线程被确定为关键线程,那么可以将该类别中的所有子线程均确定为关键线程。通过这种方式,可以更方便地识别和处理影响应用启动速度的关键线程。
本申请上述实施例提供的关键线程识别方法,主要通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,其中,第一等待时长与第一子线程的优先级息息相关,举例来说,优先级越低的第一子线程对应的第一等待时长可能就越久,因为处理器需要先处理其他优先级较高的子线程,也就是说虽然该第一子线程已经处于就绪状态,但是却无法立即获得处理器资源,第一等待时长越久,第一子线程唤醒主线程的时间就越迟,从而严重影响了应用的启动速度。因此,本申请可以通过统计每个第一子线程的第一等待时长,确定出多个第一子线程中影响应用启动速度的关键线程。另外不同应用的子线程名称并不是完全相同的,通过上述方法可以准确识别出每个应用的关键线程。
参照图3,示出了本申请实施例提供的一种应用启动时的线程优化方法的流程示意图。该方法采用前述实施例中的关键线程识别方法确定目标应用的至少一个关键线程,得到关键线程集合。下面对图3所示步骤进行介绍。
步骤301,当检测到目标应用启动时,确定目标应用的主线程对应的至少一个第三子线程。
其中,第三子线程为目标应用启动过程中待执行的子线程。
在本申请实施例中,当系统识别到应用启动场景时,可以对目标应用的子线程进行监控,用于执行后续的线程优化步骤。
步骤302,针对每个第三子线程,将第三子线程与至少一个关键线程进行匹配。
在本申请实施例中,可以在第三子线程更改线程名时进行字符匹配,如果新的线程名在关键线程集合中,系统可以将该第三子线程标记为关键线程。通常,用户可以为线程设置名称,以便在调试和监控时更容易识别线程。通过监控线程名称的变化,系统可以在应用启动阶段捕获第三子线程的活动,从而更好地进行性能优化。其中,字符匹配是一种简单有效的方法,通过比较线程名称与预定义的关键线程集合,系统可以迅速确定哪些第三子线程是关键线程,以便针对性地进行优化工作。
步骤303,对每个匹配成功的第三子线程进行关键线程资源优化。
在一个实施例中,可以通过提升匹配成功的第三子线程的优先级,对关键线程(即匹配成功的第三子线程)进行关键线程资源优化。举例来说,假设主线程G需要基于子线程k的运行结果才能继续运行,但是存在子线程l的优先级高于子线程k,也就是说在优化之前,需要先运行子线程l,子线程l运行结束之后才会运行子线程k,这就导致子线程k对应的等待时长较长,影响应用启动速度。通过提升子线程k的优先级,可以优先运行子线程k而不是等待子线程l,子线程k运行结束之后立即唤醒主线程。由此,通过提升关键线程的优先级,即优先执行该关键线程,可以对该关键线程的调度时间进行优化,减少该关键线程对应的第一等待时长,进而提升应用启动速度。
在另一个实施例中,可以利用高性能的核,例如超大核或大核运行关键线程,从而优化该关键线程的运行时间。其中,处理器通常由多个核心组成,例如极高性能的超大核、较高性能的大核、省电的小核等,因此可以通过将关键线程调度到超大核或大核上运行,可以为关键线程提供更高的计算能力和处理速度,从而加快应用的启动。
在又一个实施例中,还可以针对每个匹配成功的第三子线程,当检测到第三子线程存在相关联的第四子线程且第四子线程处于阻塞状态时,将第三子线程的优先级传递给第四子线程,以在第四子线程释放资源后,执行第三子线程。需要说明的是,第四子线程是与关键线程存在依赖关系的子线程,也就是说,关键线程需要等待第四子线程完成任务之后才能执行。就算提升了关键线程的优先级,只要第四子线程处于阻塞状态,关键线程就仍需要进行等待。因此可以通过优先级传递的方式,将关键线程的优先级传递给第四子线程,以使第四子线程尽快完成任务,缩短第四子线程的阻塞时间,从而提高目标应用的启动速度。
本申请上述实施例提供的应用启动时的线程优化方法,主要通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,从而确定出影响应用启动速度的关键线程。进一步在后续目标应用启动时,可以将目标应用启动过程中待执行的子线程与关键线程进行匹配,并相应地对关键线程(即匹配成功的第三子线程)进行资源优化,以此提高目标应用的启动速度。
图4是本申请实施例的提供的关键线程资源优化的流程示例图。如图4所示,在关键线程识别阶段,首先收集目标应用启动trace,其中,应用启动trace是指在应用启动过程中记录下的事件序列或日志,这些事件通常包括应用启动的各个阶段,如加载资源、初始化组件、执行特定任务等。通过分析应用启动的trace,可以了解应用程序启动的整体流程和各个阶段的耗时情况,从而发现可能存在的性能瓶颈或优化空间。通过对trace的分析,可以优化应用程序启动的速度和性能,提升用户体验。在收集目标应用启动trace之前,首先需要确定一个负载稳定的测试环境,例如实验室中的各种性能模型(包含应用冷启动),确保测试过程中不受外部因素干扰,以获得准确的性能数据;接着选择目标应用,并针对目标应用,确定抓取trace数量及规格,其中,每份trace记录一次目标应用的冷启动信息,并重复抓取同一个应用冷启动的trace多次,例如40次,以获得更多数据并验证结果的一致性。
在收集目标应用启动trace之后,对收集到的每份冷启动trace数据进行分析,根据trace中相关的标识识别应用启动阶段,具体来说,可以使用性能测试工具或者性能分析工具来收集目标应用的冷启动trace数据,例如Systrace等。在应用冷启动阶段内,还可以通过SQL脚本识别出目标应用主线程休眠时对应的时间段,如图5所示,示出了本申请实施例提供的另一种线程运行状态示意图,如图5所示,应用启动阶段休眠的总时长为125.921095ms,也即主线程每次休眠时长的累计值(对应图5中主线程空白区域的时长)。
识别了应用主线程休眠时对应的时间段之后,开始统计识别关键线程。具体来说,针对每份trace,根据主线程与子线程的唤醒关系,统计每次唤醒主线程的第一子线程;然后统计主线程每次休眠期间,该第一子线程的等待时长(runnable);接着按照第一子线程的线程名,统计应用启动期间该第一子线程唤醒主线程的次数,以及主线程休眠期间等待时长的累计值,即第一等待时长。进一步从统计出的多个第一子线程中,确定第二子线程。以排序的方式确定第二子线程为例,可以统计出第一等待时长耗时最多的20个第一子线程。例如,表1示出了一种等待时长统计表。
表1
其中,可以将统计出的第一等待时长耗时最多的20个第一子线程,确定为第二子线程。
进一步对每份trace中的第二子线程在所有第一子线程中的出现次数进行统计,每个第二子线程每在一份trace中,则对应的次数加1。最后根据每个第二子线程的出现次数,采用排序或阈值判断的方式确定最终的关键线程。举例来说,如果第二子线程的出现次数大于或等于所有第一子线程总个数的一半,则可以将该第二子线程确定为关键线程。应理解,具有相似名称的第二子线程可以看成一类,具体可以参见前述实施例中有关第二子线程分类的部分,此处不在赘述。
图6是本申请实施例提供的某一应用的第二子线程次数统计示例图。图6中名称前缀为第二子线程C的出现次数较多,因此可以将所有前缀为第二子线程C的子线程,确定为第一应用对应的关键线程。
图7是本申请实施例提供的另一应用的第二子线程次数统计示例图。图7中名称前缀为第二子线程I和第二子线程K的出现次数较多,因此可以将所有前缀为第二子线程I和第二子线程K的子线程,确定为第二应用对应的关键线程。
前述过程已经确定了目标应用的关键线程,后续当系统识别到目标应用启动时,在应用的子线程更改线程名时进行字符匹配,如果新名称在关键线程集合中,则将该线程标记为关键线程,进而通过提升线程优先级、选择性能更高的核运行关键线程、对关键线程对应的阻塞线程进行优先级传递等方式,进行关键线程资源优化,从而提高目标应用的启动速度。
为了验证本申请前述实施例的效果,表2示出了关键线程资源优化前与优化后的数据对比示例表。
表2(单位ms)
表2为本申请实施例的应用启动速度提升的效果提供了一定的数据支撑。从表2可以看出,经过对三个应用、每个应用共计10次的启动时间进行统计,发现经过关键线程资源优化后,显著提升了应用的启动速度。
上文主要结合附图对本申请实施例的方法进行了介绍。应理解,虽然如上所述的各实施例所涉及的流程图中的各个步骤依次显示,但是这些步骤并不是必然按照图中所示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。下面结合附图对本申请实施例的装置进行介绍。
参见图8,为本申请实施例提供的一种关键线程识别装置的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分。如图8所示,该关键线程识别装置800包括第一检测单元801和第一处理单元802。该装置800可以为任意一种具有处理器的电子设备,或者是集成在上述具有处理器的电子设备中。该电子设备可以是手机、笔记本电脑、平板电脑、车载终端等终端设备,也可以是电脑、服务器、云端设备等其他计算机设备。
该关键线程识别装置800能够用于执行上文任意一种关键线程识别方法。例如第一检测单元801可用于执行步骤201,第一处理单元802可用于执行步骤202和步骤203。
需要说明的是,前述对关键线程识别方法实施例的解释说明也适用于该实施例的关键线程识别装置800,此处不再赘述。
本申请实施例提供的关键线程识别装置主要通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,其中,第一等待时长与第一子线程的优先级息息相关,举例来说,优先级越低的第一子线程对应的第一等待时长可能就越久,因为处理器需要先处理其他优先级较高的子线程,也就是说虽然该第一子线程已经处于就绪状态,但是却无法立即获得处理器资源,第一等待时长越久,第一子线程唤醒主线程的时间就越迟,从而严重影响了应用的启动速度。因此,本申请可以通过统计每个第一子线程的第一等待时长,确定出多个第一子线程中影响应用启动速度的关键线程。另外不同应用的子线程名称并不是完全相同的,通过上述方法可以准确识别出每个应用的关键线程。
参见图9,为本申请实施例提供的一种应用启动时的线程优化装置的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分。如图9所示,该关键线程识别装置900包括第二检测单元901、第二处理单元902和优化单元903。该装置900可以为任意一种具有处理器的电子设备,或者是集成在上述具有处理器的电子设备中,该装置900还可以集成前述关键线程识别装置800。该电子设备可以是手机、笔记本电脑、平板电脑、车载终端等终端设备,也可以是电脑、服务器、云端设备等其他计算机设备。
该关键线程识别装置900能够用于执行上文任意一种应用启动时的线程优化方法。例如第二检测单元901可用于执行步骤301,第二处理单元902可用于执行步骤302,优化单元903可用于执行步骤303。
需要说明的是,前述对应用启动时的线程优化方法实施例的解释说明也适用于该实施例的应用启动时的线程优化装置900,此处不再赘述。
本申请实施例提供的应用启动时的线程优化装置,主要通过检测应用启动过程中主线程每次休眠之后唤醒主线程的第一子线程,然后统计出所有第一子线程的第一等待时长,从而确定出影响应用启动速度的关键线程。进一步在后续目标应用启动时,可以将目标应用启动过程中待执行的子线程与关键线程进行匹配,并相应地对关键线程(即匹配成功的第三子线程)进行资源优化,以此提高目标应用的启动速度。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
图10是本申请实施例提供的电子设备的结构示意图。如图10所示,该实施例的电子设备1000包括:至少一个处理器1010(图10中仅示出一个处理器)、存储器1020以及存储在存储器1020中并可在至少一个处理器1010上运行的计算机程序1021,处理器1010执行计算机程序1021时实现上述关键线程识别方法实施例中的步骤,或者实现上述应用启动时的线程优化方法实施例中的步骤。
电子设备1000可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该电子设备可包括,但不仅限于,处理器1010、存储器1020。本领域技术人员可以理解,图10仅仅是电子设备1000的举例,并不构成对电子设备1000的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器1010可以是中央处理单元(Central Processing Unit,CPU),该处理器1010还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路 (Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器1020在一些实施例中可以是电子设备1000的内部存储单元,例如电子设备1000的硬盘或内存。存储器1020在另一些实施例中也可以是电子设备1000的外部存储设备,例如电子设备1000上配备的插接式硬盘,智能存储卡(Smart Media Card, SMC),安全数字(Secure Digital, SD)卡,闪存卡(Flash Card)等。进一步地,存储器1020还可以既包括电子设备1000的内部存储单元也包括外部存储设备。存储器1020用于存储操作系统、应用程序、引导装载程序(Boot Loader)、数据以及其他程序等,例如计算机程序的程序代码等。存储器1020还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、 “第二”、 “第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、 “在一些实施例中”、 “在其他一些实施例中”、 “在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、 “包含”、 “具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/电子设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/电子设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
本申请实现上述实施例方法中的全部或部分流程,也可以通过一种计算机程序产品来完成,当计算机程序产品在电子设备上运行时,使得电子设备执行时可实现上述各个方法实施例中的步骤。
以上实施例仅用以说明本申请的技术方案,而非对其限制。尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种关键线程识别方法,其特征在于,包括:
在目标应用的冷启动过程中,检测得到所述目标应用的主线程对应的多个第一子线程,其中,所述第一子线程为所述冷启动过程中唤醒所述主线程的子线程;
针对每个所述第一子线程,确定第一等待时长,其中,所述第一等待时长为所述第一子线程在所述冷启动过程中至少一次唤醒所述主线程需要的等待时长的累计值,每次唤醒所述主线程需要的等待时长为所述第一子线程从处于就绪状态到获取到处理器资源之间需要等待的时长;
根据每个所述第一子线程对应的第一等待时长,从所述多个第一子线程中确定关键线程。
2.根据权利要求1所述的关键线程识别方法,其特征在于,所述目标应用进行多次冷启动,所述方法还包括:针对所述目标应用的每个冷启动过程,检测得到多个第一子线程;
所述根据每个所述第一子线程对应的第一等待时长,从所述多个第一子线程中确定关键线程,包括:
根据每个冷启动过程中检测到的第一子线程对应的第一等待时长,从所述多个第一子线程中确定多个第二子线程;
确定每个所述第二子线程在所述多个第一子线程中的出现次数;
根据每个所述第二子线程在所述多个第一子线程中的出现次数,确定所述关键线程。
3.根据权利要求2所述的关键线程识别方法,其特征在于,所述根据每个冷启动过程中检测到的第一子线程对应的第一等待时长,从所述多个第一子线程中确定多个第二子线程,包括:
针对每个冷启动过程,确定所述第一子线程为N个,将所述冷启动过程对应的第一子线程按照所述第一等待时长从大到校排列,并将排列后的第一子线程中前i个第一子线程,确定为所述第二子线程,其中,N为正整数,1≤i≤N且为正整数。
4.根据权利要求2所述的关键线程识别方法,其特征在于,所述根据每个所述第二子线程在所述多个第一子线程中的出现次数,确定所述关键线程,包括:
根据所述第二子线程的线程名,对所有所述第二子线程进行分类,得到第二子线程的多个类别;
根据每个所述第二子线程在所述多个第一子线程中的出现次数,确定每个类别的第二子线程的执行次数;
根据每个类别的第二子线程的执行次数,确定所述关键线程。
5.一种应用启动时的线程优化方法,其特征在于,采用权利要求1-4中任一项所述的方法确定目标应用的至少一个关键线程;所述方法还包括:
当检测到所述目标应用启动时,确定所述目标应用的主线程对应的至少一个第三子线程,其中,所述第三子线程为所述目标应用启动过程中待执行的子线程;
针对每个所述第三子线程,将所述第三子线程与所述至少一个关键线程进行匹配;
对每个匹配成功的所述第三子线程进行关键线程资源优化。
6.根据权利要求5所述的应用启动时的线程优化方法,其特征在于,所述对每个匹配成功的所述第三子线程进行关键线程资源优化,包括:
提升匹配成功的所述第三子线程的优先级,或者,
利用高性能的核运行匹配成功的所述第三子线程。
7.根据权利要求6所述的应用启动时的线程优化方法,其特征在于,所述方法还包括:
针对每个匹配成功的所述第三子线程,当检测到所述第三子线程存在相关联的第四子线程且所述第四子线程处于阻塞状态时,将所述第三子线程的优先级传递给所述第四子线程,以在所述第四子线程释放资源后,执行所述第三子线程。
8.一种电子设备,其特征在于,所述电子设备包括:一个或多个处理器,以及存储器;
所述存储器与所述一个或多个处理器耦合,所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,所述一个或多个处理器调用所述计算机指令以使得所述电子设备执行如权利要求1至4中任一项所述的方法,或者执行如权利要求5或6所述的方法。
9.一种芯片系统,其特征在于,所述芯片系统应用于电子设备,所述芯片系统包括一个或多个处理器,所述一个或多个处理器用于调用计算机指令以使得所述电子设备执行如权利要求1至4中任一项所述的方法,或者执行如权利要求5或6所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括指令,当所述指令在电子设备上运行时,使得所述电子设备执行如权利要求1至4中任一项所述的方法,或者执行如权利要求5或6所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410408141.0A CN118093348A (zh) | 2024-04-07 | 2024-04-07 | 关键线程识别方法及应用启动时的线程优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410408141.0A CN118093348A (zh) | 2024-04-07 | 2024-04-07 | 关键线程识别方法及应用启动时的线程优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118093348A true CN118093348A (zh) | 2024-05-28 |
Family
ID=91147666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410408141.0A Pending CN118093348A (zh) | 2024-04-07 | 2024-04-07 | 关键线程识别方法及应用启动时的线程优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118093348A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140089936A1 (en) * | 2012-09-21 | 2014-03-27 | Htc Corporation | Multi-core device and multi-thread scheduling method thereof |
CN109918141A (zh) * | 2019-03-15 | 2019-06-21 | Oppo广东移动通信有限公司 | 线程执行方法、装置、终端及存储介质 |
CN111061516A (zh) * | 2018-10-15 | 2020-04-24 | 华为技术有限公司 | 加速应用的冷启动的方法、装置和终端 |
CN116860552A (zh) * | 2023-07-04 | 2023-10-10 | 康键信息技术(深圳)有限公司 | 应用程序运行监测方法、装置、电子设备及存储介质 |
-
2024
- 2024-04-07 CN CN202410408141.0A patent/CN118093348A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140089936A1 (en) * | 2012-09-21 | 2014-03-27 | Htc Corporation | Multi-core device and multi-thread scheduling method thereof |
CN111061516A (zh) * | 2018-10-15 | 2020-04-24 | 华为技术有限公司 | 加速应用的冷启动的方法、装置和终端 |
CN109918141A (zh) * | 2019-03-15 | 2019-06-21 | Oppo广东移动通信有限公司 | 线程执行方法、装置、终端及存储介质 |
CN116860552A (zh) * | 2023-07-04 | 2023-10-10 | 康键信息技术(深圳)有限公司 | 应用程序运行监测方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8010948B2 (en) | System and method for measuring latch contention | |
CN109992366B (zh) | 任务调度方法及调度装置 | |
EP3472684B1 (en) | Wake lock aware system wide job scheduling for energy efficiency on mobile devices | |
EP2790106A2 (en) | Performance measurement unit, processor core including the same and process profiling method | |
US20120124217A1 (en) | Adjusting The Connection Idle Timeout In Connection Pools | |
JP2009003942A (ja) | それぞれが異なる実行能力を有する複数のプロセッサ・ユニットに跨りタスクをスケジュールする方法、コンピュータ・プログラム、データ処理装置 | |
JP2020194523A (ja) | アクセス請求を処理する方法、装置、デバイスならびに記憶媒体 | |
CN109388552B (zh) | 启动应用程序的时长的确定方法、装置及存储介质 | |
US11269693B2 (en) | Method, apparatus, and electronic device for improving CPU performance | |
CN108108558B (zh) | 一种基于覆盖次数统计评价随机验证质量的方法及系统 | |
WO2017113696A1 (zh) | 调频参数的调节方法、装置、调频器及移动终端 | |
CN118093348A (zh) | 关键线程识别方法及应用启动时的线程优化方法 | |
CN112069175B (zh) | 数据查询的方法、装置及电子设备 | |
CN107451038B (zh) | 硬件事件采集方法、处理器和计算系统 | |
US9081605B2 (en) | Conflicting sub-process identification method, apparatus and computer program | |
CN114428722A (zh) | 硬件仿真方法、装置、设备及存储介质 | |
CN115309507B (zh) | 一种cpu资源占用率的计算方法、装置、设备及介质 | |
CN115018383A (zh) | 任务分配方法、装置、设备及存储介质 | |
US11552892B2 (en) | Dynamic control of latency tolerance reporting values | |
CN112579299B (zh) | 资源调度方法、电子设备及存储介质 | |
CN116627893B (zh) | 加速引擎配置方法、装置、并行数估计系统、设备及介质 | |
CN116401990B (zh) | 处理中断事件的方法、装置、系统和存储介质 | |
CN112131009B (zh) | 一种内存调度方法、装置及计算机可读存储介质 | |
CN109086218B (zh) | 一种基于蚁群算法的自动化测试方法,系统及测试终端 | |
CN116880332A (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 |