CN114564254A - 模块初始化顺序生成方法、装置、设备及存储介质 - Google Patents

模块初始化顺序生成方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN114564254A
CN114564254A CN202210440826.4A CN202210440826A CN114564254A CN 114564254 A CN114564254 A CN 114564254A CN 202210440826 A CN202210440826 A CN 202210440826A CN 114564254 A CN114564254 A CN 114564254A
Authority
CN
China
Prior art keywords
module
initialization sequence
dependency relationship
registry
initialization
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
Application number
CN202210440826.4A
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.)
Guangzhou Shiju Network Technology Co Ltd
Original Assignee
Guangzhou Shiju Network Technology Co 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 Guangzhou Shiju Network Technology Co Ltd filed Critical Guangzhou Shiju Network Technology Co Ltd
Priority to CN202210440826.4A priority Critical patent/CN114564254A/zh
Publication of CN114564254A publication Critical patent/CN114564254A/zh
Pending 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44552Conflict resolution, i.e. enabling coexistence of conflicting executables

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

模块初始化顺序生成方法、装置、设备及存储介质
技术领域
本申请实施例涉及系统数据处理技术领域,尤其涉及一种模块初始化顺序生成方法、装置、设备及存储介质。
背景技术
在程序运行的过程中,对于出现在同一编译单元内的全局变量来说,它们初始化顺序与声明顺序是一致的,而对于出现在不同编译单元内的全局变量,并未明确其初始化顺序,而是由编译器自行定义,因此,不同编译单元间的全局变量的初始化顺序是不固定的,哪怕对同一个编译器,同一份代码来说,任意两次编译的结果都有可能不一样。
当单例模块(一个类只有一个实例,采用静态变量的方式实例化)采用全局变量,则在编译器中多个单例模块之间的初始化顺序不确定,当单例模块之间存在依赖关系,如单例模块I的实现需要在单例模块II被调用之后才能实现对应的功能,但由于多个单例模块之间的初始化顺序不确定,容易出现单例模块的初始化结果影响其他单例模块的情况,导致单例模块初始化错误,影响程序的运行。
发明内容
本申请实施例提供了一种模块初始化顺序生成方法、装置、设备及存储介质,解决了在程序启动时,模块间的乱序初始化导致程序异常错误的问题,能够提供合理的初始化顺序,使得在程序启动时能够按照预期的顺序合理地执行模块的初始化,达到解决模块间依赖启动冲突的效果。
第一方面,本申请实施例提供了一种模块初始化顺序生成方法,该方法包括:
获取编译器中对应于各模块的第一初始化顺序;
结合所述第一初始化顺序,建立注册表,所述注册表包括对应于各所述模块的模块信息和依赖关系信息;
根据所述依赖关系信息,查找无依赖关系的第一类模块,生成查找结果并更新所述注册表,直至不存在无依赖关系的所述第一类模块;
根据所述查找结果,确定对各所述模块的第二初始化顺序。
第二方面,本申请实施例还提供了一种模块初始化顺序生成装置,该装置包括:
第一顺序获取单元,配置为获取编译器中对应于各模块的第一初始化顺序;
管理单元,配置为结合所述第一初始化顺序,建立注册表,所述注册表包括对应于各所述模块的模块信息和依赖关系信息;
查找更新单元,配置为根据所述依赖关系信息,查找无依赖关系的第一类模块,生成查找结果并更新所述注册表,直至不存在无依赖关系的所述第一类模块;
第二顺序获取单元,配置为根据所述查找结果,确定对各所述模块的第二初始化顺序。
第三方面,本申请实施例还提供了一种模块初始化顺序生成设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当一个或多个所述程序被一个或多个所述处理器执行,使得一个或多个所述处理器实现本申请实施例所述的模块初始化顺序生成方法。
第四方面,本申请实施例还提供了一种存储计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本申请实施例所述的模块初始化顺序生成方法。
本申请实施例中,对于不能准确进行初始化的第一初始化顺序,建立注册表,从而根据注册表中各模块的依赖关系,查找第一类模块,且通过更新注册表的方式移除了注册表中与查找到的第一类模块相关的依赖关系,使得部分第二类模块变为第一类模块,通过不断地循环遍历以查找第一类模块,从而能够基于依赖关系确定第二初始化顺序,为程序的执行提供一个合理的初始化顺序来初始化各模块,避免出现程序因初始化错误而导致的运行错误的情况。
附图说明
图1为本申请实施例提供的一种模块初始化顺序生成方法的流程图;
图2为本申请实施例提供的模块初始化顺序生成方法的应用流程示意图;
图3为本申请实施例提供的另一种模块初始化顺序生成方法的应用流程示意图;
图4为本申请实施例提供的又一种模块初始化顺序生成方法的应用流程示意图;
图5为本申请实施例提供的一种模块初始化顺序生成装置的结构框图;
图6为本申请实施例提供的一种模块初始化顺序生成设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请实施例,而非对本申请实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请实施例相关的部分而非全部结构。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
在单例模块中,如该单例模块继承一个基类,且基类存在纯虚函数(继承类必须存在有该函数),在程序开始运行时需要调用所有单例模块的纯虚函数,模块A和模块B为单例模块,若模块A的纯虚函数功能实现必须依赖于模块B的纯虚函数被先调用,即模块A与模块B的依赖关系为模块A依赖于模块B,在编译过程中并不能有效解决上述问题。为此,本申请提出一种模块初始化顺序生成方法,能够在程序启动时,进行合理地执行各模块的初始化。
下面结合附图对本申请实施例作进一步阐述。
图1为本申请实施例提供的一种模块初始化顺序生成方法的流程图,可以应用于编译器上,以解决模块间因依赖关系而导致初始化顺序易出错的问题,该方法包括:
步骤S100、获取编译器对应于各模块的第一初始化顺序。
可以理解的是,对于某一程序来说,在编译器中存在一初始的顺序,即第一初始化顺序,第一初始化顺序是基于该程序中各实例的声明顺序确定的。示例性的,模块A、模块B、模块C和模块D均为单例模块,且各对应于一个实例,上述单例模块的第一初始化顺序为模块A->模块B->模块C->模块D,但其依赖关系可能存在模块A依赖于模块B,则按照该顺序进行编译,在程序的执行过程中会出错。
步骤S200、结合第一初始化顺序,建立注册表。
第一初始顺序中可以示出各模块的声明顺序,注册表是对应于各模块的模块信息和依赖关系信息,模块信息用于表示对应的模块,而依赖关系信息用于表示对应模块的依赖关系,因此,注册表可以依照第一初始化顺序中的声明顺序记录各模块的模块信息和依赖关系信息,示例性的,注册表中可以以数组的形式保存模块信息和依赖关系信息,如通过指向模块的模块指针表示对应的模块,以及通过指向所依赖模块的依赖指针表示依赖关系。可以理解的是,注册表还可以以索引的形式存储模块信息和依赖关系信息。应当想到的是,在程序启动的过程中,各模块均需要完成注册,即将模块自身和自身所依赖的模块的指针或索引注册到注册表中。
步骤S300、根据依赖关系信息,查找无依赖关系的第一类模块,生成查找结果并更新注册表,直至不存在无依赖关系的第一类模块。
可以理解的是,可以通过注册表中各模块的依赖关系信息,查找第一类模块,第一类模块是无依赖关系的模块,其在注册表中的依赖关系信息为空,如以数组形式保存依赖关系信息时,第一类模块的依赖指针指向空或者不存在,因此,可以通过如遍历的方式查找注册表中依赖指针为空或不存在的模块,当查找到第一类模块,生成查找结果,示例性的,可以生成一个数组A[n],n表示模块的数量,将本次查找到的模块,如模块A为无依赖关系的模块,则将模块A的模块指针放入数组的第一个数组元素A[0]中。而且对注册表进行更新,应当想到的是,每次更新注册表后,则会出现一个或多个无依赖关系的第一类模块,通过不断地查找第一类模块,并放入数组中,即每次的查找结果可以通过数组的方式记录。当不存在无依赖关系的第一类模块,则结束查找,应当想到的是,被查找到的模块已经被排除出下一次查找的范围;而且,数组A[n]中数组元素的次序可以用于确定第二初始化顺序中各模块的初始化顺序。
在一些实施例中,是在每一次查找到第一类模块后,对注册表更新,注册表的更新可以是将注册表依赖于第一类模块的依赖关系信息删除,可以理解的是,模块A为第一类模块,而模块B为第二类模块,第二类模块表示存在依赖关系的模块,模块B依赖于模块A,则在第一次查找后,查找到模块A,则删除注册表中对应于模块B的依赖关系信息,即模块B的依赖指针被删除,从而使得模块B由第二类模块转变为第一类模块,在下一次查找中,将模块B查找到,并记录查找结果,再一次更新注册表。需要说明的是,第一类模块和第二类模块并非为某一特定的模块,而是表示一类模块,如第一类模块表示为不存在依赖关系的模块,第二类模块表示为存在依赖关系的模块。
步骤S400、根据查找结果,确定对各模块的第二初始化顺序。
在结束查找后,可以根据查找结果,如根据记录有查找结果的数组,根据数组中记录的顺序确定对应于程序执行时各模块初始化的第二初始化顺序,示例性的,经过若干次查找后,其查找结果均记录在数组A[n]中,如A[0]中记录模块A的模块指针,A[1]中记录模块B的模块指针。
由上述方案可知,本申请实施例能够结合编译器中的第一初始化顺序,在程序启动时注册各模块,从而建立注册表,以记录各模块的模块信息和依赖关系信息,在不断地查找第一类模块以及更新注册表的过程中,确定基于依赖关系的第二初始化顺序,从而为处理器执行程序时提供合理有效的初始化顺序,有效地降低了模块间依赖启动冲突的出现,从而达到有序运行程序的预期效果。
图2为本申请实施例提供的模块初始化顺序生成方法的应用流程示意图,示例性地表示一种生成初始化顺序的过程,如图所示,模块A、模块B、模块C和模块D均为单例模块,且各对应于一个实例,其中,模块A依赖于模块B,模块B依赖于模块C和模块D,模块D依赖于模块C,模块C无依赖关系,即模块C为第一类模块,模块A、模块B和模块D为第二类模块,模块A、模块B、模块C和模块D均记载在注册表中,对应的,第一初始化顺序为模块B->模块C->模块A->模块D。
在第一次查找中,根据注册表查找到模块C为无依赖关系的第一类模块,则将模块C作为第一次查找的查找结果并进行记录,且还对注册表进行更新,更新后的注册表中,依赖于模块C的依赖关系被删除,如第二行所示,模块B依赖于模块C的依赖关系被删除,模块D依赖于模块C的依赖关系被删除,而模块D不存在依赖关系,即模块D成为第一类模块。
在第二次查找中,模块D被查找到,作为第二次查找的查找结果进行记录,还对注册表再进行更新,如第三行所示,模块B依赖于模块D的依赖关系被删除,模块B成为第一类模块。
在第三次查找中,模块B被查找到,作为第三次查找的查找结果进行记录,还对注册表再进行更新,如第四行所示,模块A依赖于模块B的依赖关系被删除,模块A成为第一类模块。
在第四次查找中,模块A被查找到,作为第四次查找的查找结果进行记录。结合上述的查找结果,可以确定新的初始化顺序,即第二初始化顺序,第二初始化顺序为模块C->模块D->模块B->模块A。
因此,本申请实施例实现了对原始的第一初始化顺序进行重新排序,能够缓解模块间因依赖关系而产生的冲突,得到有效的、合理的第二初始化顺序进行初始化,从而使程序能够顺利地初始化各模块。
在一些实施例中,当存在多个不同的第二类模块依赖于同一第一类模块的情况下,即所述的多个不同的第二类模块在某次注册表更新后,即对应的多个第二类模块转变成为第一类模块,则此类模块在第二初始化顺序中的次序可以根据声明顺序确定,第一初始化顺序是根据模块的声明顺序确定,则可以根据第一初始化顺序中示出的声明顺序确定此类模块在第二初始化顺序中的次序。
下面结合图3进一步阐述。图3为本申请实施例提供的另一种模块初始化顺序生成方法的应用流程示意图,示例性地表示一种生成初始化顺序的过程,如图所示,模块A、模块B、模块C和模块D均为单例模块,且各对应于一个实例,其中,模块A依赖于模块B,模块B依赖于模块C,模块D依赖于模块C,模块C无依赖关系,即模块C为第一类模块,模块B、模块C和模块D为第二类模块,模块B和模块D依赖于同一第一类模块,模块A、模块B、模块C和模块D均记载在注册表中,对应的,第一初始化顺序为模块B->模块C->模块A->模块D。
在首次查找中,根据注册表查找到模块C为无依赖关系的第一类模块,则将模块C作为第一次查找的查找结果并进行记录,且还对注册表进行更新,更新后的注册表中,依赖于模块C的依赖关系被删除,如第二行所示,模块B依赖于模块C的依赖关系被删除,模块D依赖于模块C的依赖关系被删除,而模块B和模块D均不存在依赖关系,即模块B和模块D均成为第一类模块。
在再次查找中,模块B先被查找到,而模块D在后被查找到,作为第二次查找的查找结果进行记录,值得注意的是,模块B和模块D是根据模块所对应的实例在编译器中的声明顺序,确定其在第二初始化顺序中的次序。由于第一初始化顺序是基于各实例的声明顺序确定的,因此,模块B的声明顺序在模块D之前,进而在查找结果中,模块B和模块D被查找到,且在第二初始化顺序中,模块B在模块D之前。示例性的,使用数组A[n]记录第二初始化顺序,使用模块指针的表示模块,则在数组元素A[0]中记录模块C的模块指针,在数组元素A[1]中记录模块B的模块指针,在数组元素A[2]中记录模块D的模块指针。
在对注册表再次更新时,同时删除剩余的模块中对模块B和模块D的依赖关系,如图所示,仅剩的模块A依赖于模块B,在注册表更新后,模块A成为第一类模块,在下一次查找中,模块A被查找到,并作为查找结果进行记录。结合上述的查找结果,可以确定新的初始化顺序,即第二初始化顺序,第二初始化顺序为模块C->模块B->模块D->模块A。
因此,对于存在多个第二类模块依赖于同一第一类模块的情况,在处理器执行程序时能够基于依赖关系,且结合声明顺序来对各模块进行合理的调序,即能够根据生成的有效的、合理的第二初始化顺序,缓解模块间的依赖启动冲突。
在一些实施例中,当存在多个第二类模块依赖于同一个第一类模块的情况时,在某次注册表更新后,会出现多个第一类模块,则在后一次的查找中,查找次数是根据第一类模块的数量确定的。
示例性的,存在两个第二类模块依赖于同一个第一类模块,如模块B和模块D均为第二类模块,模块C为第一类模块,模块B和模块D均依赖于模块C,在注册表更新后,模块B和模块D依赖于模块C的依赖关系被删除,则模块B和模块D成为第一类模块,在完成查找后,则查找次数加2。
在一些实施例中,对于存在循环依赖关系的模块,可以在建立注册表后,对注册表进行循环依赖查找,确定是否存在循环依赖关系,若存在循环依赖关系,则报错并标记出存在循环依赖关系的第二类模块。
图4为本申请实施例提供的又一种模块初始化顺序生成方法的应用流程示意图,示例性地表示一种生成初始化顺序的过程,如图所示,模块A、模块B、模块C和模块D均为单例模块,且各对应于一个实例,其中,模块A依赖于模块B,模块B依赖于模块A和模块C,模块D依赖于模块C,模块C无依赖关系,即为第一类模块,模块B、模块C和模块D为第二类模块,模块A、模块B、模块C和模块D均记载在注册表中,对应的,第一初始化顺序为模块B->模块C->模块A->模块D。
在第一次查找中,根据注册表查找到模块C为无依赖关系的第一类模块,则将模块C作为第一次查找的查找结果并进行记录,且还对注册表进行更新,更新后的注册表中,依赖于模块C的依赖关系被删除,如第二行所示,模块D依赖于模块C的依赖关系被删除,模块B依赖于模块C的依赖关系被删除,因此,模块D不存在依赖关系,即模块D成为第一类模块,在第二次查找中,模块D被查找到,作为第二次查找的查找结果进行记录,还对注册表再进行更新,由于模块D不存在依赖关系,且不存在依赖于模块D,注册表更新后,如第三行所示,模块B依赖于模块A,而模块A依赖于模块B,即模块A和模块B为相互依赖的模块,存在循环依赖关系,因此,模块A和模块B均为第二类模块,即在剩余的模块中,不存在第一类模块,而导致查找结束。
根据查找结果可知,查找次数为2,但注册表中存在有4个模块,在查找结束后,查找次数小于模块数量,进行报错还停止运行,如通过处理器发送错误指令,以通知程序设计者程序出错,同时停止程序的继续运行。此外,对于存在循环关系的模块A和模块B,还可以在所发送的错误指令中,指出模块A和模块B之间存在循环依赖关系,以实现对模块A和模块B的标记,在程序设计者接收到通知后,可以获取程序中依赖关系的错误以及错误的模块,便于调整和修改。
图5为本申请实施例提供的一种模块初始化顺序生成装置的结构框图,该装置用于执行上述实施例提供的模块初始化顺序生成方法,具备执行方法相应的功能模块和有益效果,如图5所示,该装置具体包括:第一顺序获取单元101、管理单元102、查找更新单元103和第二顺序获取单元104。
其中,第一顺序获取单元101,配置为获取编译器中对应于各模块的第一初始化顺序。
管理单元102,配置为结合所述第一初始化顺序,建立注册表,所述注册表包括对应于各所述模块的模块信息和依赖关系信息。
查找更新单元103,配置为根据所述依赖关系信息,查找无依赖关系的第一类模块,生成查找结果并更新所述注册表,直至不存在无依赖关系的所述第一类模块。
第二顺序获取单元104,配置为根据所述查找结果,确定对各所述模块的第二初始化顺序。
由上述方案可知,本申请实施例通过第一顺序获取单元获取第一初始化顺序,管理单元结合获取的第一初始化顺序建立注册表,第一初始化顺序是依照声明顺序确定的,注册表可以按照第一初始化顺序记录各模块的模块信息和依赖关系信息,在通过查找更新单元不断地查找第一类模块,生成查找结果,还对注册表进行更新,第二顺序获取单元可以根据查找结果确定第二初始化顺序,程序依照第二初始化顺序进行编译,能够有效地解决模块间依赖启动冲突的问题,达到有序运行程序的预期效果。
在一些实施例中,管理单元102配置为每次查找到所述第一类模块后,移除所述注册表中对应第二类模块依赖于所述第一类模块的依赖关系信息,以更新所述注册表;其中,所述第二类模块为存在依赖关系的模块。
在一些实施例中,第二顺序获取单元104配置为在存在多个不同的所述第二类模块依赖于同一所述第一类模块的情况下,根据所述第一初始化顺序中的声明顺序,确定多个不同的所述第二类模块在所述第二初始化顺序中的次序。
在一些实施例中,查找更新单元103配置为根据所述查找结果确定查找次数;当所述模块中无所述第一类模块,且所述查找次数小于模块数量,则报错并结束运行。
在一些实施例中,管理单元102配置为对所述注册表进行循环依赖查找,确定是否存在循环依赖关系;若存在所述循环依赖关系,则报错并标记出存在循环依赖关系的所述第二类模块。
在一些实施例中,管理单元102配置为所述注册表以指针或索引的形式存储所述模块信息和所述依赖关系信息。
在一些实施例中,查找更新单元103配置为所述查找结果以数组形式存储对应于各模块的所述模块信息;第二顺序获取单元104配置为所述第二初始化顺序根据所述数组的次序确定对各模块的初始化顺序。
图6为本申请实施例提供的一种模块初始化顺序生成设备的结构示意图,如图6所示该设备包括处理器201、存储器202、输入装置203和输出装置204;设备中处理器201的数量可以是一个或多个,图6中以一个处理器201为例;设备中的处理器201、存储器202、输入装置203和输出装置204可以通过总线或其他方式连接,图6中以通过总线连接为例。存储器202作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请实施例中的模块初始化顺序生成方法对应的程序指令/模块。处理器201通过运行存储在存储器202中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的模块初始化顺序生成方法。输入装置203可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置204用于输出编译器可编译的初始化顺序。
本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种上述实施例所述的模块初始化顺序生成方法,具体包括:
获取编译器中对应于各模块的第一初始化顺序;
结合所述第一初始化顺序,建立注册表,所述注册表包括对应于各所述模块的模块信息和依赖关系信息;
根据所述依赖关系信息,查找无依赖关系的第一类模块,生成查找结果并更新所述注册表,直至不存在无依赖关系的所述第一类模块;
根据所述查找结果,确定对各所述模块的第二初始化顺序。
存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
注意,上述仅为本申请的较佳实施例及所运用技术原理。本领域技术人员会理解,本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由所附的权利要求范围决定。

Claims (10)

1.一种模块初始化顺序生成方法,其特征在于,包括:
获取编译器中对应于各模块的第一初始化顺序;
结合所述第一初始化顺序,建立注册表,所述注册表包括对应于各所述模块的模块信息和依赖关系信息;
根据所述依赖关系信息,查找无依赖关系的第一类模块,生成查找结果并更新所述注册表,直至不存在无依赖关系的所述第一类模块;
根据所述查找结果,确定对各所述模块的第二初始化顺序。
2.根据权利要求1所述的模块初始化顺序生成方法,其特征在于,包括:
每次查找到所述第一类模块后,移除所述注册表中对应第二类模块依赖于所述第一类模块的依赖关系信息,以更新所述注册表;
其中,所述第二类模块为存在依赖关系的模块。
3.根据权利要求2所述的模块初始化顺序生成方法,其特征在于,还包括:
在存在多个不同的所述第二类模块依赖于同一所述第一类模块的情况下,根据所述第一初始化顺序中的声明顺序,确定多个不同的所述第二类模块在所述第二初始化顺序中的次序。
4.根据权利要求1所述的模块初始化顺序生成方法,其特征在于,在所述根据所述查找结果,确定对各所述模块的第二初始化顺序之前,还包括:
根据所述查找结果确定查找次数;
当所述模块中无所述第一类模块,且所述查找次数小于模块数量,则报错并结束运行。
5.根据权利要求2所述的模块初始化顺序生成方法,其特征在于,在所述建立注册表之后,还包括:
对所述注册表进行循环依赖查找,确定是否存在循环依赖关系;
若存在所述循环依赖关系,则报错并标记出存在循环依赖关系的所述第二类模块。
6.根据权利要求1所述的模块初始化顺序生成方法,其特征在于,所述注册表以指针或索引的形式存储所述模块信息和所述依赖关系信息。
7.根据权利要求1-6任一项所述的模块初始化顺序生成方法,其特征在于,所述查找结果以数组形式存储对应于各模块的所述模块信息,所述第二初始化顺序根据所述数组的次序确定对各模块的初始化顺序。
8.模块初始化顺序生成装置,其特征在于,包括:
第一顺序获取单元,配置为获取编译器中对应于各模块的第一初始化顺序;
管理单元,配置为结合所述第一初始化顺序,建立注册表,所述注册表包括对应于各所述模块的模块信息和依赖关系信息;
查找更新单元,配置为根据所述依赖关系信息,查找无依赖关系的第一类模块,生成查找结果并更新所述注册表,直至不存在无依赖关系的所述第一类模块;
第二顺序获取单元,配置为根据所述查找结果,确定对各所述模块的第二初始化顺序。
9.一种模块初始化顺序生成设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当一个或多个所述程序被一个或多个所述处理器执行,使得一个或多个所述处理器实现如权利要求1-7中任一项所述的模块初始化顺序生成方法。
10.一种存储计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时用于执行如权利要求1-7中任一项所述的模块初始化顺序生成方法。
CN202210440826.4A 2022-04-26 2022-04-26 模块初始化顺序生成方法、装置、设备及存储介质 Pending CN114564254A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210440826.4A CN114564254A (zh) 2022-04-26 2022-04-26 模块初始化顺序生成方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210440826.4A CN114564254A (zh) 2022-04-26 2022-04-26 模块初始化顺序生成方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN114564254A true CN114564254A (zh) 2022-05-31

Family

ID=81721332

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210440826.4A Pending CN114564254A (zh) 2022-04-26 2022-04-26 模块初始化顺序生成方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN114564254A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050278688A1 (en) * 2004-06-14 2005-12-15 Buskens Richard W Software component initialization in an ordered sequence
CN102486732A (zh) * 2010-12-02 2012-06-06 上海可鲁系统软件有限公司 一种分布式平台及平台中功能模块启动优先级控制方法
CN111209052A (zh) * 2018-11-20 2020-05-29 北京京东尚科信息技术有限公司 一种应用启动的方法及系统
CN112783568A (zh) * 2021-01-12 2021-05-11 网易(杭州)网络有限公司 应用程序的初始化方法、装置、设备和存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050278688A1 (en) * 2004-06-14 2005-12-15 Buskens Richard W Software component initialization in an ordered sequence
CN102486732A (zh) * 2010-12-02 2012-06-06 上海可鲁系统软件有限公司 一种分布式平台及平台中功能模块启动优先级控制方法
CN111209052A (zh) * 2018-11-20 2020-05-29 北京京东尚科信息技术有限公司 一种应用启动的方法及系统
CN112783568A (zh) * 2021-01-12 2021-05-11 网易(杭州)网络有限公司 应用程序的初始化方法、装置、设备和存储介质

Similar Documents

Publication Publication Date Title
US6681242B1 (en) Method and apparatus for detecting dependency cycles between resources in a computer system
RU2517238C2 (ru) Выполнение параллельного повторного хэширования хеш-таблицы для многопоточных приложений
US8972967B2 (en) Application packages using block maps
Ji et al. ispan: Parallel identification of strongly connected components with spanning trees
Feldman et al. A wait-free multi-word compare-and-swap operation
KR20000068342A (ko) 링크-리스트 데이터 구조를 관리하기 위한 방법 및 장치
JP7212793B2 (ja) 関数ジャンプを実現するための方法、装置及びコンピュータ記憶媒体
EP2344974A2 (en) USING TRANSIENT PCRs TO REALISE TRUST IN APPLICATION SPACE OF A SECURE PROCESSING SYSTEM
US10289395B2 (en) Performing a compiler optimization pass as a transaction
KR19990064026A (ko) 컴퓨터 시스템 또는 그 프로그램이 중지될 필요가 없는 객체 지향형 메쏘드 유지 보수 메카니즘
CN112214221B (zh) 一种用于Linux系统构建的方法与设备
US20110087926A1 (en) Heap assertions
CN114090013A (zh) 确定可执行代码文件的变更集的方法及装置
CN111767056A (zh) 一种源码编译方法、可执行文件运行方法及终端设备
CN112000367B (zh) 一种二进制库文件版本兼容性识别方法和装置
US20060130034A1 (en) Apparatus, system, and method for providing access to a set of resources available directly to a particular class loader
CN105447040B (zh) 二进制文件管理、更新方法、装置以及系统
CN114564254A (zh) 模块初始化顺序生成方法、装置、设备及存储介质
CN115827028A (zh) 系统的升级方法、装置、存储介质以及电子设备
CN110955415A (zh) 一种投影多平台服务适配的方法
CN111143006B (zh) 命令帮助信息的获取方法及装置
TWI467491B (zh) 用於使用協調物件之修正式電腦結構之方法、系統與電腦程式產品
CN113867903A (zh) 一种区块链中智能合约的并行冲突域确定方法及装置
US10552185B2 (en) Lightweight and precise value profiling
CN107015909B (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20220531