软件模块的更新方法和装置的制造方法
【技术领域】
[0001]本发明涉及信息技术领域,尤其涉及一种软件模块的更新方法和装置。
【背景技术】
[0002]软件设计会将功能模块化,不同功能分别由不同模块实现,使得模块之间减少耦合,减少出错的几率。软件运行时,由宿主进程将软件模块加载到内存,对软件模块的功能进行调用。软件模块更新是重新加载新版本的软件模块,替换旧版本的软件模块。
[0003]软件模块的热更新是指不需要重启宿主进程,完成软件模块的更新。
[0004]现有技术中,宿主进程中可以存在多个线程同时访问加载的软件模块,为了保证安全卸载,在软件模块更新时,需要重启宿主进程,重新加载新版本的软件模块。由于需要重启宿主进程,也就不能实现软件模块的热更新。
【发明内容】
[0005]本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
[0006]为此,本发明的一个目的在于提出一种软件模块的更新方法,该方法可以实现软件模块的热更新。
[0007]本发明的另一个目的在于提出一种软件模块的更新装置。
[0008]为达到上述目的,本发明第一方面实施例提出的软件模块的更新方法,包括:对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求;由单一的线程依次从所述序列化后的请求队列中读取访问请求;当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。
[0009]可选的,所述已加载的软件模块是从宿主进程之外的预设位置加载的。
[0010]可选的,所述对已加载的软件模块的多个访问请求进行序列化处理,包括:将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。
[0011 ] 可选的,还包括:接收所述宿主进程内的第一线程发送的更新请求,所述第一线程发送的更新请求是所述第一线程接收到所述宿主进程之外的升级模块发送的更新请求后发送的,所述升级模块发送的更新请求是所述升级模块对所述软件模块进行更新并保存到所述预设位置后发送的。
[0012]可选的,所述访问请求还包括所述宿主进程内的第二线程对所述软件模块的访问请求,所述单一的线程是第三线程,所述第一线程,所述第二线程和所述第三线程互不相同。
[0013]本发明第一方面实施例提出的软件模块的更新方法,通过对软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,并由单一的线程依次从序列化后的请求队列中读取访问请求,可以保证在卸载软件模块时不存在其他线程访问该软件模块,由于不会存在多个线程同时访问加载的软件模块,可以在不重启宿主进程的情况下完成软件模块的更新,从而实现软件模块的热更新。
[0014]为达到上述目的,本发明第二方面实施例提出的软件模块的更新装置,包括:管理模块,用于对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求;读取模块,用于由单一的线程依次从所述序列化后的请求队列中读取访问请求;处理模块,用于当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。
[0015]可选的,还包括:加载模块,用于从宿主进程之外的预设位置加载所述软件模块。
[0016]可选的,所述管理模块具体用于:将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。
[0017]可选的,还包括:接收模块,用于接收所述宿主进程内的第一线程发送的更新请求,所述第一线程发送的更新请求是所述第一线程接收到所述宿主进程之外的升级模块发送的更新请求后发送的,所述升级模块发送的更新请求是所述升级模块对所述软件模块进行更新并保存到所述预设位置后发送的。
[0018]可选的,所述访问请求还包括所述宿主进程内的第二线程对所述软件模块的访问请求,所述单一的线程是第三线程,所述第一线程,所述第二线程和所述第三线程互不相同。
[0019]本发明第二方面实施例提出的软件模块的更新装置,通过对软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,并由单一的线程依次从序列化后的请求队列中读取访问请求,可以保证在卸载软件模块时不存在其他线程访问该软件模块,由于不会存在多个线程同时访问加载的软件模块,可以在不重启宿主进程的情况下完成软件模块的更新,从而实现软件模块的热更新。
[0020]为达到上述目的,本发明第三方面实施例提出的客户端设备,包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为客户端设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行:对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求;由单一的线程依次从所述序列化后的请求队列中读取访问请求;当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。
[0021]可选的,所述已加载的软件模块是从宿主进程之外的预设位置加载的。
[0022]可选的,所述对已加载的软件模块的多个访问请求进行序列化处理,包括:将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。
[0023]可选的,还包括:接收所述宿主进程内的第一线程发送的更新请求,所述第一线程发送的更新请求是所述第一线程接收到所述宿主进程之外的升级模块发送的更新请求后发送的,所述升级模块发送的更新请求是所述升级模块对所述软件模块进行更新并保存到所述预设位置后发送的。
[0024]可选的,所述访问请求还包括所述宿主进程内的第二线程对所述软件模块的访问请求,所述单一的线程是第三线程,所述第一线程,所述第二线程和所述第三线程互不相同。
[0025]本发明第三方面实施例提出的客户端设备,通过对软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,并由单一的线程依次从序列化后的请求队列中读取访问请求,可以保证在卸载软件模块时不存在其他线程访问该软件模块,由于不会存在多个线程同时访问加载的软件模块,可以在不重启宿主进程的情况下完成软件模块的更新,从而实现软件模块的热更新。
[0026]本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
【附图说明】
[0027]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0028]图1是本发明一实施例提出的软件模块的更新方法的流程示意图;
[0029]图2是相关技术中软件模块的更新方法示意图;
[0030]图3是本发明实施例中软件模块的更新方法示意图;
[0031]图4是本发明另一实施例提出的软件模块的更新装置的结构示意图;
[0032]图5是本发明另一实施例提出的软件模块的更新装置的结构示意图。
【具体实施方式】
[0033]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
[0034]图1是本发明一实施例提出的软件模块的更新方法的流程示意图,该方法包括:
[0035]S11:对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求。
[0036]可选的,所述已加载的软件模块是从宿主进程之外的预设位置加载的。
[0037]一般软件设计都会将功能模块化,不同功能分别由不同软件模块实现。
[0038]在软件运行时,宿主进程可以将软件模块加载到内存中,以调用软件模块实现相应功能。其中,宿主进程也可以称为主进程,加载的软件模块可以具体是指不同版本的模
块文件。
[0039]软件模块可以进行更新。
[0040]初始时,宿主进程可以从宿主进程之外的预设位置加载初始的软件模块。
[0041]相关技术中,参见图2,软件模块的更新流程可以包括:
[0042]S21:宿主进程(HostProcess)加载软件模块(Target, dll),其中,初始加载的软件模块可以是旧版本的软件模块。
[0043]其中,宿主进程加载到内存中的软件模块可以用模块映像(Target Image)表示。
[0044]S22:宿主进程中的多个线程可以同时访问加载的软件模块。
[0045]例如,参见图2,宿主进程中包含线程_l(thread_l)和线程_2 (thread_2),这两个线程可以同时访问加载到内存的软件模块(Target Image)。
[0046]S23:当需要升级软件模块时,升级模块(Update Module)将软件模块由旧版本更新到新版本。
[0047]S24:升级模块向宿主进程发送通知消息,通知宿主进程重新加载更新后的软件模块。
[0048]当宿主进程接收到升级模块的通知消息后,宿主进程弹出弹窗,提示用户重启宿主进程以更新软件模块。
[0049]由上述方案可知,相关技术中,宿主进程加载软件模块后,宿主进程中的多个线程会同时访问该软件模块,也就是使得软件模块是多线程访问。在多线程访问时,如果需要更新该软件模块就会出现不能保证当前没有线程访问该软件模块,为了保证安全避免崩溃,需要重启宿主进程加载更新后的软件模块,也就不能对该软件模块进行热更新。
[0050]热更新是指不重启宿主进程,即可以直接加载升级后的软件模块。
[0051]而本实施例中,为了实现软件模块的热更新,可以将对软件模块的访问请求进行统一管理,使得访问所述软件模块的线程是单一的。
[0052]在统一管理时采用序列化的方式。
[0053]可选的,所述对已加载的软件模块的多个访问请求进行序列化处理,包括:
[0054]将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。
[0055]例如,多个访问请求包括:第一访问请求,第二访问请求和第三访问请求,则在序列化时,可以将第一访问请求,第二访问请求和第三访问请求按顺序(如访问请求产生的时间顺序)依次放入缓存中,使得这些访问请求是一一按序排列的,从而得到序列化后的访问请求队列。
[0056]S12:由单一的线程依次从所述序列化后的请求队列中读取访问请求。
[0057]具体的,参见图3,本实施例中可以在宿主进程中设置热更新模块管理器(HotModuleMgr),热更新模块管理器对访问请求进行统一管理。
[0058]其中,在统一管理时,可以将对所述软件模块的访问请求进行序列化并缓存,并由单一的线程执行所述访问请求。
[0059]例如,参见图3,宿主进程中不同线程的访问请求可以分别用线程_l(thread_l),线程_2 (thread_2)和线程_3 (thread_3)表示,热更新模块管理器可以对thread_l,thread_2和thread_3进行序列化并缓存,并由单一的线程thread_dedicated依次执行各个访问请求。S13:当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。
[0060]其中,当需要更新时,宿主进程会接收到更新请求,由于更新请求也是一种对软件模块的访问请求,因此热更新模块将该更新请求缓存到序列化队列中,当热更新模块执行到该更新请求后,可以由单一线程执行该更新请求,在执行该更新请求时,卸载更新前的软件模块,并重新加载更新后的软件模块。由于访问软件模块的线程是单一的,因此在卸载软件模块时可以保证没有其他线程访问该软件模块,保证卸载安全,从而实现软件模块的热更新。[0061 ] 本实施例通过对软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,并由单一的线程依次从序列化后的请求队列中读取访问请求,可以保证在卸载软件模块时不存在其他线程访问该软件模块,由于不会存在多个线程同时访问加载的软件模块,可以在不重启宿主进程的情况下完成软件模块的更新,从而实现软件模块的热更新。
[0062]图3是本发明另一实施例提出的软件模块的更新方法的流程示意图,本实施例可以在宿主进程中设置热更新模块管理器,本实施例包括:
[0063]S31:宿主进程加载更新前的软件模块。
[0064]例如,在宿主进程中设置热更新模块管理器(HotModuleMgr),由热更新模块管理器加载(load)软件模块(Target, dll),软件模块被加载到内存后可以称为模块映像(Target Image)。
[0065]S32:热更新模块管理器将宿主进程中不同线程的访问请求序列化并缓存。
[0066]例如,参见图3,宿主进程中可以包括线程_1 (thread_l),线程_2 (thread_2)和线程_3(访1^&(1_3),这两个线程要获取(access)加载的软件模块的功能,则热更新模块管理器可以对thread_l和thread_2进行序列化并缓存。
[0067]S33:由单一线程依次执行各个访问请求。
[0068]例如,热更新模块管理器采用单一线程thread_dedicated访问(access)加载的软件模块。
[0069]S34:在需要升级时,升级模块对软件模块进行升级处理。
[0070]例如,升级模块(Update Module)用新版本的模块文件替换旧版本的模块文件,实现模块升级(update)。
[0071]S35:升级模块通知宿主进程更新软件模块。
[0072]例如,升级模块向宿主进程发送通知消息,通知升级软件模块(notify update) ο
[0073]S36:宿主进程内预设的一个线程向热更新模块管理器发送更新请求。
[0074]其中,获取加载的软件模块的功能的请求对应的线程可以称为第一线程,热更新模块管理器的访问加载的软件模块的线程可以称为第二线程,发送更新请求的线程可以称为第三线程。
[0075]例如,参见图3,第一线程包括线程1_和线程_2,热更新管理模块访问加载的软件模块的单一线程(threacLdedicated)是第二线程,第三线程是宿主进程内与第一线程和第二线程不同的线程,例如线程_3(thread_3),由第三线程发送更新请求,以通知热更新模块管理器更新加载的模块(notify target update)。
[0076]另外,由于热更新模块管理器对访问请求进行序列化,因此,线程_3发送的更新请求也被热更新模块管理器进行排序。
[0077]热更新模块管理器可以对访问请求序列化后,可以得到排序后的队列。
[0078]S37:热更新模块管理器依次执行队列中的访问请求,当执行到更新请求时,升级加载的软件模块。
[0079]例如,队列中依次包括线程_1的获取请求,线程_2的获取请求以及线程_3的更新请求,则执行到更新请求后,热更新模块管理器可以重新加载(reload)软件模块,实现软件模块更新。
[0080]本实施例中,由于仅有thread_dedicated单一线程访问加载的软件模块,因此其在卸载模块时可确保没有其他线程访问该软件模块,实现软件模块的热更新。
[0081]本实施例通过对软件模块的访问进行统一管理使得访问软件模块的线程是单一的,可以保证在卸载软件模块时不存在其他线程访问该软件模块,从而实现软件模块的热更新。本实施例通过热更新,使得更新的模块可以立即生效,使新功能的部署方便快捷,尤其针对某些缺陷的修复更新,不必等到进程重启,使得补救措施可以立即得到应用,最大程度保证了用户的利益和安全。
[0082]图4是本发明另一实施例提出的软件模块的更新装置的结构示意图,该装置40包括管理模块41、读取模块42以及处理模块43。
[0083]管理模块41,用于对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求;
[0084]参见图5,另一实施例中,该装置40还包括:
[0085]加载模块44,用于从宿主进程之外的预设位置加载所述软件模块。<
br>[0086]一般软件设计都会将功能模块化,不同功能分别由不同软件模块实现。
[0087]在软件运行时,宿主进程可以将软件模块加载到内存中,以调用软件模块实现相应功能。其中,宿主进程也可以称为主进程,加载的软件模块可以具体是指不同版本的模块文件。
[0088]软件模块可以进行更新。
[0089]初始时,宿主进程可以从宿主进程之外的预设位置加载初始的软件模块。
[0090]可选的,所述管理模块41具体用于:
[0091]将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。
[0092]例如,多个访问请求包括:第一访问请求,第二访问请求和第三访问请求,则在序列化时,可以将第一访问请求,第二访问请求和第三访问请求按顺序(如访问请求产生的时间顺序)依次放入缓存中,使得这些访问请求是一一按序排列的,从而得到序列化后的访问请求队列。
[0093]读取模块42,用于由单一的线程依次从所述序列化后的请求队列中读取访问请求;
[0094]具体的,参见图3,本实施例中可以在宿主进程中设置热更新模块管理器(HotModuleMgr),热更新模块管理器对访问请求进行统一管理。
[0095]其中,在统一管理时,可以将对所述软件模块的访问请求进行序列化并缓存,并由单一的线程执行所述访问请求。
[0096]例如,参见图3,宿主进程中不同线程的访问请求可以分别用线程_l(thread_l),线程_2 (thread_2)和线程_3 (thread_3)表示,热更新模块管理器可以对thread_l,thread_2和thread_3进行序列化并缓存,并由单一的线程thread_dedicated依次执行各个访问请求。
[0097]处理模块43,用于当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。
[0098]其中,当需要更新时,宿主进程会接收到更新请求,由于更新请求也是一种对软件模块的访问请求,因此热更新模块将该更新请求缓存到序列化队列中,当热更新模块执行到该更新请求后,可以由单一线程执行该更新请求,在执行该更新请求时,卸载更新前的软件模块,并重新加载更新后的软件模块。由于访问软件模块的线程是单一的,因此在卸载软件模块时可以保证没有其他线程访问该软件模块,保证卸载安全,从而实现软件模块的热更新。
[0099]另一实施例中,参见图5,该装置40还包括:
[0100]接收模块45,用于接收所述宿主进程内的第一线程发送的更新请求,所述第一线程发送的更新请求是所述第一线程接收到所述宿主进程之外的升级模块发送的更新请求后发送的,所述升级模块发送的更新请求是所述升级模块对所述软件模块进行更新并保存到所述预设位置后发送的。
[0101 ] 可选的,所述访问请求还包括所述宿主进程内的第二线程对所述软件模块的访问请求,所述单一的线程是第三线程,所述第一线程,所述第二线程和所述第三线程互不相同。
[0102]本实施例通过对软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,并由单一的线程依次从序列化后的请求队列中读取访问请求,可以保证在卸载软件模块时不存在其他线程访问该软件模块,由于不会存在多个线程同时访问加载的软件模块,可以在不重启宿主进程的情况下完成软件模块的更新,从而实现软件模块的热更新。
[0103]本发明实施例还提供了一种客户端设备,该客户端设备包括壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为客户端设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行:
[0104]S11’:对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求。
[0105]可选的,所述已加载的软件模块是从宿主进程之外的预设位置加载的。
[0106]一般软件设计都会将功能模块化,不同功能分别由不同软件模块实现。
[0107]在软件运行时,宿主进程可以将软件模块加载到内存中,以调用软件模块实现相应功能。其中,宿主进程也可以称为主进程,加载的软件模块可以具体是指不同版本的模块文件。
[0108]软件模块可以进行更新。
[0109]初始时,宿主进程可以从宿主进程之外的预设位置加载初始的软件模块。
[0110]本实施例中,为了实现软件模块的热更新,可以将对软件模块的访问请求进行统一管理,使得访问所述软件模块的线程是单一的。
[0111]在统一管理时采用序列化的方式。
[0112]可选的,所述对已加载的软件模块的多个访问请求进行序列化处理,包括:
[0113]将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。
[0114]例如,多个访问请求包括:第一访问请求,第二访问请求和第三访问请求,则在序列化时,可以将第一访问请求,第二访问请求和第三访问请求按顺序(如访问请求产生的时间顺序)依次放入缓存中,使得这些访问请求是一一按序排列的,从而得到序列化后的访问请求队列。
[0115]S12’:由单一的线程依次从所述序列化后的请求队列中读取访问请求。
[0116]具体的,参见图3,本实施例中可以在宿主进程中设置热更新模块管理器(HotModuleMgr),热更新模块管理器对访问请求进行统一管理。
[0117]其中,在统一管理时,可以将对所述软件模块的访问请求进行序列化并缓存,并由单一的线程执行所述访问请求。
[0118]例如,参见图3,宿主进程中不同线程的访问请求可以分别用线程_l(thread_l),线程_2 (thread_2)和线程_3 (thread_3)表示,热更新模块管理器可以对thread_l,thread_2和thread_3进行序列化并缓存,并由单一的线程thread_dedicated依次执行各个访问请求。
[0119]S13’:当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。
[0120]其中,当需要更新时,宿主进程会接收到更新请求,由于更新请求也是一种对软件模块的访问请求,因此热更新模块将该更新请求缓存到序列化队列中,当热更新模块执行到该更新请求后,可以由单一线程执行该更新请求,在执行该更新请求时,卸载更新前的软件模块,并重新加载更新后的软件模块。由于访问软件模块的线程是单一的,因此在卸载软件模块时可以保证没有其他线程访问该软件模块,保证卸载安全,从而实现软件模块的热更新。
[0121 ] 本实施例通过对软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,并由单一的线程依次从序列化后的请求队列中读取访问请求,可以保证在卸载软件模块时不存在其他线程访问该软件模块,由于不会存在多个线程同时访问加载的软件模块,可以在不重启宿主进程的情况下完成软件模块的更新,从而实现软件模块的热更新。
[0122]另一实施例中,处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行:
[0123]S41’:宿主进程加载更新前的软件模块。
[0124]例如,在宿主进程中设置热更新模块管理器(HotModuleMgr),由热更新模块管理器加载(load)软件模块(Target, dll),软件模块被加载到内存后可以称为模块映像(Target Image)。
[0125]S42’:热更新模块管理器将宿主进程中不同线程的访问请求序列化并缓存。
[0126]例如,参见图3,宿主进程中可以包括线程_1 (thread_l),线程_2 (thread_2)和线程_3(访1^&(1_3),这两个线程要获取(access)加载的软件模块的功能,则热更新模块管理器可以对thread_l和thread_2进行序列化并缓存。
[0127]S43’:由单一线程依次执行各个访问请求。
[0128]例如,热更新模块管理器采用单一线程thread_dedicated访问(access)加载的软件模块。
[0129]S44’:在需要升级时,升级模块对软件模块进行升级处理。
[0130]例如,升级模块(Update Module)用新版本的模块文件替换旧版本的模块文件,实现模块升级(update)。
[0131]S45’:升级模块通知宿主进程更新软件模块。
[0132]例如,升级模块向宿主进程发送通知消息,通知升级软件模块(notify update) ο
[0133]S46’:宿主进程内预设的一个线程向热更新模块管理器发送更新请求。
[0134]其中,获取加载的软件模块的功能的请求对应的线程可以称为第一线程,热更新模块管理器的访问加载的软件模块的线程可以称为第二线程,发送更新请求的线程可以称为第三线程。
[0135]例如,参见图3,第一线程包括线程1_和线程_2,热更新管理模块访问加载的软件模块的单一线程(threacLdedicated)是第二线程,第三线程是宿主进程内与第一线程和第二线程不同的线程,例如线程_3(thread_3),由第三线程发送更新请求,以通知热更新模块管理器更新加载的模块(notify target update)。
[0136]另外,由于热更新模块管理器对访问请求进行序列化,因此,线程_3发送的更新请求也被热更新模块管理器进行排序。
[0137]热更新模块管理器可以对访问请求序列化后,可以得到排序后的队列。
[0138]S47’:热更新模块管理器依次执行队列中的访问请求,当执行到更新请求时,升级加载的软件模块。
[0139]例如,队列中依次包括线程_1的获取请求,线程_2的获取请求以及线程_3的更新请求,则执行到更新请求后,热更新模块管理器可以重新加载(reload)软件模块,实现软件模块更新。
[0140]本实施例中,由于仅有thread_dedicated单一线程访问加载的软件模块,因此其在卸载模块时可确保没有其他线程访问该软件模块,实现软件模块的热更新。
[0141]本实施例通过对软件模块的访问进行统一管理使得访问软件模块的线程是单一的,可以保证在卸载软件模块时不存在其他线程访问该软件模块,从而实现软件模块的热更新。本实施例通过热更新,使得更新的模块可以立即生效,使新功能的部署方便快捷,尤其针对某些缺陷的修复更新,不必等到进程重启,使得补救措施可以立即得到应用,最大程度保证了用户的利益和安全。
[0142]需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0143]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
[0144]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
[0145]本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0146]此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0147]上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0148]在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0149]尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
【主权项】
1.一种软件模块的更新方法,其特征在于,包括: 对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求; 由单一的线程依次从所述序列化后的请求队列中读取访问请求; 当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。2.根据权利要求1所述的方法,其特征在于,所述已加载的软件模块是从宿主进程之外的预设位置加载的。3.根据权利要求1所述的方法,其特征在于,所述对已加载的软件模块的多个访问请求进行序列化处理,包括: 将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。4.根据权利要求1所述的方法,其特征在于,还包括: 接收所述宿主进程内的第一线程发送的更新请求,所述第一线程发送的更新请求是所述第一线程接收到所述宿主进程之外的升级模块发送的更新请求后发送的,所述升级模块发送的更新请求是所述升级模块对所述软件模块进行更新并保存到所述预设位置后发送的。5.根据权利要求4所述的方法,其特征在于,所述访问请求还包括所述宿主进程内的第二线程对所述软件模块的访问请求,所述单一的线程是第三线程,所述第一线程,所述第二线程和所述第三线程互不相同。6.一种软件模块的更新装置,其特征在于,包括: 管理模块,用于对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求; 读取模块,用于由单一的线程依次从所述序列化后的请求队列中读取访问请求; 处理模块,用于当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。7.根据权利要求6所述的装置,其特征在于,还包括: 加载模块,用于从宿主进程之外的预设位置加载所述软件模块。8.根据权利要求6所述的装置,其特征在于,所述管理模块具体用于: 将所述对已加载的软件模块的多个访问请求,依次排列放入预设的缓存位置。9.根据权利要求6所述的装置,其特征在于,还包括: 接收模块,用于接收所述宿主进程内的第一线程发送的更新请求,所述第一线程发送的更新请求是所述第一线程接收到所述宿主进程之外的升级模块发送的更新请求后发送的,所述升级模块发送的更新请求是所述升级模块对所述软件模块进行更新并保存到所述预设位置后发送的。10.根据权利要求9所述的装置,其特征在于,所述访问请求还包括所述宿主进程内的第二线程对所述软件模块的访问请求,所述单一的线程是第三线程,所述第一线程,所述第二线程和所述第三线程互不相同。
【专利摘要】本发明提出一种软件模块的更新方法和装置,该软件模块的更新方法包括对已加载的软件模块的多个访问请求进行序列化处理,得到序列化后的请求队列,其中,所述多个访问请求包括用于指示对所述软件模块进行更新的更新请求;由单一的线程依次从所述序列化后的请求队列中读取访问请求;当读取的访问请求是所述更新请求时,由所述单一的线程卸载所述软件模块,并重新加载更新后的所述软件模块。该方法可以实现软件模块的热更新。
【IPC分类】G06F9/445
【公开号】CN104899057
【申请号】CN201510240885
【发明人】刘欢, 杨振辉
【申请人】北京金山安全软件有限公司
【公开日】2015年9月9日
【申请日】2015年5月13日