CN113312189A - 一种消息处理方法、计算设备及储存介质 - Google Patents

一种消息处理方法、计算设备及储存介质 Download PDF

Info

Publication number
CN113312189A
CN113312189A CN202110624782.6A CN202110624782A CN113312189A CN 113312189 A CN113312189 A CN 113312189A CN 202110624782 A CN202110624782 A CN 202110624782A CN 113312189 A CN113312189 A CN 113312189A
Authority
CN
China
Prior art keywords
observer
notification message
queue
processing
queues
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
CN202110624782.6A
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.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software 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 Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202110624782.6A priority Critical patent/CN113312189A/zh
Publication of CN113312189A publication Critical patent/CN113312189A/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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • G06Q10/107Computer-aided management of electronic mailing [e-mailing]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/42Mailbox-related aspects, e.g. synchronisation of mailboxes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Abstract

本发明公开了一种消息处理方法、计算设备及储存介质,该方法响应于用户操作,生成通知消息;查找与所生成的通知消息的消息类型相对应的观察者队列,访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述通知消息;判断在处理所述通知消息的过程中是否生成新的观察者,若是,则将所述新的观察者加入当前未被访问的另一个已查找到的观察者队列中,若否,则继续执行判断在处理所述通知消息的过程中是否生成新的观察者的步骤。通过上述方法,在产生新观察者时错开正在访问的观察者队列,将新观察保存至与通知消息类型对应的另一观察者队列中,保证在处理通知消息的过程中观察者队列的稳定性。

Description

一种消息处理方法、计算设备及储存介质
本发明是2021年3月26日申请的发明专利2021103231578的分案申请。
技术领域
本发明涉及消息处理技术领域,特别涉及一种消息处理系统、计算设备及储存介质。
背景技术
应用程序(Application),是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的程序的集合。应用程序能够满足不同领域、不同问题的应用需求,因此,应用程序的使用越来越广泛。应用程序的设计开发中,包括多个功能模块,各功能模块之间会进行消息的相互通知。
目前,多通过在应用程序的中间层设计一个消息通知类,该类维护了两类队列,一类是通知消息队列,另一类是多个观察者队列,其中,通知消息队列包括多类型的通知消息,观察者队列消费消息队列中的通知消息,一个通知消息类型对应一个观察者队列,继承自通知消息的功能模块可以把自己注册进对应类型通知消息的观察者队列中,从而接收其他功能模块或本功能模块发送的通知消息。当检测到消息队列中有通知消息到来时,遍历该类型通知消息对应的观察者队列,依次调用观察者队列中的观察者针对此类通知消息的处理函数,完成通知消息的处理。但是,在观察者处理通知消息的过程中经常出现观察者队列不稳定的情况,容易造成应用程序崩溃。
为此,需要一种消息处理方法来解决上述技术方案中存在的应用程序在处理消息时不稳定的问题。
发明内容
为此,本发明提供一种消息处理方法,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供了一种消息处理方法,适于在计算设备中执行,所述方法包括步骤:
响应于用户操作,生成通知消息;
查找与所生成的通知消息的消息类型相对应的观察者队列,其中,每一类型的通知消息对应两个观察者队列;
访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述通知消息;
判断在处理所述通知消息的过程中是否生成新的观察者,若是,则将所述新的观察者加入当前未被访问的另一个已查找到的观察者队列中,若否,则执行访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述通知消息的步骤。
可选地,还包括步骤:
判断在利用所述观察者处理所述通知消息的过程中是否生成删除观察者的请求,若是,则判断待删除观察者是否在处理通知消息的观察者队列中,若否,则执行判断在利用所述观察者处理所述通知消息的过程中是否生成删除观察者的请求的步骤;
其中,所述判断待删除观察者是否在处理通知消息的观察者队列中的步骤包括:
判断待删除观察者是否在处理通知消息的观察者队列中,若是,将所述待删除观察者的节点设置为空,若否,则删除所述待删除观察者。
可选地,所述判断在处理所述通知消息的过程中是否生成新的观察者,若是,将所述新的观察者加入当前未被访问的另一个已查找到的观察者队列中的步骤包括:
判断在处理所述通知消息的过程中是否生成新的观察者,若是,则根据观察者队列的成员变量标识确定当前未被访问的另一个已查找到的观察者队列,若否,则执行判断在处理所述通知消息的过程中是否生成新的观察者的步骤,其中,通过所述成员变量标识区分当前访问的观察者队列;
判断所述未被访问的另一个已查找到的观察者队列中是否存在节点为空的观察者,若是,将节点为空的观察者替换为新的观察者,若否,则将所述新观察者加入所述未被访问的另一个已查找到的观察者队列中。
可选地,所述响应于用户操作,生成通知消息的步骤包括:
响应于用户对功能模块的操作,生成通知消息;
其中,所述通过已查找到的观察者队列之一的观察者处理所述通知消息的步骤包括:
访问所述已查找到的观察者队列之一,从中查找已注册至所述功能模块的观察者;
通过查找到的、已注册至所述功能模块的观察者处理所述通知消息。
可选地,所述方法还包括步骤:
为所述新观察者设置标志位;
将所述标志位置位,其中,在访问已查找到的其中一个观察者队列的过程中跳过标志位置位的观察者。
可选地,所述方法还包括步骤:
判断是否有新的通知消息到达所述消息队列,若是,则查找与通知消息的消息类型相对应的观察者队列,并将已查找到的观察者队列中的观察者标志位复位,其中,在访问已查找到的其中一个观察者队列的过程中会访问标志位复位的观察者。
可选地,根据观察者的成员变量名称区分与通知消息类型相对应的两个观察者队列。
可选地,所述通知消息类型包括邮件到达、邮件选中、邮件发送、邮件删除、账户创建和账户删除中的一种或多种。
根据本发明的另一个方面,提供了一种在邮件系统中处理消息的方法,其中,所述消息为邮件系统中的消息,所述方法包括步骤:
响应于用户对邮件系统中各邮件功能模块的操作,生成邮件通知消息;
查找与所生成的邮件通知消息的消息类型相对应的观察者队列,其中,每一类型的通知消息对应两个观察者队列;
访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述邮件通知消息;
判断在处理所述邮件通知消息的过程中是否生成新的观察者,若是,则将所述新的观察者加入当前未被访问的另一个已查找到的观察者队列中,若否,则执行访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述邮件通知消息的步骤。
根据本发明的另一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述方法的指令。
根据本发明的又一个方面,提供了一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述方法。
根据本发明的技术方案,提供了一种消息处理方法,该方法中一个通知消息类型对应两个观察者队列,从而在产生新观察者时,错开正在访问的观察者队列,而是将新观察保存至与通知消息类型对应的另一观察者队列中,保证在处理通知消息的过程中观察者队列的稳定性。具体地,响应于用户操作,生成通知消息,查找与所生成的通知消息的消息类型相对应的两个观察者队列,访问已查找到的观察者队列之一,并利用观察者队列中的观察者处理通知消息,判断在处理通知消息的过程中是否生成新的观察者,若是,则将新的观察者加入当前未被访问的另一个已查找到的观察者队列中。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的计算设备100的示意图;
图2示出了根据本发明一个实施例的消息处理方法200的流程图;
图3a-3b示出了根据本发明一个实施例的观察者队列数据结构的示意图;以及
图4示出了根据本发明另一个实施例的消息处理方法300的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
已有技术在应用程序的设计开发中,包括多个功能模块,各功能模块之间会进行消息的相互通知。目前,多通过在应用程序的中间层设计一个消息通知类,该类维护了两类队列,一类是通知消息队列,另一类是多个观察者队列,其中,通知消息队列包括多类型的通知消息,观察者队列消费消息队列的通知消息,并且一个通知消息类型对应一个观察者队列,继承自通知消息的功能模块可以把自己注册进对应类型通知消息的观察者队列中,从而接收其他功能模块或本功能模块发送的通知消息。当通知消息到来时,遍历该通知消息的消息类型对应的一个观察者队列,依次调用观察者队列中的观察者针对此类通知消息的处理函数,完成通知消息的处理。其中,观察者是注册进对应类型的、观察者队列的功能模块,各功能模块负责接收其他模块或本模块发送的通知消息,并处理通知消息。
但是,在观察者处理通知消息的过程中多会创建新的观察者或删除已有的观察者,造成正在被访问的观察者队列发生了变化,这会使得观察者队列不再稳定,时常由于访问时观察者的索引或指针失效而造成应用程序崩溃。并且,上述过程是在一个线程内进行的,无法通过加锁的方式解决上述问题。
为此,本发明提出了一种消息处理方法,该方法中一个通知消息类型对应两个观察者队列,从而在产生新观察者时,错开正在访问的观察者队列,而是将新观察保存至与通知消息类型对应的另一观察者队列中,保证在处理通知消息的过程中观察者队列的稳定性。具体地,响应于用户操作,生成通知消息,查找与所生成的通知消息的消息类型相对应的两个观察者队列,访问已查找到的观察者队列之一,并利用观察者队列中的观察者处理通知消息,判断在处理通知消息的过程中是否生成新的观察者,若是,则将新的观察者加入当前未被访问的另一个已查找到的观察者队列中。
本发明提供的消息处理方法在计算设备中执行,图1示出了根据本发明一个实施例的计算设备100的结构图。计算设备100的框图如图1所示,在基本配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上利用程序数据124进行操作。程序数据124包括指令,在根据本发明的计算设备100中,程序数据124包含用于执行消息处理方法200和300的指令。
计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138,可移除储存器136和不可移除储存器138均与储存接口总线134连接。本发明中,程序执行过程中发生的各事件的相关数据和指示各事件发生的时间信息,可存储于储存设备132中,操作系统120适于管理储存设备132。其中,储存设备132可为磁盘。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备100可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。计算设备100还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。在一些实施例中,计算设备100的操作系统120被配置为执行根据本发明的一种消息处理方法200和300。
图2示出了根据本发明一个实施例的消息处理方法200的流程图。方法200适于在计算设备100(例如前述计算设备100)中执行。如图2所示,消息处理方法200始于步骤S210。在步骤S210中,响应于用户操作,生成通知消息。例如在邮件应用程序中,响应用户在邮件列表界面(功能模块)删除邮件的操作,生成删除邮件的通知消息。之后,将已生成的通知消息发送至消息队列,消费消息队列中的通知消息,并判断通知消息的类型。其中,通知消息类型可以根据应用程序进行定义,当然,本发明对此不做限制,可以根据实际情况定义通知消息类型。例如,在邮件应用程序中,可以包括如表1所列出的通知消息类型。
表1
Figure BDA0003101763270000081
如表1所示,通知消息类型包括邮件到达、邮件选中、邮件发送、邮件删除、账户创建和账户删除中的一种或多种,邮件功能模块包括邮件接收模块、邮件列表界面、邮件内容界面、账户列表界面、账户删除界面中的一种或多种,也就是说,观察者包括邮件接收模块、邮件列表界面、邮件内容界面、账户列表界面、账户删除界面中的一种或多种
接下来在步骤S220中,查找与所生成的通知消息的消息类型相对应的观察者队列。其中,每一通知消息类型对应两个观察者队列。在本发明的一个实施方式中,过成员变量名称区分开两个观察者队列,例如,一个通知消息类型对应两个观察者队列的过成员变量名称分别为first和second,从而区分两个观察者队列。
以表1中示出的通知消息类型和邮件应用程序中各功能模块为例,当用户在账户删除界面删除账户时,会发送账户删除通知消息,若继承自账户删除通知消息的邮件功能模块包括邮件列表界面、邮件内容界面和账户列表界面,那么账户删除通知消息对应的两个观察者队列的每一观察者队列中,均可包括邮件列表界面、邮件内容界面和账户列表界面,或者两个观察者队列中的一个包括邮件列表界面、邮件内容界面,另一个观察者队列包括账户列表界面。本发明对此不做限制,已有技术中分配观察者至观察者队列的分配方式均在本发明的保护范围之内。
在一个实施方式中,通过修改数据结构实现一个类型的通知消息对应两个观察者队列的。例如,一个类型的通知消息对应一个户观察者队列的数据结构为map<msg,list<obervor*>*>,其中,map是键值对容器,msg为消息类型,list为观察者队列。如图3a所示,map中包括多个键值对,每一键值对中,通知消息类型为键值对的键,即msg为键值对的键,与通知消息类型对应的一个观察者队列为键值对的键值,即msg之后的队列即为键值对的键值。
而本发明中,一个类型的通知消息对应两个观察者队列的数据结构为map<msg,pair<list<obervor*>*list<observor*>*>>,其中,map是键值对容器,msg为通知消息类型,pair是观察者队列对,即每个pair对应两个list,list为观察者队列。如图3b所示,map中包括多个键值对,每一键值对中,通知消息类型为键值对的键,即msg为键值对的键,与通知消息类型对应的两个观察者队列为键值对的键值,即msg之后的first和second两个观察者队列即为键值对的键值。
之后在步骤S230中,访问已查找到的观察者队列之一,并利用观察者队列中的观察者处理通知消息。具体地,访问已查找到的观察者队列之一,从中查找已注册至功能模块的观察者,通过已注册至功能模块的观察者处理通知消息。并在步骤S240中,判断在处理通知消息的过程中是否生成新的观察者,若是,则执行步骤S250,将新的观察者加入当前未被访问的另一个已查找到的观察者队列中,若否,继续执行步骤S230。
在上述方法中,两个观察者队列是被依次访问的,顺序不会改变,例如,先访问first观察者队列,再访问second观察者队列。若在first观察者队列中的观察者处理通知消息时产生新观察者,按照上述观察者队列的访问顺序,新观察者会被加入second观察者队列中,在遍历first观察者队列时不激活新观察者,当继续遍历second观察者队列时会激活新观察者,并通过新观察者处理通知消息,反之相同。可见上述方式产生的新观察者在一次遍历观察者队列过程中被激活并处理通知消息,在这种情况下,为了进一步提高观察者队列的稳定性,在观察者队列中加入新观察者之后,在步骤S260中,为新观察者设置标志位,其中标志位为置位、复位。
接下来在步骤S270中,将新观察者的标志位置位,其中,其中,置位时标志位为1,复位时标志位为0,在访问已查找到的其中一个观察者队列的过程中会跳过标志位置位的观察者,也即,在遍历一次观察者队列过程中产生的新观察者不会被激活,也就是说,在遍历一次观察者队列过程中产生的新观察者不会处理通知消息,这就使得当前访问的观察者队列与之前相同,从而在观察者处理通知消息的过程中,进一步提高了观察者队列的稳定性,不会造成应用程序的崩溃,从而进一步保证应用程序的稳定运行。
为了在下一次遍历新观察者所在的观察者队列的过程中,新观察者能够处理通知消息,遍历完成一次观察者队列后,在步骤S280中,判断是否有新的通知消息到达消息队列,若是,则执行步骤S290,查找与通知消息的消息类型相对应的观察者队列,并将已查找到的观察者队列中的观察者标志位复位,其中,在访问已查找到的其中一个观察者队列的过程中会访问标志位复位的观察者。若否,则执行步骤S280。
通过上述方法,实现了在处理通知消息的过程中产生新观察者时,错开正在访问的观察者队列,而是将新观察者加入到两个观察者队列的另一个观察者队列,并且在一次遍历过程中,不会通过产生的新观察者处理通知消息,使得在一次遍历过程中,即使产生新观察者,两个观察者队列大小也可保持不变,保证了观察者队列的稳定性,从而当用户操作应用程序的某个功能模块时,不会造成应用程序的崩溃,保证应用程序的稳定运行。
在观察者处理通知消息的过程中,还会出现产生新观察者和删除已有观察者的情况,这会导致正在被访问的观察者队列发生了变化,使得观察者队列不再稳定,进而造成应用程序崩溃。因此,为了解决上述问题,图3示出了根据本发明另一个实施例的消息处理方法300的流程图,方法300同样适于在计算设备100(例如前述计算设备100)中执行。如图3所示,消息处理方法300始于步骤S301,在步骤S301中,响应于用户操作,生成通知消息,接着在步骤S302中,查找与所生成的通知消息的消息类型相对应的观察者队列,其中,每一通知消息类型同样对应两个观察者队列。
之后在步骤S303中,判断在利用观察者处理通知消息的过程中是否生成删除观察者的请求,若是,执行步骤S304判断待删除观察者是否在处理通知消息的观察者队列中,若否,执行步骤S303。其中,若待删除观察者在处理通知消息的观察者队列中,执行步骤S305将待删除观察者的节点设置为空,即逻辑删除待删除观察者,不释放内存资源。若待删除观察者不在处理通知消息的观察者队列中,执行步骤S306删除待删除观察者,即物理删除待删除观察者,释放内存资源。
随后在步骤S307中,判断在处理通知消息的过程中是否生成新的观察者,若是,执行步骤S308,根据观察者队列的成员变量标识确定当前未被访问的另一个已查找到的观察者队列,若否,则执行步骤S303。其中,通过成员变量标识区分当前访问的观察者队列,本发明中预先设置成员变量标识,该成员变量标识在分别遍历两个观察者队列时设置为适当的值。例如,当遍历first观察者队列时,成员变量标识设置为1,当遍历second观察者队列时,成员变量标识设置为2,遍历完成两个观察者队列后,成员变量标识设置为3。本发明对成员变量标识的具体设置不做限定,只要能够区分当前访问的观察者队列的成员变量配置方式均在本发明的保护范围之内。
例如,在处理通知消息的过程中生成新的观察者,若观察者队列的成员变量标识为1,说明正在遍历first观察者队列,此时确定当前未被访问的另一个已查找到的观察者队列为second观察者队列。若观察者队列的成员变量标识为2,说明正在遍历second观察者队列,此时确定当前未被访问的另一个已查找到的观察者队列为first观察者队列。若观察者队列的成员变量标识为3,说明遍历完成first和second两个观察者队列。
继续执行步骤S309,判断未被访问的另一个已查找到的观察者队列中是否存在节点为空的观察者,若是,执行步骤S310,将节点为空的观察者替换为新的观察者,若否,执行步骤S311,将新观察者加入未被访问的另一个已查找到的观察者队列中。例如,正在访问已查找到的成员变量名称为first的观察者队列,此时已查找到的成员变量名称为second的观察者队列未被访问,随后判断已查找到的成员变量名称为second的观察者队列中是否存在节点为空的观察者,若是,将节点为空的观察者替换为新的观察者,若否,则将新观察者加入已查找到的成员变量名称为second的观察者队列中。
接下来在步骤S312中,为新观察者设置标志位,并将新观察者的标志位置位,在访问已查找到的其中一个观察者队列的过程中会跳过标志位置位的观察者,也即,在遍历一次观察者队列过程中产生的新观察者不会被激活,也就是说,在遍历一次观察者队列过程中产生的新观察者不会处理通知消息,这就使得当前访问的观察者队列与之前相同,从而在观察者处理通知消息的过程中,进一步提高了观察者队列的稳定性,不会造成应用程序的崩溃,从而进一步保证应用程序的稳定运行。
为了在下一次遍历新观察者所在的观察者队列的过程中,新观察者能够处理通知消息,遍历完成一次观察者队列后,在步骤S313中,判断是否有新的通知消息到达消息队列,若是,则执行步骤S314,查找与通知消息的消息类型相对应的观察者队列,并将已查找到的观察者队列中的观察者标志位复位,其中,在访问已查找到的其中一个观察者队列的过程中会访问标志位复位的观察者。若否,则执行步骤S313。
通过上述方法,在产生新观察者时保证观察者队列大小不变的同时,还可将逻辑删除的观察者替换为新观察者,实现重复利用逻辑删除的观察者所占用的内存资源,且此时无需额外为新观察者分配内存资源,减少内存资源的占用,从而提高内存资源的利用率。
为了更好的理解本发明的消息处理方法,下面将通过一个示例来对本发明的消息处理方法的整个过程进行说明。
假设在邮件应用程序中,用户在账户删除界面进行删除账户操作,此时会生成账户删除通知消息,账户删除通知消会被发送至消息队列,与账户删除界面存在继承关系的邮件功能模块包括邮件列表界面、邮件内容界面和账户列表界面,并且账户删除通知消息对应的两个观察者队列中均包括邮件列表界面、邮件内容界面和账户列表界面三个观察者。其中,存在继承关系的含义为:对账户删除界面进行操作时,邮件列表界面、邮件内容界面和账户列表界面这三个邮件功能模块均会执行相应操作。
当用户在账户删除界面删除账户时,会发送账户删除通知消息至消息队列,消费消息队列中的消息,查找与账户删除通知消息对应的两个观察者队列,并访问已查找到的成员变量名称为first的观察者队列,利用成员变量名称为first的观察者队列中的观察者(邮件列表界面、邮件内容界面和账户列表界面)处理账户删除通知消息。并判断在处理账户删除通知消息的过程中是否生成删除观察者的请求,若是,继续判断待删除观察者是否在成员变量名称为first的观察者队列中,若在处理账户删除通知消息的过程中未生成删除观察者的请求,则重复判断在处理账户删除通知消息的过程中是否生成删除观察者的请求。其中,若待删除观察者在在成员变量名称为first的观察者队列中,逻辑删除待删除观察者,不释放内存资源,若待删除观察者不在成员变量名称为first的观察者队列中,物理删除待删除观察者,释放内存资源。
接下来判断在处理账户删除通知消息的过程中是否生成新的观察者,若是,由于正在访问已查找到的成员变量名称为first的观察者队列,因此确定此时已查找到的成员变量名称为second的观察者队列未被访问,若否,则重复判断在处理账户删除通知消息的过程中是否生成新的观察者。随后判断已查找到的成员变量名称为second的观察者队列中是否存在逻辑删除的观察者,若是,将被逻辑删除的观察者替换为新的观察者,若否,则将新观察者加入已查找到的成员变量名称为second的观察者队列中。
随后,为新观察者设置标志位,并将标志位置位,使得随后遍历second的观察者队列时跳过新观察者。之后当有新的邮件应用程序的通知消息到达消息队列时,查找与邮件应用程序的通知消息类型相对应的两个观察者队列,并将已查找到的两个观察者队列中的所有观察者标志位复位(此时之前加入的新观察者标志位也被复位),从而在有新通知消息到来时,还可以通过新观察者处理该通知消息。
通过上述方法,在产生新观察者和删除观察者时,保证观察者队列大小不变的同时,还可将逻辑删除的观察者替换为新观察者,实现重复利用逻辑删除的观察者所占用的内存资源,且此时无需额外为新观察者分配内存资源,减少内存资源的占用,从而提高内存资源的利用率。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的消息处理方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (10)

1.一种消息处理方法,适于在计算设备中执行,所述方法包括步骤:
响应于用户操作,生成通知消息;
查找与所生成的通知消息的消息类型相对应的观察者队列,其中,每一类型的通知消息对应两个观察者队列;
访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述通知消息;
判断在处理所述通知消息的过程中是否生成新的观察者,若是,则将所述新的观察者加入当前未被访问的另一个已查找到的观察者队列中,若否,则执行访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述通知消息的步骤;
判断在利用所述观察者处理所述通知消息的过程中是否生成删除观察者的请求,若是,则判断待删除观察者是否在处理通知消息的观察者队列中,若否,则执行判断在利用所述观察者处理所述通知消息的过程中是否生成删除观察者的请求的步骤。
2.如权利要求1所述的方法,其中,所述判断待删除观察者是否在处理通知消息的观察者队列中的步骤包括:
判断待删除观察者是否在处理通知消息的观察者队列中,若是,将所述待删除观察者的节点设置为空,若否,则删除所述待删除观察者。
3.如权利要求2所述的方法,其中,所述判断在处理所述通知消息的过程中是否生成新的观察者,若是,将所述新的观察者加入当前未被访问的另一个已查找到的观察者队列中的步骤包括:
判断在处理所述通知消息的过程中是否生成新的观察者,若是,则根据观察者队列的成员变量标识确定当前未被访问的另一个已查找到的观察者队列,若否,则执行判断在处理所述通知消息的过程中是否生成新的观察者的步骤,其中,通过所述成员变量标识区分当前访问的观察者队列;
判断所述未被访问的另一个已查找到的观察者队列中是否存在节点为空的观察者,若是,将节点为空的观察者替换为新的观察者,若否,则将所述新观察者加入所述未被访问的另一个已查找到的观察者队列中。
4.如权利要求1所述的方法,其中,所述响应于用户操作,生成通知消息的步骤包括:
响应于用户对功能模块的操作,生成通知消息;
其中,所述通过已查找到的观察者队列之一的观察者处理所述通知消息的步骤包括:
访问所述已查找到的观察者队列之一,从中查找已注册至所述功能模块的观察者;
通过查找到的、已注册至所述功能模块的观察者处理所述通知消息。
5.如权利要求4所述的方法,所述方法还包括步骤:
为所述新观察者设置标志位;
将所述标志位置位,其中,在访问已查找到的其中一个观察者队列的过程中跳过标志位置位的观察者。
6.如权利要求1至5中任一项所述的方法,所述方法还包括步骤:
判断是否有新的通知消息到达所述消息队列,若是,则查找与通知消息的消息类型相对应的观察者队列,并将已查找到的观察者队列中的观察者标志位复位,其中,在访问已查找到的其中一个观察者队列的过程中会访问标志位复位的观察者。
7.如权利要求1至6中任一项所述的方法,其中,根据观察者的成员变量名称区分与通知消息类型相对应的两个观察者队列,所述通知消息类型包括邮件到达、邮件选中、邮件发送、邮件删除、账户创建和账户删除中的一种或多种。
8.一种在邮件系统中处理消息的方法,其中,所述消息为邮件系统中的消息,所述方法包括步骤:
响应于用户对邮件系统中各邮件功能模块的操作,生成邮件通知消息;
查找与所生成的邮件通知消息的消息类型相对应的观察者队列,其中,每一类型的通知消息对应两个观察者队列;
访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述邮件通知消息;
判断在处理所述邮件通知消息的过程中是否生成新的观察者,若是,则将所述新的观察者加入当前未被访问的另一个已查找到的观察者队列中,若否,则执行访问已查找到的观察者队列之一,并利用所述观察者队列中的观察者处理所述邮件通知消息的步骤。
9.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-8中任一项所述的方法的指令。
10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-8中任一项所述的方法。
CN202110624782.6A 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质 Pending CN113312189A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110624782.6A CN113312189A (zh) 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202110323157.8A CN112711490B (zh) 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质
CN202110624782.6A CN113312189A (zh) 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN202110323157.8A Division CN112711490B (zh) 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质

Publications (1)

Publication Number Publication Date
CN113312189A true CN113312189A (zh) 2021-08-27

Family

ID=75550301

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202110323157.8A Active CN112711490B (zh) 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质
CN202110624782.6A Pending CN113312189A (zh) 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202110323157.8A Active CN112711490B (zh) 2021-03-26 2021-03-26 一种消息处理方法、计算设备及储存介质

Country Status (1)

Country Link
CN (2) CN112711490B (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106850402B (zh) * 2017-01-16 2020-11-03 腾讯科技(深圳)有限公司 消息的传输方法和装置
WO2018199817A1 (en) * 2017-04-24 2018-11-01 Telefonaktiebolaget Lm Ericsson (Publ) Message queue performance monitoring
CN107450971B (zh) * 2017-06-29 2021-01-29 北京五八信息技术有限公司 任务处理方法及装置
CN108965587A (zh) * 2018-06-26 2018-12-07 恒生电子股份有限公司 一种消息提醒方法、装置以及设备
CN111694674B (zh) * 2019-03-13 2023-08-08 北京字节跳动网络技术有限公司 消息分发处理方法、装置、设备及存储介质
CN110213371B (zh) * 2019-05-31 2023-05-12 深圳前海微众银行股份有限公司 消息消费方法、装置、设备及计算机存储介质

Also Published As

Publication number Publication date
CN112711490B (zh) 2021-07-16
CN112711490A (zh) 2021-04-27

Similar Documents

Publication Publication Date Title
US9665392B2 (en) System and method for supporting intra-node communication based on a shared memory queue
CN111563024B (zh) 一种宿主机上监控容器进程的方法、装置及计算设备
CN110865888A (zh) 一种资源加载方法、装置、服务器及存储介质
WO2022222350A1 (zh) 一种数据加密方法及计算设备
CN111651464A (zh) 数据处理方法、系统及计算设备
WO2024087875A1 (zh) 内存管理方法、装置、介质及电子设备
CN114625545A (zh) 进程持锁检测方法及其电子设备和可读介质
CN114461404B (zh) 一种进程迁移方法、计算设备及可读存储介质
CN114416252A (zh) 一种窗口显示方法、装置、计算设备和存储介质
CN114610337A (zh) 一种多系统安装方法、计算设备及存储介质
CN113010265A (zh) Pod的调度方法、调度器、存储插件及系统
CN114327917A (zh) 内存管理方法、计算设备及可读存储介质
EP4052126A1 (en) Management of multiple physical function non-volatile memory devices
CN111736915A (zh) 云主机实例硬件加速设备的管理方法、装置、设备及介质
CN111913793A (zh) 分布式任务调度方法、装置、节点设备和系统
CN116192956A (zh) 一种缓存数据更新方法、系统、计算设备及存储介质
CN114880072A (zh) 一种虚拟机的应用窗口显示方法、计算设备及存储介质
CN108228842B (zh) Docker镜像库文件存储方法、终端、设备以及存储介质
CN112711490B (zh) 一种消息处理方法、计算设备及储存介质
CN114816772A (zh) 基于兼容层运行的应用的排错方法、排错系统及计算设备
CN113342270A (zh) 卷卸载方法、装置和电子设备
CN110764933B (zh) 一种消息处理方法、装置、系统及计算设备
CN108874560B (zh) 进行通信的方法和通信设备
CN112181516A (zh) 应用软件的执行方法及计算设备
CN113194127B (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