一种编译方法、运行方法及设备与流程

文档序号:19128089发布日期:2019-11-13 02:20阅读:165来源:国知局
一种编译方法、运行方法及设备与流程

本申请实施例涉及电子技术领域,尤其涉及一种编译方法、运行方法及设备。



背景技术:

在java语言中,业务代码通常使用多线程的方式进行开发。在代码运行过程中,多线程之间进行协同处理。在java虚拟机(virtualmachine,vm)内部,现有技术提供了一种配置线程运行优先级的方案。java语言中的thread类提供了配置线程优先级级别的函数接口setpriority(intnewpriority),可配置的优先级级别范围为1~10。虚拟机可以按照配置的优先级级别运行该线程。

受代码业务逻辑的限制,线程之间经常会出现优先级反转的情况。即低优先级线程阻塞了高优先级线程的运行。例如,高优先级的用户界面线程,由于锁、wait函数/notify函数或输入/输出i/o等待等场景的限制,被低优先级的线程所阻塞,从而出现响应不及时,用户界面卡顿等情况,影响了用户的体验。



技术实现要素:

本申请实施例提供一种编译方法、运行方法及设备,能够根据标注信息定义的调度方式,对标注信息作用范围内的代码块进行调度,使得该代码块能够优先、高效地执行。

为达到上述目的,本申请实施例采用如下技术方案:

一方面,本申请的实施例提供了一种编译方法,包括:编译器获取待编译代码。待编译代码包括标注信息和标注信息的作用对象。其中,作用对象为源代码块,标注信息用于指示调度方式。编译器对标注信息进行编译,生成第一目标代码块和第二目标代码块。第一目标代码块用于配置标注信息指示的调度方式。第二目标代码块用于取消标注信息指示的调度方式。编译器对作用对象进行编译,生成第三目标代码块。

在该方案中,编译器可以对作用对应的源代码块进行编译,生成第三目标代码块。编译器还可以对标注信息进行编译,从而生成用于配置和取消标注信息指示的调度方式的目标代码块。

这样,虚拟机可以运行用于配置和取消标注信息指示的调度方式的目标代码块,从而可以根据标注信息指示的调度方式,优先、高效地对第三目标代码块进行调度。即,可以根据标注信息指示的调度方式,优先、高效地实现作用对象的源代码块的功能。

在一种可能的设计中,标注信息包括字符@,标注名称和调度参数,调度参数包括代码块的调度优先级,代码块的调度策略,中央处理器cpu信息,输入/输出i/o调度策略,或i/o调度优先级中的一项或多项。其中,代码块的调度策略和i/o调度策略包括,先入先出调度sched_fifo策略、轮循调度sched_rr策略、实时调度sched_rt策略或其他调度sched_other策略。cpu信息包括cpu绑核或cpu工作频率。

这样,通过标注信息不仅可以设置线程或线程中代码块的调度优先级;还可以设置线程或线程中代码块的代码块的调度策略,cpu信息,i/o调度策略,或i/o调度优先级等,从而可以对多方面的处理性能进行控制,以便可以通过多种调度方式优先处理被标注的代码块,提高被标注的代码块的执行效率。因而,标注信息所指示的调度方式的调度范围更广,调度方式更为灵活、多样。

在另一种可能的设计中,该方法还可以包括:编译器对标注信息进行编译,还生成第一函数入口和第二函数入口,第一函数入口用于调用第一目标代码块,第二函数入口用于调用第二目标代码块。编译器将第一函数入口插入第三目标代码块之前。编译器将第二函数入口插入第三目标代码块之后。

在该方案中,编译器可以根据标注信息生成第一函数入口和第二函数入口,并将第一函数入口和第二函数入口分别插入第三目标代码块前后。以便,虚拟机可以在运行第三目标代码块之前,先根据第一函数入口运行配置标注信息指示的调度方式的代码块;在运行第三目标代码块之后,再根据第二函数入口运行取消标注信息指示的调度方式的代码块。

在另一种可能的设计中,若标注信息之后的代码为对象object,则标注信息的标注对象为对象object,作用对象为对象object范围内的源代码。若标注信息之后的代码为方法method,则标注对象为方法method,作用对象为方法范围内的源代码。若标注信息之后的代码为对象或方法中的一行语句,则标注对象和作用对象均为一行语句的源代码。若标注信息之后的代码为{}限定的语句,则标注对象和作用对象均为{}范围内的语句的源代码。若标注信息之后的代码为锁对象中的notify函数,则标注对象为notify函数,作用对象包括notify函数范围内的源代码,以及锁对象中与notify函数配合的wait函数范围内的源代码。

这样,编译器可以根据标注信息后的具体代码内容,确定标注信息的标注对象,以及标注信息的作用对象(也称作用范围)。

在另一种可能的设计中,标注信息之后的代码为锁对象,标注对象为锁对象,作用对象为锁对象范围内的源代码。

这样,虚拟机可以根据标注信息指示的调度方式,优先、高效地调度锁对象编译后的目标代码块,从而使得锁对象的功能能够优先、高效的实现。

在另一种可能的设计中,作用对象中的源代码块是用户界面相关的代码块。

这样,虚拟机可以根据标注信息指示的调度方式,优先、高效地调度用户界面相关的源代码块编译后的目标代码块,从而使得用户界面相关的功能可以优先、高效的实现。

在另一种可能的设计中,编译器在识别到标注信息中的参数用于指示调度方式时,对标注信息进行编译生成第一目标代码块和第二目标代码块。

也就是说,编译器可以根据标注信息中的参数的定义、格式、功能等特征,确定该标注信息是否为本申请实施例涉及的标注信息,以及是否对标注信息进行编译。

在另一种可能的设计中,待编译的源代码块为基于java语言编写的源代码块。

在另一种可能的设计中,标注信息的作用域包括编译时和运行时。

另一方面,本申请实施例提供了一种运行方法,包括:虚拟机获取编译后生成的目标文件。目标文件包括根据标注信息编译后生成的第一目标代码块和第二目标代码块,以及根据标注信息的作用对象编译后生成的第三目标代码块。第一目标代码块用于配置标注信息指示的调度方式。第二目标代码块用于取消标注信息指示的调度方式。虚拟机运行第一目标代码块,以配置标注信息指示的调度方式。虚拟机根据标注信息指示的调度方式,调度并运行第三目标代码块。虚拟机运行第二目标代码块,以取消标注信息指示的调度方式。

在该方案中,虚拟机可以运行用于配置和取消标注信息指示的调度方式的目标代码块,从而可以根据标注信息指示的调度方式,优先、高效地对作用对象的源代码块编译后的第三目标代码块进行调度。从而,根据标注信息指示的调度方式,可以优先、高效地实现作用对象的源代码块的功能。

在一种可能的设计中,调度方式包括代码块的调度优先级,代码块的调度策略,中央处理器cpu信息,输入/输出i/o调度策略,或i/o调度优先级中的一项或多项。其中,代码块的调度策略和i/o调度策略包括,先入先出调度sched_fifo策略、轮循调度sched_rr策略、实时调度sched_rt策略或其他调度sched_other策略。cpu信息包括cpu绑核或cpu工作频率。

这样,通过标注信息不仅可以设置线程或线程中代码块的调度优先级;还可以设置线程或线程中代码块的代码块的调度策略,cpu信息,i/o调度策略,或i/o调度优先级等,从而可以对多方面的处理性能进行控制,以便可以通过多种调度方式优先处理被标注的代码块,提高被标注的代码块的执行效率。因而,标注信息所指示的调度方式的调度范围更广,调度方式更为灵活、多样。

在另一种可能的设计中,目标文件还包括根据标注信息编译后生成的第一函数入口和第二函数入口。第一函数入口用于调用第一目标代码块。第二函数入口用于调用第二目标代码块。第一函数入口位于第三目标代码块之前,第二函数入口位于第三目标代码块之后。在虚拟机运行第一目标代码块之前,该方法还包括:虚拟机链接第一函数入口与第一目标代码块。虚拟机运行第一目标代码块,包括:虚拟机运行第一函数入口链接的第一目标代码块。在虚拟机运行第二目标代码块之前,该方法还包括:虚拟机链接第二函数入口与第二目标代码块。虚拟机运行第二目标代码块,包括:虚拟机运行第二函数入口链接的第二目标代码块。

在该方案中,虚拟机可以在运行第三目标代码块之前,先根据编译器生成的第一函数入口运行配置标注信息指示的调度方式的代码块;在运行第三目标代码块之后,再根据编译器生成的第二函数入口运行取消标注信息指示的调度方式的代码块。

在另一种可能的设计中,在虚拟机运行第一目标代码块之前,该方法还包括:虚拟机生成第一函数入口,第一函数入口用于调用第一目标代码块;虚拟机链接第一函数入口与第一目标代码块。虚拟机运行第一目标代码块,包括:虚拟机运行第一函数入口链接的第一目标代码块。在虚拟机运行第二目标代码块之前,该方法还包括:虚拟机生成第二函数入口,第二函数入口用于调用第二目标代码块;虚拟机链接第二函数入口与第二目标代码块。虚拟机运行第二目标代码块,包括:虚拟机运行第二函数入口链接的第二目标代码块。

在该方案中,虚拟机可以先通过自身生成的第一函数入口运行第一目标代码块,以配置标注信息指示的调度方式;再根据该调度方式调度并运行第三目标代码块;之后,再通过虚拟机生成的第二函数入口运行第二目标代码块,以取消标注信息指示的调度方式。

在另一种可能的设计中,标注信息的作用对象为第一源代码块,第一源代码块和第二源代码块属于同一线程;调度参数包括cpu信息。

这样,第一源代码块可以根据调度参数指示的cpu信息高效执行。

在另一种可能的设计中,标注信息的作用对象为第一源代码块,第一源代码块用于请求资源,第一源代码块属于第一线程;调度参数指示的代码块的调度优先级高。目标文件还包括第二源代码块编译后生成的第四目标代码块,以及锁对象编译后生成的第五目标代码块;第二源代码块用于请求资源,锁对象用于锁定资源。在虚拟机运行第一目标代码块,以配置标注信息指示的调度方式之后,且运行第三目标代码块之前,该方法还包括:虚拟机根据调度参数确定第三目标代码块的调度优先级高。虚拟机将第五目标代码块对应的锁对象锁定的资源,授权给第三目标代码块使用。在虚拟机运行第二目标代码块,以取消标注信息指示的调度方式之后,该方法还包括:虚拟机将锁对象的锁定的资源授权给第四目标代码块使用;虚拟机运行第四目标代码块。

这样,第三目标代码块可以优先获得锁从而可以优先执行,即第一源代码块的功能可以优先实现。

在另一种可能的设计中,标注信息的标注对象为第一源代码块,第一源代码块为notify函数,第一源代码块为锁对象范围内的函数,锁对象还包括wait函数,标注信息的作用对象为notify函数范围内的源代码块和wait函数范围内的源代码块。第三目标代码块包括wait函数范围内的源代码块编译后生成的第四目标代码块,和notify函数范围内的源代码块编译后生成的第五目标代码块。虚拟机根据标注信息指示的调度方式,调度并运行第三目标代码块,包括:虚拟机根据标注信息指示的调度方式,调度并运行第四目标代码块。虚拟机根据标注信息指示的调度方式,调度并运行第五目标代码块。

这样,在异步等到场景中,被其他代码块等待的代码块可以优先、高效地执行,从而使得等待该代码块的其他代码块也可以尽快高效地执行。

在另一种可能的设计中,标注信息的作用对象为锁对象范围内的源代码块。

由于锁对象通常关系到多个代码块的资源竞争,锁对象中的代码块是关键代码块。锁对象中的代码块高效执行,竞争资源的代码块才能及时获取到资源,从而尽快被执行。因而开发人员可以对锁对象进行标注,从而使得锁对象被优先调度,且能够高效地完成调度。

另一方面,本申请另一实施例提供了一种调度方法,包括:编译器获取待编译代码,待编译代码包括限定对象,位于限定对象之前的第一应用程序编程接口api函数,以及位于限定对象之后的第二api函数。其中,限定对象为源代码块。第一api函数用于指示调度方式。该调度方式包括代码块的调度优先级,代码块的调度策略,中央处理器cpu信息,输入/输出i/o调度策略,或i/o调度优先级中的一项或多项。编译器对第一api函数进行编译,生成第一函数入口和第一目标代码块,第一函数入口用于调用第一目标代码块,第一目标代码块用于配置第一api函数指示的调度方式。编译器对作用对象进行编译,生成第三目标代码块。编译器对第二api函数进行编译,生成第二函数入口和第二目标代码块,第二目标代码块用于取消第一api函数指示的调度方式。虚拟机获取编译后生成的目标文件,目标文件包括第一目标代码块、第二目标代码块和第三目标代码块,以及位于第三目标代码块之前的第一函数入口,位于第三目标代码块之后的第二函数入口。虚拟机链接第一函数入口和第一目标代码块。虚拟机运行第一函数入口链接的第一目标代码块,以配置第一api函数指示的调度方式。虚拟机根据第一api函数指示的调度方式,调度并运行第三目标代码块。虚拟机链接第二函数入口和第二目标代码块。虚拟机运行第二函数入口链接的第二目标代码块,以取消第一api函数指示的调度方式。

在该方案中,虚拟机可以实现根据第一api函数指示的调度方式,即根据开发人员通过第一api函数配置的调度方式,对作用对象编译后生成的第三目标代码块进行优先调度等控制。对于作用对象以外的其他代码块,则不采用第一api函数配置的调度方式进行优先调度等控制。

另一方面,本申请实施例提供了一种编译器,该编译器可以配置在电子设备上,该编译器可以包括:获取单元,用于获取待编译代码,待编译代码包括标注信息和标注信息的作用对象;作用对象为源代码块,标注信息用于指示调度方式。编译单元,用于对标注信息进行编译,生成第一目标代码块和第二目标代码块;第一目标代码块用于配置标注信息指示的调度方式;第二目标代码块用于取消标注信息指示的调度方式。编译单元还用于,对作用对象进行编译,生成第三目标代码块。

在一种可能的设计中,标注信息包括字符@,标注名称和调度参数,调度参数包括代码块的调度优先级,代码块的调度策略,中央处理器cpu信息,输入/输出i/o调度策略,或i/o调度优先级中的一项或多项。其中,代码块的调度策略和i/o调度策略包括,先入先出调度sched_fifo策略、轮循调度sched_rr策略、实时调度sched_rt策略或其他调度sched_other策略。cpu信息包括cpu绑核或cpu工作频率。

在另一种可能的设计中,该编译单元还用于:对标注信息进行编译,还生成第一函数入口和第二函数入口,第一函数入口用于调用第一目标代码块,第二函数入口用于调用第二目标代码块。将第一函数入口插入第三目标代码块之前。将第二函数入口插入第三目标代码块之后。

在另一种可能的设计中,若标注信息之后的代码为对象object,则标注信息的标注对象为对象object,作用对象为对象object范围内的源代码。若标注信息之后的代码为方法method,则标注对象为方法method,作用对象为方法范围内的源代码。若标注信息之后的代码为对象或方法中的一行语句,则标注对象和作用对象均为一行语句的源代码。若标注信息之后的代码为{}限定的语句,则标注对象和作用对象均为{}范围内的语句的源代码。若标注信息之后的代码为锁对象中的notify函数,则标注对象为notify函数,作用对象包括notify函数范围内的源代码,以及锁对象中与notify函数配合的wait函数范围内的源代码。

在另一种可能的设计中,标注信息之后的代码为锁对象,标注对象为锁对象,作用对象为锁对象范围内的源代码。

另一方面,本申请实施例提供了一种虚拟机,该虚拟机可以运行在电子设备上。该虚拟机可以包括:获取单元,用于获取编译后生成的目标文件,目标文件包括根据标注信息编译后生成的第一目标代码块和第二目标代码块,以及根据标注信息的作用对象编译后生成的第三目标代码块;第一目标代码块用于配置标注信息指示的调度方式;第二目标代码块用于取消标注信息指示的调度方式。运行单元,用于运行第一目标代码块,以配置标注信息指示的调度方式。运行单元还用于,根据标注信息指示的调度方式,调度并运行第三目标代码块。运行单元还用于,运行第二目标代码块,以取消标注信息指示的调度方式。

在一种可能的设计中,调度方式包括代码块的调度优先级,代码块的调度策略,中央处理器cpu信息,输入/输出i/o调度策略,或i/o调度优先级中的一项或多项。其中,代码块的调度策略和i/o调度策略包括,先入先出调度sched_fifo策略、轮循调度sched_rr策略、实时调度sched_rt策略或其他调度sched_other策略;cpu信息包括cpu绑核或cpu工作频率。

在另一种可能的设计中,目标文件还包括根据标注信息编译后生成的第一函数入口和第二函数入口;第一函数入口用于调用第一目标代码块,第二函数入口用于调用第二目标代码块;第一函数入口位于第三目标代码块之前,第二函数入口位于第三目标代码块之后。虚拟机还包括链接单元,用于:在运行第一目标代码块之前,链接第一函数入口与第一目标代码块。运行单元具体用于,运行第一函数入口链接的第一目标代码块。链接单元还用于,在运行第二目标代码块之前,链接第二函数入口与第二目标代码块。运行单元具体用于,运行第二函数入口链接的第二目标代码块。

在另一种可能的设计中,虚拟机还包括:生成单元,用于在运行第一目标代码块之前,生成第一函数入口,第一函数入口用于调用第一目标代码块。链接单元,用于链接第一函数入口与第一目标代码块。运行单元具体用于,运行第一函数入口链接的第一目标代码块。生成单元还用于,在运行第二目标代码块之前,生成第二函数入口,第二函数入口用于调用第二目标代码块。链接单元还用于,链接第二函数入口与第二目标代码块。运行单元具体用于,运行第二函数入口链接的第二目标代码块。

在另一种可能的设计中,标注信息的作用对象为第一源代码块,第一源代码块和第二源代码块属于同一线程;调度参数包括cpu信息。

在另一种可能的设计中,标注信息的作用对象为第一源代码块,第一源代码块用于请求资源,第一源代码块属于第一线程;调度参数指示的代码块的调度优先级高。目标文件还包括第二源代码块编译后生成的第四目标代码块,以及锁对象编译后生成的第五目标代码块;第二源代码块用于请求资源,锁对象用于锁定资源。运行单元还用于,在运行第一目标代码块,以配置标注信息指示的调度方式之后,且运行第三目标代码块之前,根据调度参数确定第三目标代码块的调度优先级高。将第五目标代码块对应的锁对象锁定的资源,授权给第三目标代码块使用。在运行第二目标代码块,以取消标注信息指示的调度方式之后,将锁对象的锁定的资源授权给第四目标代码块使用。运行第四目标代码块。

在另一种可能的设计中,标注信息的标注对象为第一源代码块,第一源代码块为notify函数,第一源代码块为锁对象范围内的函数,锁对象还包括wait函数,标注信息的作用对象为notify函数范围内的源代码块和wait函数范围内的源代码块。第三目标代码块包括wait函数范围内的源代码块编译后生成的第四目标代码块,和notify函数范围内的源代码块编译后生成的第五目标代码块。运行单元具体用于:根据标注信息指示的调度方式,调度并运行第四目标代码块;根据标注信息指示的调度方式,调度并运行第五目标代码块。

在另一种可能的设计中,标注信息的作用对象为锁对象范围内的源代码块。

另一方面,本申请实施例提供了一种电子设备,包括处理器和存储器。该存储器中存储有代码,该处理器执行该代码以实现上述任一方面或任一种可能的设计中的运行方法或调度方法。

另一方面,本申请实施例提供了一种系统,包括编译器和虚拟机。编译器用于执行上述任一方面或任一种可能的设计中的编译方法或调度方法。虚拟机用于执行上述任一方面或任一种可能的设计中的运行方法或调度方法。

另一方面,本申请实施例提供了一种计算机存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行上述任一方面或任一种可能的设计中的编译方法或调度方法。

又一方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行上述任一方面或任一种可能的设计中的编译方法或调度方法。

附图说明

图1为本申请实施例提供的一种电子设备的硬件结构示意图;

图2为本申请实施例提供的一种电子设备的软件架构示意图;

图3为本申请实施例提供的一种调度方法流程图;

图4为本申请实施例提供的一种调度过程示意图;

图5为本申请实施例提供的另一种调度方法流程图;

图6为本申请实施例提供的另一种调度过程示意图;

图7为本申请实施例提供的另一种调度方法流程图;

图8为本申请实施例提供的另一种调度过程示意图;

图9为本申请实施例提供的一组用户界面示意图;

图10为本申请实施例提供的另一种调度方法示意图;

图11为本申请实施例提供的一种编译器的结构示意图;

图12为本申请实施例提供的一种虚拟机的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,a/b可以表示a或b;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。

现有在java虚拟机内部配置线程运行优先级的方案,可以在1~10的级别范围内配置线程的优先级。线程内的代码块在运行时,涉及到获取网络资源(例如上传或下载使用的资源)、输入/输出i/o资源(例如写入/读取使用的资源)或其他资源的操作。java虚拟机内部配置的线程优先级,不会带入到该线程内的代码块与其他线程的代码块,竞争和抢占资源的过程中。其中,该资源可以包括网络资源(例如上行发送或下行接收资源),i/o资源(例如存储卡、存储设备、ic卡等的读/写资源),蓝牙通信资源(例如点对点蓝牙直连通信资源),公共变量的访问资源,或其他资源等。

举例来说,线程1需要访问操作系统的文件中的图片1。其他多个线程也需要访问图片1。线程1的优先级高于其他线程。锁对象1用于锁定访问该图片的i/o资源权限。线程1中的代码块a用于请求竞争i/o资源。其他线程中的代码块b、c等用于请求竞争i/o资源。虽然线程1的优先级高于其他线程,但线程1中的代码块a与其他线程中的代码块b、c等处于竞争关系。在获取i/o资源时,代码块a的优先级并不高于代码块b、c。

当优先级较高的线程与优先级较低的线程抢占网络资源、i/o资源或其他资源时,由于线程的优先级不会被带到资源抢占过程中,因而低优先级的线程可能会先抢占到资源,高优先级的线程可能未抢占到资源。从而,低优先级的线程阻塞了高优先级的线程的运行,出现优先级反转的情况。

标注(annotation)是java语言提供的一种语言特性,可以为程序元素设置元数据(metadata)。本申请实施例提供了一种基于标注机制的调度方法,可以采用标注信息指示的调度方式,对线程中的代码块(block)进行细粒度的调度。尤其地,本申请实施例提供的调度方法,可以采用标注信息指示的调度方式,优先、高效地对线程中的代码块进行调度和执行。

该标注信息可以定义高优先级线程内部,更细粒度的代码块的调度优先级等调度方式。该代码块可以是抢占网络资源、i/o资源或其他资源的代码块。从而使得高优先级线程内部抢占资源的代码块优先调度,进而使得高优先级线程可以优先调度,避免出现线程优先级反转的问题。

在本申请的实施例中,标注信息也可以定义线程的优先级。并且,标注信息可定义的线程优先级的级别范围为操作系统支持的优先级的级别范围,而并不局限于虚拟机内部可配置的优先级的级别范围。因而,标注信息可以定义的优先级的界级别范围更大。示例性的,若现有技术中虚拟机内部可配置的优先级的级别范围为1~10,则标注信息可定义的优先级的级别范围大于1~10,例如可以为1~299。从而,可以使得线程的优先级更高,优先级控制更为灵活、有效。

并且,由于线程可能包括多个代码块,线程的粒度较大。若通过设置整个线程的优先级,优先对整个线程进行调度,则线程中的关键代码块和非关键代码块具有同等的优先级,整个线程的调度和执行过程所需的时间较长。本申请实施例根据标注信息指示的调度方式,对线程中更细粒度的某个关键代码块优先进行调度,可以快速完成关键代码块的调度和执行过程,从而优先保证关键代码块的运行,因而调控的效果更好。

具体的,在本申请的实施例中,开发人员可以通过标注信息对标注对象进行标注。该标注对象为标注信息之后修饰的内容。该标注信息用于指示调度方式。标注信息和标注对象可以用于确定标注信息的作用对象。该作用对象为基于java语言编写的源代码块。该作用对象的范围可以大于或者等于标注对象的范围。作用对象内的源代码块可以按照开发人员通过标注信息定义的调度方式进行调度,从而可以提高作用对象内的源代码块的调度优先级和执行效率等,避免作用对象内的源代码块被其他线程或代码块阻塞,避免出现优先级反转的问题。

在本申请的实施例中,代码块可以包括对象(object)或语句。该对象可以是线程、方法(method)(也称函数),或用户定义的其他代码块。该语句可以是一行代码,也可以是多行代码的集合。该语句可以在对象中,也可以不在对象中。例如,该语句可以是在对象之外,“{”和“}”之间限定的一行或多行代码。

作为标注对象的源代码块也可为线程、方法或语句等。作用对象的源代码块也可以为线程、方法或语句等。

其中,若标注信息之后的代码为对象(object),则标注对象和作用对象均为该对象(object)范围内的源代码。例如,若标注信息之后的代码为锁对象(即synchronized定义的对象),则标注对象和作用对象均为该锁对象(object)范围内的源代码。若标注信息之后的代码为方法(method),则标注对象和作用对象为该方法范围内的源代码。若标注信息之后的代码为对象或方法中的一行语句,则标注对象和作用对象为该行语句的源代码。若标注信息之后的代码为{}限定的语句,则标注对象和作用对象为该{}范围内的语句的源代码。若标注信息之后的代码为锁对象中的notify函数,则标注对象为notify函数,作用对象为notify函数范围内的源代码,以及锁对象中与notify函数配合的wait函数范围内的源代码。

具体的,若标注信息之后的代码为对象object,则标注信息的标注对象为该对象object,标注信息的作用对象为该对象object范围内的源代码。其中,标注信息的作用对象即为标注信息的作用范围。例如,标注信息之后的代码为锁对象(即synchronized定义的对象),标注对象为该锁对象,作用对象为该锁对象范围内的源代码。若标注信息之后的代码为方法method,则标注对象为该方法method,作用对象为该方法范围内的源代码。若标注信息之后的代码为对象或方法中的一行语句,则标注对象和作用对象均为该行语句的源代码。若标注信息之后的代码为{}限定的语句,则标注对象和作用对象均为该{}内包括的语句的源代码。若标注信息之后的代码为锁对象中的notify函数,则标注对象为该notify函数,作用对象包括该notify函数范围内的源代码,以及该锁对象中与notify函数配合的wait函数范围内的源代码。

也就是说,本申请实施例提供的方法,不仅可以根据标注信息指示的调度方式对线程进行调度;还可以根据标注信息指示的调度方式,对线程中的对象、方法(函数)或语句等代码块进行细粒度的调度。由于线程中可能包括许多个代码块,影响线程执行效率的可能是该线程中的某个或某几个代码块。对整个线程的优先级进行配置,并不能对线程内部不同部分进行控制和调度,从而并不能有效解决线程的运行效率问题。而根据标注信息指示的调度方式,对线程中对象(object)、方法(method)或语句进行细粒度的调度,可以有效地控制、支配和调度线程内部的各个部分,提高处理过程的灵活性和机动性。

在一些实施例中,该作用对象可以是关键代码块。例如,该关键代码块可以是用户界面相关的代码块。示例性的,该关键代码块可以是用户登录时,用户名和密码的输入界面相关的代码块。通过标注信息定义的调度方式调度用户界面相关的代码块,可以使得用户界面相关的代码块优先、高效地执行,使得用户交互过程更为流畅,避免用户界面出现卡顿,提高用户使用体验。

再例如,该关键代码块可以是实现重要性能的代码块。例如,在播放视频时,与实现显示弹幕或广告等的代码块相比,视频画面播放相关的代码块是实现重要性能的代码块。通过标注信息定义的调度方式调度实现重要性能的代码块,可以使得重要性能相关的代码块优先被快速地处理,保证重要性能能够优先实现。

再例如,该关键代码块可以是影响整体运行效率的代码块。例如,在一个线程中,多个代码块的运行需要依赖于某个代码块的运行结果,该代码块的运行效率影响了整个线程或进程的运行效率。再例如,在一个线程中,某个代码块的计算复杂度较大,该代码块的运行效率影响了该线程的整体运行效率。通过标注信息定义的调度方式对影响整体运行效率的代码块进行调度,可以使得影响整体运行效率的代码块优先、快速地执行,从而可以提高整体的运行效率。

一般地,代码运行的生命周期可以包括编译时、链接时、加载时和运行时等几个阶段。其中,编译时阶段可以通过编译器(compiler)完成。链接时、加载时和运行时阶段可以通过虚拟机完成。

本申请实施例提供的调度方法,可以包括编译器执行的编译方法和虚拟机执行的运行方法。编译器可以配置在服务器或其他电子设备上。虚拟机可以运行在终端或其他电子设备上。该编译器和该虚拟机可以在同一电子设备上,也可以在不同电子设备上。

例如,运行有该虚拟机的电子设备可以是手机、平板电脑、可穿戴设备、车载设备、增强现实(augmentedreality,ar)/虚拟现实(virtualreality,vr)设备、笔记本电脑、超级移动个人计算机(ultra-mobilepersonalcomputer,umpc)、上网本、个人数字助理(personaldigitalassistant,pda)、智能家居设备等。本申请实施例对电子设备的设备类型不作具体限定。

示例性的,图1示出了电子设备100的结构示意图。该电子设备100上可以配置有编译器和/或虚拟机。电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universalserialbus,usb)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriberidentificationmodule,sim)卡接口195等。其中传感器模块180可以包括压力传感器180a,陀螺仪传感器180b,气压传感器180c,磁传感器180d,加速度传感器180e,距离传感器180f,接近光传感器180g,指纹传感器180h,温度传感器180j,触摸传感器180k,环境光传感器180l,骨传导传感器180m等。

处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(applicationprocessor,ap),调制解调处理器,图形处理器(graphicsprocessingunit,gpu),图像信号处理器(imagesignalprocessor,isp),控制器,存储器,视频编解码器,数字信号处理器(digitalsignalprocessor,dsp),基带处理器,和/或神经网络处理器(neural-networkprocessingunit,npu)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。

其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。

处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统效率。

在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integratedcircuit,i2c)接口,集成电路内置音频(inter-integratedcircuitsound,i2s)接口,脉冲编码调制(pulsecodemodulation,pcm)接口,通用异步收发传输器(universalasynchronousreceiver/transmitter,uart)接口,移动产业处理器接口(mobileindustryprocessorinterface,mipi),通用输入输出(general-purposeinput/output,gpio)接口,用户标识模块(subscriberidentitymodule,sim)接口,和/或通用串行总线(universalserialbus,usb)接口等。

充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。

电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。

电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。

天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。

移动通信模块150可以提供应用在电子设备100上的包括2g/3g/4g/5g等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(lownoiseamplifier,lna)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。

无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocalareanetworks,wlan)(如无线保真(wirelessfidelity,wi-fi)网络),蓝牙(bluetooth,bt),全球导航卫星系统(globalnavigationsatellitesystem,gnss),调频(frequencymodulation,fm),近距离无线通信技术(nearfieldcommunication,nfc),红外技术(infrared,ir)等无线通信的解决方案。

在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。无线通信技术可以包括全球移动通讯系统(globalsystemformobilecommunications,gsm),通用分组无线服务(generalpacketradioservice,gprs),码分多址接入(codedivisionmultipleaccess,cdma),宽带码分多址(widebandcodedivisionmultipleaccess,wcdma),时分码分多址(time-divisioncodedivisionmultipleaccess,td-scdma),长期演进(longtermevolution,lte),bt,gnss,wlan,nfc,fm,和/或ir技术等。gnss可以包括全球卫星定位系统(globalpositioningsystem,gps),全球导航卫星系统(globalnavigationsatellitesystem,glonass),北斗卫星导航系统(beidounavigationsatellitesystem,bds),准天顶卫星系统(quasi-zenithsatellitesystem,qzss)和/或星基增强系统(satellitebasedaugmentationsystems,sbas)。

电子设备100通过gpu,显示屏194,以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏194和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个gpu,其执行程序指令以生成或改变显示信息。

显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquidcrystaldisplay,lcd),有机发光二极管(organiclight-emittingdiode,oled),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganiclightemittingdiode的,amoled),柔性发光二极管(flexlight-emittingdiode,fled),miniled,microled,micro-oled,量子点发光二极管(quantumdotlightemittingdiodes,qled)等。在一些实施例中,电子设备100可以包括1个或n个显示屏194,n为大于1的正整数。

电子设备100可以通过isp,摄像头193,视频编解码器,gpu,显示屏194以及应用处理器等实现拍摄功能。

摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(chargecoupleddevice,ccd)或互补金属氧化物半导体(complementarymetal-oxide-semiconductor,cmos)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给isp转换成数字图像信号。isp将数字图像信号输出到dsp加工处理。dsp将数字图像信号转换成标准的rgb,yuv等格式的图像信号。在一些实施例中,电子设备100可以包括1个或n个摄像头193,n为大于1的正整数。

外部存储器接口120可以用于连接外部存储卡,例如microsd卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。

内部存储器121可以用于存储计算机可执行程序代码,可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universalflashstorage,ufs)等。

在本申请的实施例中,处理器110可以运行存储在内部存储器121的指令,实现编译器或虚拟机的功能。

电子设备100可以通过音频模块170,扬声器170a,受话器170b,麦克风170c,耳机接口170d,以及应用处理器等实现音频功能。例如音乐播放,录音等。

音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。

扬声器170a,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备100可以通过扬声器170a收听音乐,或收听免提通话。

受话器170b,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备100接听电话或语音信息时,可以通过将受话器170b靠近人耳接听语音。

麦克风170c,也称“话筒”,“传声器”,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风170c发声,将声音信号输入到麦克风170c。电子设备100可以设置至少一个麦克风170c。在另一些实施例中,电子设备100可以设置两个麦克风170c,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备100还可以设置三个,四个或更多麦克风170c,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。

耳机接口170d用于连接有线耳机。耳机接口170d可以是usb接口130,也可以是3.5mm的开放移动电子设备平台(openmobileterminalplatform,omtp)标准接口,美国蜂窝电信工业协会(cellulartelecommunicationsindustryassociationoftheusa,ctia)标准接口。

触摸传感器180k,也称“触控面板”。触摸传感器180k可以设置于显示屏194,由触摸传感器180k与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180k用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180k也可以设置于电子设备100的表面,与显示屏194所处的位置不同。

按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。

马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏194不同区域的触摸操作,马达191也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。

指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。

可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。

例如,当电子设备100为运行有虚拟机的手机时,电子设备100可以包括图1所示的部件。当电子设备100为配置有编译器的服务器时,电子设备100可以包括存储器和处理器,还可以包括用于连接存储器、处理器以及其他部件的总线;且可以不包括显示屏、音频模块等部件。其中,该总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该总线可以分为地址总线、数据总线、控制总线等。

在本申请的实施例中,处理器110可以运行存储在内部存储器121中的指令,实现编译器或虚拟机的功能。编译器识别到用于指示调度方式的标注信息后,对标注信息进行编译,从而生成配置和取消标注信息指示的调度方式的代码块。编译器还能够对作用对象进行编译,生成目标代码块。虚拟机在运行时,先配置标注信息指示的调度方式,再根据该调度方式对目标代码块进行调度和运行,而后再取消标注信息指示的调度方式。从而,可以实现对线程、对象、方法或语句等代码块进行调度控制。

电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的软件系统为例,示例性说明电子设备100的软件结构。

图2是本申请实施例的电子设备100的软件结构框图。分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将软件系统分为四层,从上至下分别为应用程序层,应用程序框架层,运行时和系统库,以及内核层。应用程序层可以包括一系列应用程序包。

如图2所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,wlan,蓝牙,音乐,视频,短信息等应用程序。

应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramminginterface,api)和编程框架。应用程序框架层包括一些预先定义的函数。

如图2所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。

窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。

内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。

视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。

电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。

资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。

通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。

运行时包括核心库和虚拟机。运行时负责系统的调度和管理。在运行时,虚拟机可以先配置标注信息指示的调度方式,再根据该调度方式对对象、方法或语句等源代码块编译后的目标代码块进行调度,而后再取消标注信息指示的调度方式,实现对代码块的调度控制。

核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是系统的核心库。

应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。

系统库可以包括多个功能模块。例如:表面管理器(surfacemanager),媒体库(medialibraries),三维图形处理库(例如:opengles),2d图形引擎(例如:sgl)等。

表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2d和3d图层的融合。

媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:mpeg4,h.264,mp3,aac,amr,jpg,png等。

三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。

2d图形引擎是2d绘图的绘图引擎。

内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。

以下从编译器和虚拟机的角度,对本申请实施例提供的调度方法进行阐述。可以理解的是,编译器所执行的功能和操作,也就是配置该编译器的电子设备执行的功能和操作。虚拟机所执行的功能和操作,也就是运行该虚拟机的电子设备执行的功能和操作。

如图3所示,本申请实施例提供了一种调度方法,可以包括:

301、编译器获取待编译代码,待编译代码包括标注信息和标注信息的作用对象,作用对象为源代码块,标注信息用于指示调度方式。

其中,标注信息作用对象范围内的源代码块,为基于java语言编写的编译前的代码段。作用对象范围内的源代码块,为开发人员指定的需要进行调度控制的代码块。例如,作用对象范围内的源代码块可以为上述关键代码块。

该标注信息具体可以包括字符“@”和调度参数。该调度参数用于指示调度方式。此外,该标注信息还可以包括标注名称。例如,该标注信息的格式可以为:@+标注名称+(至少一项调度参数)。标注信息之后的代码为标注对象。

示例性的,参见如下伪代码:

其中,@task_proi(“priority=15,cpu=2,io=high”)表示标注信息。字符“@”之后的“task_proi”表示标注名称。(“priority=15,cpu=2,io=high”)表示调度参数。标注对象为voidf()函数,作用对象为voidf()函数范围内的源代码。

编译器可以根据标注信息的内容,确定该标注信息中“@”之后,括号中的调度参数用于定义调度方式。而后,编译器可以采用以上实施例描述的方式,根据标注信息之后的代码识别标注信息的标注对象,并确定标注信息的作用对象(或称作用范围),此处不予赘述。

标注信息的作用域可以包括编译时(retentionpolicy.class)和运行时(retentionpolicy.runtime)。

302、编译器对标注信息进行编译,生成第一目标代码块和第二目标代码块,第一目标代码块用于配置标注信息指示的调度方式,第二目标代码块用于取消标注信息指示的调度方式。

在本申请的实施例中,编译前的代码块可以称为源代码块,编译后获得的代码块可以称为目标代码块。编译器获取待编译代码后,若识别到标注信息中“@”之后的调度参数用于定义调度方式,则可以将标注信息作为元数据,从而对标注信息进行编译,生成第一目标代码块和第二目标代码块。而在现有技术中,编译器通常不会将标注信息作为元数据进行编译。

303、编译器对作用对象进行编译,生成第三目标代码块。

也就是说,编译器可以获得对标注信息编译后生成的第一目标代码块和第二目标代码块,以及对作用对象编译后生成的第三目标代码块。

上述步骤301-303描述的方法可以称为编译方法。其中,步骤302和步骤303没有明确的先后顺序关系。编译器可以先生成第一目标代码块和第二目标代码块,再生成第三目标代码块;也可以先生成第三目标代码块,再生成第一目标代码块和第二目标代码块。

304、虚拟机获取编译后生成的目标文件,该目标文件包括第一目标代码块、第二目标代码块和第三目标代码块。

其中,第一目标代码块和第二目标代码块是根据标注信息编译后生成的目标代码块。第三目标代码块是根据标注信息的作用对象编译后生成的目标代码块。

305、虚拟机运行第一目标代码块,以配置标注信息指示的调度方式。

该第一目标代码块用于配置标注信息指示的调度方式。虚拟机可以运行第一目标代码块,以配置标注信息指示的调度方式。

306、虚拟机根据标注信息指示的调度方式,调度并运行第三目标代码块。

307、虚拟机运行第二目标代码块,以取消标注信息指示的调度方式。

该第二目标代码块用于取消标注信息指示的调度方式。在完成第三目标代码块的调度后,虚拟机可以运行第二目标代码块,以取消标注信息指示的调度方式。从而,虚拟机对其他目标代码块不会采用标注信息指示的调度方式进行调度。

上述步骤304-307描述的方法可以称为运行方法。其中,虚拟机在运行第一目标代码块、第二目标代码块和第三目标代码块之前,可以先将第一目标代码块第二目标代码块和第三目标代码块加载到内存中。

通过上述步骤305-307,虚拟机可以实现根据标注信息指示的调度方式,即根据开发人员配置的调度方式,对作用对象编译后生成的第三目标代码块进行优先调度等控制。对于作用对象以外的其他代码块,则不采用标注信息指示的调度方式进行优先调度等控制。

示例性的,图4示出了一种应用程序的线程生命周期的示意图。该线程包括代码块a、b、c、d、e五个代码块。其中,代码块c为开发人员通过标注信息标注的代码块。代码块c可以根据标注信息指示的调度方式,即按照开发人员配置的优先级等调度方式执行。在代码块c执行接收后,停止按照标注信息指示的调度方式进行调度,恢复线程原有的调度方式,继续完成剩余代码块的执行。

在图3和图4所示的调度方法中,虚拟机根据标注信息指示的调度方式,对线程中的对象、方法或语句等代码块进行细粒度的调度。并且,该种细粒度的调度方式,可以有效地控制、支配和调度线程内部的不同部分,提高处理过程的灵活性和机动性。

当作用对象为高优先级线程内部的代码块时,标注信息可以定义高优先级线程内部,更细粒度的代码块的调度优先级等调度方式。该代码块可以是抢占网络资源、i/o资源或其他资源的代码块。从而使得高优先级内部抢占资源的代码块优先调度,进而使得高优先级线程可以优先调度,保证该线程的优先级,避免出现线程优先级反转的问题。

在一些实施例中,该调度参数可以包括代码块的调度优先级,代码块的调度策略,cpu信息,i/o调度策略或i/o调度优先级等中的一项或多项。即,虚拟机可以根据这些调度参数规定的调度方式,调度和运行第三目标代码块。

其中,代码块的调度优先级参数用于定义,执行作用对象内的代码块的优先级别。

代码块的调度策略参数用于定义,作用对象内的代码块的调度策略。例如,该调度策略可以包括先入先出调度sched_fifo策略、轮循调度sched_rr策略、实时调度sched_rt策略或其他调度sched_other策略。

标注信息中定义的代码块的调度优先级参数和代码块的调度策略参数,可以指示代码块优先被调度。

cpu信息用于定义,执行作用对象内的代码块时的cpu绑核或cpu工作频率等信息。其中,cpu核可以包括大核和小核。例如,电子设备内部可以包括8个cpu核,其中包括4个大核和4个小核。其中,cpu大核的主频较高,处理速率较快。若作用对象内的代码块绑定的是cpu大核,且cpu的工作频率越大,则cpu的处理效率越高,代码块越能被高效地调度。

i/o调度策略用于定义,执行作用对象内的代码块时,涉及到的输入/输出的调度策略。类似的,该调度策略也可以包括先入先出调度sched_fifo策略、轮循调度sched_rr策略、实时调度sched_rt策略或其他调度sched_other策略。

i/o调度策略用于定义,执行作用对象内的代码块时涉及到的i/o操作的调度优先级。

标注信息中定义的i/o调度优先级参数和i/o调度策略参数,可以指示代码块涉及的i/o操作优先被执行。

也就是说,本申请实施例提供的调度方法,通过标注信息不仅可以设置线程或线程中代码块的调度优先级;还可以设置线程或线程中代码块的代码块的调度策略,cpu信息,i/o调度策略,或i/o调度优先级等,从而可以对多方面的处理性能进行控制,以便可以通过多种调度方式优先处理被标注的代码块,提高被标注的代码块的执行效率。因而,标注信息所指示的调度方式的调度范围更广,调度方式更为灵活、多样。而现有技术则无法对线程调度优先级以外的其他调度参数或其他调度方式进行控制。

例如,该标注信息可以为:@task_proi(代码块的调度策略,cpu信息,i/o调度策略,i/o调度优先级)。若开发人员不想配置其中的某种调度参数,则在一种技术方案中,标注信息中未配置的调度参数的参数值可以为空值。例如,标注信息可以为@task_proi(代码块的调度优先级,代码块的调度策略,cpu信息,null,null)。或者,标注信息可以为@task_proi(代码块的调度策略,cpu信息)。编译器在识别到本申请实施例中的标注信息后,若发现某种调度参数为null,则可以按照该种调度参数对应的默认值进行编译。虚拟机可以按照该种调度参数对应的默认值指示的调度方式进行调度。若开发人员不想专门配置某种调度参数,则在另一种技术方案中,开发人员可以将该种调度参数设置为默认值。

示例性的,在上述标注信息@task_proi(“priority=15,cpu=2,io=high”)中,“priority”用于定义调度参数中代码块的调度优先级。示例性的,操作系统支持的优先级别范围为1~100,作用对象内的代码块的优先级为15。“cpu”用于定义调度参数中的cpu信息。cpu=2表示作用对象内的代码块与cpu大核绑定。若cpu=1,则可以表示作用对象内的代码块与cpu小核绑定。“io”用于定义调度参数中i/o调度优先级。io=high表示i/o调度优先级为高。若io=normal,在表示i/o调度优先级为常规。该标注信息未定义代码块的调度策略和i/o调度策略这两类参数。

需要说明的是,以上标注信息中调度参数的定义方式仅为示例性说明,操作系统、编译器和虚拟机支持的任意定义方式均可以,本申请实施例对此不予限定。例如,操作系统支持的代码块的调度优先级分为1~5档。标注信息包括priority=5,表示作用对象内的代码块的优先级为第5档的优先级。再例如,操作系统支持的i/o调度优先级的级别范围为1~99。标注信息包括io=20,表示作用对象内涉及的i/o调度优先级为级别20。

在一些实施例中,参见图5,上述步骤302还可以包括:编译器对标注信息进行编译,还生成第一函数入口和第二函数入口。该第一函数入口用于调用第一目标代码块,第二函数入口用于调用第二目标代码块。例如,该第一函数入口和第二函数入口可以为插桩(stub)函数。

也就是说,编译器对标注信息进行编译,不仅可以生成第一目标代码块和第二目标代码块,还可以生成用于调用第一目标代码块的第一函数入口,以及用于调用第二目标代码块的第二函数入口。

在步骤302之后,该方法还可以包括:

308、编译器将第一函数入口插入第三目标代码块之前。

309、编译器将第二函数入口插入第三目标代码块之后。

在步骤305之前,该方法还可以包括:

310、虚拟机链接第一函数入口与第一目标代码块。

步骤305具体可以包括:虚拟机运行第一函数入口链接的第一目标代码块,以配置标注信息指示的调度方式。

在步骤307之前,该方法还可以包括:

311、虚拟机链接第二函数入口与第二目标代码块。

步骤307具体可以包括:虚拟机运行第二函数入口链接的第二目标代码块,以取消标注信息指示的调度方式。

图5所示的调度方法的示意图还可以参见图6。在图5和图6所示的调度方法中,编译器可以根据标注信息生成第一函数入口和第二函数入口,并将第一函数入口和第二函数入口分别插入第三目标代码块前后。虚拟机可以链接第一函数入口和第一目标代码块,并链接第二函数入口和第二目标代码块。从而,虚拟机可以先通过第一函数入口运行第一目标代码块,以配置标注信息指示的调度方式;而后,可以根据该调度方式调度并运行第三目标代码块;之后,再通过第二函数入口运行第二目标代码块,以取消标注信息指示的调度方式。

在另一些实施例中,参见图7,在步骤305之前,该方法还可以包括:

312、虚拟机生成第一函数入口,第一函数入口用于调用第一目标代码块。

313、虚拟机链接第一函数入口与第一目标代码块。

步骤305具体可以包括:虚拟机运行第一函数入口链接的第一目标代码块,以配置标注信息指示的调度方式。

在步骤307之前,该方法还可以包括:

314、虚拟机生成第二函数入口,第二函数入口用于调用第二目标代码块。

315、虚拟机链接第二函数入口与第二目标代码块。

步骤307具体可以包括:虚拟机运行第二函数入口链接的第二目标代码块,以取消标注信息指示的调度方式。

图7所示的调度方法的示意图还可以参见图8。在图7和图8所示的调度方法中,虚拟机可以根据第一目标代码块和第二目标代码块生成第一函数入口和第二函数入口,并链接第一函数入口和第一目标代码块,以及链接第二函数入口和第二目标代码块。而后,虚拟机可以先通过第一函数入口运行第一目标代码块,以配置标注信息指示的调度方式;再根据该调度方式调度并运行第三目标代码块;之后,再通过第二函数入口运行第二目标代码块,以取消标注信息指示的调度方式。

以下通过场景举例对本申请实施例提供的调度方法进行阐述。

场景一:标注信息的标注对象和作用对象为任意代码块。这样,被标注的任意代码块,可以根据标注信息指示的调度方式高效执行。比如,标注对象为任意函数,作用对象为该函数范围内的代码块。

例如,标注信息的作用对象为第一源代码块,第一源代码块和第二源代码块属于同一线程;调度参数包括cpu信息。第一源代码块可以根据调度参数指示的cpu信息高效执行。

示例性的,图库应用的执行线程包括代码块a,代码块b和代码块c。代码块a用于实现打开图片,代码块b用于对图片进行优化,代码块c用于保存图片。由于用于进行图片优化的代码块b的复杂度较大,因而开发人员可以通过标注信息对代码块b进行标注,即作用对象为代码块b。从而,可以通过标注信息配置调度参数中的cpu信息等参数,以提高代码块b的执行效率,给用户以图片能够被快速优化的体验。例如,标注信息中的cpu信息可以指示代码块b与cpu大核相绑定,且cpu的工作频率较高。

示例性的,该种场景下的伪代码可以如下:

其中,@task_proi(“cpu=2,1400000”)表示标注信息。在该标注信息中,“cpu”用于定义cpu信息。cpu=2,1400000中的“2”表示代码块与cpu大核绑定,“1400000”表示cpu的工作频率为1400000khz,即1.4ghz。该标注信息未定义其他调度参数。标注信息的作用对象为voidf()函数。该voidf()函数可以为上述代码块b。

场景二:标注对象和作用对象为锁对象之外,请求锁对象锁定的资源的代码块。

例如,标注信息的作用对象为第一源代码块,第一源代码块用于请求资源,第一源代码块属于第一线程;调度参数指示的代码块的调度优先级高。目标文件还包括第二源代码块编译后生成的第四目标代码块,以及锁对象编译后生成的第五目标代码块;第二源代码块用于请求资源,锁对象用于锁定资源。在虚拟机运行第一目标代码块,以配置标注信息指示的调度方式之后,且运行第三目标代码块之前,方法还包括:虚拟机根据调度参数确定第三目标代码块的调度优先级高。虚拟机将第五目标代码块对应的锁对象锁定的资源,授权给第三目标代码块使用。在虚拟机运行第二目标代码块,以取消标注信息指示的调度方式之后,方法还包括:虚拟机将锁对象的锁定的资源授权给第四目标代码块使用。虚拟机运行第四目标代码块。这样,第三目标代码块可以优先获得锁从而可以优先执行,即第一源代码块的功能可以优先实现。

示例性的,线程1需要访问操作系统的文件中的图片1。其他多个(例如十几个)线程也需要访问图片1。线程1的优先级高于其他线程。锁对象1用于锁定访问该图片的i/o资源权限。即,锁对象1为一把i/o锁。

线程1中的代码块a用于请求竞争i/o资源。其他线程中的代码块b、c等用于请求竞争i/o资源。虽然线程1的优先级高于其他线程,但线程1中的代码块a与其他线程中的代码块b、c等处于竞争关系。

若其他线程中的代码块b、c等优先竞争到i/o资源,则虚拟机将i/o锁授权给其他线程的代码块持有,代码块a未获取到该i/o锁,线程1会被其他线程阻塞。即,出现线程1的优先级反转的情况。

开发人员可以通过标注信息对代码块a进行标注,以指示采用高优先级调度代码块a。这样,虚拟机在运行第一目标代码块时,根据标注信息配置的高优先级确定第一目标代码块的优先级高,优先将锁授权给代码块a持有。从而,代码块a可以优先执行,线程1也可以优先执行,从而可以避免出现线程1优先级反转的问题。

场景三:标注对象为锁对象中的notify函数,作用对象包括notify函数范围内的源代码,以及锁对象中与notify函数配合的wait函数范围内的源代码。这样,在异步等到场景中,被其他代码块等待的代码块可以优先、高效地执行,从而使得等待该代码块的其他代码块也可以尽快高效地执行。

例如,标注信息的标注对象为第一源代码块,第一源代码块为notify函数,第一源代码块为锁对象范围内的函数,锁对象还包括wait函数,标注信息的作用对象为notify函数范围内的源代码块和wait函数范围内的源代码块;第三目标代码块包括wait函数范围内的源代码块编译后生成的第四目标代码块,和notify函数范围内的源代码块编译后生成的第五目标代码块;虚拟机根据标注信息指示的调度方式,调度并运行第三目标代码块,包括:虚拟机根据标注信息指示的调度方式,调度并运行第四目标代码块;虚拟机根据标注信息指示的调度方式,调度并运行第五目标代码块。

示例性的,相机应用的一个任务包括线程1和线程2。线程1用于实现图片处理。线程1包括代码块a,代码块b和代码块c。线程2用于实现将图片备份到云端。线程2包括代码块d和代码块e。线程1的优先级高于线程2。代码块a和代码块d需要竞争同一资源,或者说代码块a和代码块d的执行存在冲突。

其中,代码块b和代码块c的执行需要依赖于代码块a。也就是说,代码块a先执行完之后,才能执行代码块b和代码块c。即,存在这样的关系:锁对象中,wait(代码块a),notify(代码块b,代码块c)。

若代码块d先于代码块a竞争到资源,则代码块a被阻塞。异步等待状态的代码块b和代码块c也被阻塞。线程1被线程2阻塞,出现优先级反转的情况。示例性的,参见图9中的(a),当手机检测到用户点击“图片处理”的控件后,用于实现图片处理的线程1,不能被手机上运行的虚拟机尽快执行,如图9中的(b)所示,图片处理的用户界面发生卡顿。

开发人员可以通过标注信息对notify函数进行标注,以指示采用高优先级调度notify函数中的代码块b和代码块c。编译器确定标注范围为锁对象中的notify函数和wait函数。虚拟机按照标注信息指示的优先级对notify函数和wait函数进行调度。又由于存在依赖关系,因而虚拟机优先对被依赖的wait函数限定的代码块a进行调度,而后对notify函数中的代码块b和代码块c进行调度。从而使得线程1优先线程2调度,避免出现优先级反转的问题。示例性的,参见图9中的(a),当手机检测到用户点击“图片处理”的控件后,用于实现图片处理的线程1能够根据标注信息指示的调度方式被尽快执行,参见图9中的(c),图片处理的用户界面较为流畅,可以给用户以图片快速被处理的较佳体验。

示例性的,该种场景下的伪代码可以如下:

其中,@task_proi(“priority=15,cpu=2,io=high”)表示标注信息。标注对象为锁对象mlock中的notify函数。作用对象为锁对象mlock中wait函数和notify函数范围内的代码。“///编译器自动插入调整优先级算法代码”,“sched_begin(priority,cpu,io)”以及“sched_end(priority,cpu,io)”不包含在编译前的代码中;且在编译后的伪代码中替换了编译前的标注信息。编译前的代码不包括。编译时,在mlock范围内的wait函数和notify函数代码之前,插入了配置标注信息指示的调度方式的代码块,即sched_begin(priority,cpu,io);在mlock范围内的wait函数和notify函数代码之后,插入了取消标注信息指示的调度方式的代码块,即sched_end(priority,cpu,io)。

场景四:标注对象为锁对象,作用对象为锁对象范围内的源代码块。

与其他代码块相比,锁对象通常关系到多个代码块的资源竞争,锁对象中的代码块是关键代码块。锁对象中的代码块高效执行,竞争资源的代码块才能及时获取到资源,从而尽快被执行。因而开发人员可以对锁对象进行标注,通过配置锁对象的优先级,cpu信息等使得锁对象被优先调度,且能够高效地完成调度。

示例性的,该种场景下的伪代码可以如下:

其中,@task_proi(“priority=15,cpu=2,io=high”)表示标注信息。标注对象为锁对象mlock。作用对象为mlock范围内的代码。“///编译器自动插入调整优先级算法代码”,“sched_begin(priority,cpu,io)”以及“sched_end(priority,cpu,io)”不包含在编译前的代码中;且在编译后的伪代码中替换了编译前的标注信息。编译时,在mlock范围内的代码之前,插入了配置标注信息指示的调度方式的代码块,即sched_begin(priority,cpu,io);在mlock范围内的代码之后,插入了取消标注信息指示的调度方式的代码块,即sched_end(priority,cpu,io)。

在一些情况下,若场景四中的锁对象包括wait函数和notify函数,则标注对象为锁对象,作用对象为整个锁对象中的代码块,包括该括wait函数和notify函数。示例性的,伪代码可以如下:

其中,@task_proi(“priority=15,cpu=2,io=high”)表示标注信息。标注对象为锁对象mlock。作用对象为mlock范围内的代码块,包括wait函数和notify函数。“///编译器自动插入调整优先级算法代码”,“sched_begin(priority,cpu,io)”以及“sched_end(priority,cpu,io)”不包含在编译前的代码中;且在编译后的伪代码中替换了编译前的标注信息。编译时,在mlock范围内的wait函数和notify函数代码之前,插入了配置标注信息指示的调度方式的代码块,即sched_begin(priority,cpu,io);在mlock范围内的wait函数和notify函数代码之后,插入了取消标注信息指示的调度方式的代码块,即sched_end(priority,cpu,io)。

本申请其他实施例还提供了一种基于api函数的调度方法。在该方法中,标注信息可以替换为api函数。参见图10,该方法可以包括:

1001、编译器获取待编译代码,待编译代码包括限定对象,位于限定对象之前的第一api函数,以及位于限定对象之后的第二api函数;限定对象为源代码块;第一api函数用于指示调度方式;调度方式包括代码块的调度优先级,代码块的调度策略,cpu信息,输入/输出i/o调度策略,或i/o调度优先级中的一项或多项。

开发人员可以在需要限定调度方式的源代码块之前,插入用于配置调度方式的第一api函数;并在需要限定调度方式的源代码块之后,插入用于取消调度方式的第二api函数。

编译器在检测到第一api函数后,若确定该第一api函数用于定义调度方式,则可以确定api函数的限定对象和api函数的作用对象(或称作用范围)。其中,api函数的限定对象可以为第一api函数和第二api函数之间的源代码块。

与上述标注信息的标注对象和作用对象类似,若第一api函数和第二api函数之间的代码块为对象object,则api函数的限定对象为该对象object,api函数的作用对象(或称作用范围)为该对象object的源代码。例如,第一api函数和第二api函数之间的代码块为锁对象,限定对象为该锁对象,作用对象为该锁对象范围内的源代码。若第一api函数和第二api函数之间的代码块为方法method,则限定对象为该方法method,作用对象为该方法的源代码。若第一api函数和第二api函数之间的代码块为对象或方法中的一行语句,则限定对象和作用对象均为该行语句的源代码。若第一api函数和第二api函数之间的代码块为{}限定的语句,则限定对象和作用对象均为该{}内包括的语句的源代码。若第一api函数和第二api函数之间的代码块为锁对象中的notify函数,则限定对象为该notify函数,作用对象包括该notify函数范围内的源代码,以及该锁对象中与notify函数配合的wait函数范围内的源代码。

1002、编译器对第一api函数进行编译,生成第一函数入口和第一目标代码块,第一函数入口用于调用第一目标代码块,第一代码块用于配置第一api函数指示的调度方式。

1003、编译器对作用对象进行编译,生成第三目标代码块。

1004、编译器对第二api函数进行编译,生成第二函数入口和第二目标代码块,第二目标代码块用于取消第一api函数指示的调度方式。

这样,编译器可以获得对api函数编译后生成的第一函数入口、第二函数入口、第一目标代码块和第二目标代码块,以及对源代码块编译后生成的第三目标代码块。

1005、虚拟机获取编译后生成的目标文件,目标文件包括第一目标代码块、第二目标代码块和第三目标代码块,以及位于第三目标代码块之前的第一函数入口,位于第三目标代码块之后的第二函数入口。

1006、虚拟机链接第一函数入口和第一目标代码块。

1007、虚拟机运行第一函数入口链接的第一目标代码块,以配置第一api函数指示的调度方式。

1008、虚拟机根据第一api函数指示的调度方式,调度并运行第三目标代码块。

1009、虚拟机链接第二函数入口和第二目标代码块。

1010、虚拟机运行第二函数入口链接的第二代码块,以取消第一api函数指示的调度方式。

通过上述步骤1005-1009,虚拟机可以实现根据第一api函数指示的调度方式,即根据开发人员通过第一api函数配置的调度方式,对作用对象编译后生成的第三目标代码块进行优先调度等控制。对于作用对象以外的其他代码块,则不采用第一api函数配置的调度方式进行优先调度等控制。

当作用对象为高优先级线程内部更细粒度的代码块(例如关键代码块)时,标注信息可以定义高优先级线程内部,更细粒度的代码块的优先级等调度方式。该代码块可以是抢占网络资源、i/o资源或其他资源的代码块。从而使得高优先级内部抢占网络资源、i/o资源或其他资源的代码块优先调度,进而使得高优先级线程可以优先调度,保证该线程的优先级,避免出现线程优先级反转的问题。

其中,第一api函数定义的调度方式可以包括代码块的调度优先级,代码块的调度策略,cpu信息,输入/输出i/o调度策略,或i/o调度优先级等中的一项或多项。这样,本申请实施例采用api函数,不仅可以设置线程或线程中代码块的调度优先级;还可以设置线程或线程中代码块的代码块的调度策略,cpu信息,i/o调度策略,或i/o调度优先级等,从而对多方面的处理性能进行控制,以便可以采用多种方式优先处理被标注的代码块,提高被标注的代码块的执行效率。因而,调度范围更广,调度方式更灵活、多样。而现有技术则无法对线程执行优先级以外的其他方面进行控制。

可以理解的是,为了实现上述功能,编译器和虚拟机包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请实施例可以根据上述方法示例对编译器和虚拟机进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块可以采用硬件的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

在采用对应各个功能划分各个功能模块的情况下,图11示出了上述实施例中涉及的编译器1100的一种可能的组成示意图,如图11所示,该编译器1100可以包括:获取单元1101和编译单元1102等。

其中,获取单元1101可以用于支持编译器1100执行上述步骤301,和/或用于本文所描述的技术的其他过程。

编译单元1102可以用于支持编译器1100执行上述步骤302,步骤303,步骤308,步骤309等,和/或用于本文所描述的技术的其他过程。

需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

本申请实施例提供的编译器,用于执行上述编译方法,因此可以达到与上述实现方法相同的效果。

在采用对应各个功能划分各个功能模块的情况下,图12示出了上述实施例中涉及的虚拟机1200的一种可能的组成示意图,如图12所示,该虚拟机1200可以包括:获取单元1201,运行单元1202,链接单元1203,以及生成单元1204等。

其中,获取单元1201可以用于支持虚拟机1200执行上述步骤304,和/或用于本文所描述的技术的其他过程。

运行单元1202可以用于支持虚拟机1200执行上述步骤305,步骤306,步骤307等,和/或用于本文所描述的技术的其他过程。

链接单元1203可以用于支持虚拟机1200执行上述步骤310,步骤311,步骤313,步骤315等,和/或用于本文所描述的技术的其他过程。

生成单元1204可以用于支持虚拟机1200执行上述步骤312,步骤314等,和/或用于本文所描述的技术的其他过程。

需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

本申请实施例提供的虚拟机,用于执行上述运行方法,因此可以达到与上述实现方法相同的效果。

本申请实施例提供一种电子设备,该电子设备上可以配置有编译器和/或虚拟机。该电子设备可以执行上述相关方法步骤实现上述调度方法。

在采用集成的单元的情况下,该电子设备可以包括处理模块和存储模块。其中,处理模块可以用于对电子设备的动作进行控制管理,例如,可以用于支持电子设备执行上述编译器的获取单元1101和编译单元1102执行的步骤。或者,可以用于支持电子设备执行上述虚拟机的获取单元1201、运行单元1202、链接单元1203和生成单元1204执行的步骤。存储模块可以用于存储代码。

其中,处理模块可以是处理器或控制器。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理(digitalsignalprocessing,dsp)和微处理器的组合等等。存储模块可以是存储器。该电子设备还可以具有通信模块,例如可以为射频电路、蓝牙芯片、wi-fi芯片等与其他设备交互的模块。

在一个实施例中,当处理模块为处理器,存储模块为存储器时,本申请实施例所涉及的编译器可以配置在具有图1所示结构的电子设备上。具体的,图1所示的内部存储器121可以存储有代码,当代码被处理器110执行时,使得编译器和虚拟机可以执行上述编译方法和运行方法。

本申请实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在编译器或虚拟机上运行时,使得编译器或虚拟机执行上述相关方法步骤实现上述调度方法。

本申请实施例还提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的调度方法。

另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的调度方法。

其中,本申请实施例提供的编译器、虚拟机、电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。

通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(readonlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1