一种消息处理的方法及装置与流程

文档序号:16627582发布日期:2019-01-16 06:15阅读:141来源:国知局
一种消息处理的方法及装置与流程

本发明属于通讯技术领域,尤其涉及一种消息处理的方法和装置。



背景技术:

在通信消息处理领域中,消息定时焚毁功能是使用非常广泛的,现有技术中大多数都是提前设置好接收到消息预设时长后将消息进行焚毁,通过读取接收消息时的cpu时间,当cpu时间达到消息焚毁的预设时长时,就将消息焚毁。cpu时间虽然不随系统时间修改而改变,但很多情况下cpu时间与系统时间不一致,可能会产生异常逻辑,导致读取的时间不准确。并且通过系统调用获取时间是相对消耗系统性能的操作,高频的使用系统调用获取时间导致了系统性能的瓶颈,使得cpu的占用率过高,导致定时焚毁功能失效。



技术实现要素:

有鉴于此,本发明实施例提供了一种消息处理的方法,以解决现有技术中cpu时间与系统时间不一致,可能会产生异常逻辑,导致读取的时间不准确。并且通过系统调用获取时间是相对消耗系统性能的操作,高频的使用系统调用获取时间导致了系统性能的瓶颈,使得cpu的占用率过高,导致定时焚毁功能失效的问题。

本发明实施例的第一方面提供了一种消息处理的方法,包括:

接收消息并获取当前处理器预设线程的第一休眠次数;

根据预设休眠时长计算预设消息消除时长所对应的处理器预设线程的第二休眠次数;

若处理器预设线程的休眠次数达到第三休眠次数,则将所述消息消除;所述第三休眠次数等于第一休眠次数加第二休眠次数。

进一步的,所述接收消息并获取当前处理器预设线程的第一休眠次数之前,还包括:

设置处理器的预设线程重复进行休眠,并设置预设休眠时长。

进一步的,所述设置处理器的预设线程重复进行休眠,并设置预设休眠时长之后,还包括:

通过计数器记录处理器预设线程的休眠次数。

进一步的,所述接收消息并获取当前处理器预设线程的第一休眠次数,包括:

接收消息并读取计数器中记录的处理器预设线程的第一休眠次数。

进一步的,所述根据预设休眠时长计算预设消息消除时长所对应的预设线程的第二休眠次数,包括:

通过公式“第二休眠次数=预设消息消除时长÷预设休眠时长”计算预设消息消除时长所对应的预设线程的第二休眠次数。

本发明实施例的第二方面提供了一种消息处理的装置,包括:

获取模块,用于接收消息并获取当前处理器预设线程的第一休眠次数;

计算模块,用于根据预设休眠时长计算预设消息消除时长所对应的处理器预设线程的第二休眠次数;

消除模块,用于若处理器预设线程的休眠次数达到第三休眠次数,则将所述消息消除;所述第三休眠次数等于第一休眠次数加第二休眠次数。

进一步的,所述获取模块具体用于:

接收消息并读取计数器中记录的处理器预设线程的第一休眠次数。

进一步的,所述计算模块具体用于:

通过公式“第二休眠次数=预设消息消除时长÷预设休眠时长”计算预设消息消除时长所对应的预设线程的第二休眠次数。

第三方面,本发明实施例提供了一种终端,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储支持终端执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面的方法。

第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。

本发明实施例通过接收消息并获取当前处理器预设线程的第一休眠次数;根据预设休眠时长计算预设消息消除时长所对应的处理器预设线程的第二休眠次数;若处理器预设线程的休眠次数达到第三休眠次数,则将所述消息消除;所述第三休眠次数等于第一休眠次数加第二休眠次数。本发明实施例通过处理器线程休眠的方式,可以使得线程让出处理器的使用权,增加处理器的效率,避免现有技术中因为高频的使用系统调用获取时间导致系统性能瓶颈的问题,并且通过记录线程休眠次数来代替重复获取系统时间克服了现有技术因为系统时间错误导致消息迟迟不能够焚毁,或来不及显示就即时焚毁,或焚毁时间与设计时间相差过大问题。本发明实施例能准确及时的对消息进行处理,提高系统处理消息的效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种消息处理的方法的实现流程示意图;

图2是本发明实施例提供的另一种消息处理的方法的实现流程示意图;

图3是本发明实施例提供的一种消息处理的装置的示意图;

图4是本发明实施例提供的终端设备的示意图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

消息定时焚毁功能在即时通信软件领域中使用的非常广泛,在现有技术中,大多数都是通过读取系统时间来对消息进行处理,例如,假设接收到通信消息10s后自动焚毁,常规操作是服务器记录接收消息时的系统时间t1,假设t1是10:00:00,当系统当前时间t2达到10:00:10时,t2-t1=10s,服务端先自动清除该消息并通知客户端清除。在上述现有技术中,存在着几个缺点。当t1=10:00:00本身错误即记录消息接收的真实时间并非10:00:00时,若真实时间比t1小,例如为00:00:00,那么系统在10:00:10之前修正系统时间为真实的系统时间00:00:00,则消息需要10h+10s才焚毁。若消息接收的真实时间在00:00:00-10:00:10之间,那么难以精确10s左右焚毁。若消息接收的真实时间比t1大,那么修正系统时间将导致消息即时焚毁。若t1记录的是正确的系统时间,但当前时间t2为非正确的系统时间,会导致消息迟迟不能够焚毁,或来不及显示就即时焚毁,或焚毁时间与设计时间相差过大问题。当多个用户对服务器频繁对时,而用户的时间不尽正确和相同,这种情况会导致服务器系统时间频繁变更,导致定时焚毁功能失效。此外,如果消息在一个列表中,因为时间修改,如果最旧的消息无法删除,则也无法删除之后的消息,导致消息队列过大,消耗额外的系统资源。同样,如果消息互不影响,则可能导致消息错乱,后面的消息都删除了,而前面的消息依然保留等异常的出现。并且,当服务器产生大量消息时,每个消息都需要获取当前的时间,而通过系统调用获取时间是相对消耗系统性能的操作,高频的使用系统调用获取时间将导致了系统性能的瓶颈。本发明实施例通过在接收消息时获取当前处理器预设线程的第一休眠次数;根据预设休眠时长计算预设消息消除时长所对应的处理器预设线程的第二休眠次数;若处理器预设线程的休眠次数达到第三休眠次数,则将所述消息消除;所述第三休眠次数等于第一休眠次数加第二休眠次数。本发明实施例避免了频繁调用系统时间导致系统性能的瓶颈,使得系统能够准确的处理消息。为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。

参考图1,图1是本发明实施例提供的一种消息处理的方法的示意流程图,该方法执行主体为服务器,所述服务器执行如步骤s101至s103所述的方法,该方法包括:步骤s101至步骤s103。

步骤s101,接收消息并获取当前处理器预设线程的第一休眠次数。

在本发明实施例中,处理器的一个线程进行重复休眠,并且设置好每次休眠的时长,通过计数器记录处理器预设线程的休眠次数。当接收到消息的时候,读取计数器中记载的处理器预设线程的休眠次数。

如图2所示,在本发明实施步骤步骤s101:接收消息并获取当前处理器预设线程的第一休眠次数之前,还包括:步骤s110至步骤s120。

步骤s110,设置处理器的预设线程重复进行休眠,并设置预设休眠时长。

目前基本所有处理器都是多线程的处理器,多线程能充分发挥cpu核心的利用率,在本发明实施例中,将处理器的单独一个线程设置进行重复休眠,并设置好每次休眠的时长,例如,每次预设休眠时长为10ms,处理器线程休眠到唤醒到再次休眠之间的时间间隔基本可以忽视不计,经过试验,当休眠时长为10ms时,在10s内只有2ms的时间误差,这对于绝大多数消息处理是可以接受的范围。在本发明实施例中,处理器的线程采用32位int类型,如果采用每10ms的休眠时长,那么可以在理想情况下,设备可以4294967296÷((365×24×60×60)×10)=13年不重启。在本发明的一种实施例中,当处理器开始通电时,预设线程就开始进行休眠。进行线程休眠可以使线程让出处理器的使用权,增加处理器的处理效率,当线程休眠时,会将处理器资源的使用交给其他线程,以便能够线程之间的轮换调用。如何让一个线程休眠有两种方法,一是使用thread.sleep(longmillis)或者thread.sleep(longmillis,intnanos)方法。另一个是使用timeunit类的sleep()方法来实现线程休眠。

步骤s120,通过计数器记录处理器预设线程的休眠次数。

当处理器的预设线程开始进行重复休眠时,通过处理器的计数器记录预设线程的休眠次数。

为了方便进行记录线程的休眠次数,本发明实施例中计数器提供多种计数方式,例如,以每次休眠10ms为例,计数器对外提供10ms计数值value10、100ms计数值value100、1s计数值value1000等三个参数,value10为10ms计数值,每过10ms计数值自增1,value100为100ms计数值,每过100ms自增1,value1000为1s计数值,每过1s计数值自增1。当处理器线程每休眠10ms,value10自增1,每休眠10次,value100自增1,每休眠100次,value100自增10,value1000自增1。又例如,当每次休眠时长为100ms时,每休眠1次value100自增1,每休眠10次value1000自增1。具体选择何种计数方式,可以根据对精度的要求自行选择,例如,若对精度要求高,就选择10ms的计数方式,若对精度要求不高,就可以选择1s的计数方式。

步骤s102,根据预设休眠时长计算预设消息消除时长所对应的处理器预设线程的第二休眠次数。

所述预设休眠时长为处理器预设线程每次休眠的时长,在上述实施步骤中已有描述。所述预设消息消除时长为系统设置的消息接收到后的保留时间,当接收到消息后预设消息消除时长后,将接收到的消息消除,防止积累在消息队列中,导致消息堵塞或处理器占用率过高。

通过公式“第二休眠次数=预设消息消除时长÷预设休眠时长”计算预设消息消除时长所对应的预设线程的第二休眠次数。例如,假设接收到通信消息10s后自动焚毁,每次休眠的时长为10ms,第二休眠次数=10000ms÷10ms=1000次,那么在这10s内处理器预设线程应该休眠1000次。也就是说,从接收到消息后处理器预设线程再休眠1000次,就将所述消息消除。

步骤s103,若处理器预设线程的休眠次数达到第三休眠次数,则将所述消息消除;所述第三休眠次数等于第一休眠次数加第二休眠次数。

若处理器预设线程的第三休眠次数满足“第三休眠次数=第二休眠次数+第一休眠次数”,则说明预设消息消除时长已经达到,将所述消息消除。例如,假设接收到消息的时候处理器预设线程的第一休眠次数为1000次,预设的休眠时长为10ms,预设消息消除时长为10s,那么第二休眠时长应为1000次,那么第三休眠时长=1000+1000=2000次,当处理器预设线程的休眠次数达到2000次的时候,将所述接收到的消息消除。及时的将历史消息消除可以避免消息积累在消息列表中导致消耗额外的系统资源,准确的将历史消息消除可以避免系统产生异常逻辑。

应理解,本发明实施例中通过读取处理器线程休眠次数来代替现有技术中获取系统时间的方案不仅仅可以使用在消息定时焚毁功能中,也可以使用在其他需要定时处理消息或事务的系统中,例如,定时转发消息等。通过本发明读取线程休眠次数的方法,可以解决现在技术因为系统时间不准确导致的消息定时处理时效的问题,并且可以增加处理器的处理效率。

本发明实施例通过接收消息并获取当前处理器预设线程的第一休眠次数;根据预设休眠时长计算预设消息消除时长所对应的处理器预设线程的第二休眠次数;若处理器预设线程的休眠次数达到第三休眠次数,则将所述消息消除;所述第三休眠次数等于第一休眠次数加第二休眠次数。本发明实施例通过处理器线程休眠的方式,可以使得线程让出处理器的使用权,增加处理器的效率,避免现有技术中因为高频的使用系统调用获取时间导致系统性能瓶颈的问题,并且通过记录线程休眠次数来代替重复获取系统时间克服了现有技术因为系统时间错误导致消息迟迟不能够焚毁,或来不及显示就即时焚毁,或焚毁时间与设计时间相差过大问题。本发明实施例能准确及时的对消息进行处理,提高系统处理消息的效率。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

参考图3,图3是本发明实施例提供的一种消息处理的装置30的示意图,如图3所示,该装置包括:获取模块31,计算模块32,消除模块33。

获取模块31,用于接收消息并获取当前处理器预设线程的第一休眠次数。

计算模块32,用于根据预设休眠时长计算预设消息消除时长所对应的处理器预设线程的第二休眠次数。

消除模块33,用于若处理器预设线程的休眠次数达到第三休眠次数,则将所述消息消除;所述第三休眠次数等于第一休眠次数加第二休眠次数。

所述获取模块31具体用于:

接收消息并读取计数器中记录的处理器预设线程的第一休眠次数。

在本发明实施例中,处理器的一个线程进行重复休眠,并且设置好每次休眠的时长,通过计数器记录处理器预设线程的休眠次数。当接收到消息的时候,读取计数器中记载的处理器预设线程的休眠次数。

所述计算模块32具体用于:

通过公式“第二休眠次数=预设消息消除时长÷预设休眠时长”计算预设消息消除时长所对应的预设线程的第二休眠次数。例如,假设接收到通信消息10s后自动焚毁,每次休眠的时长为10ms,第二休眠次数=10000ms÷10ms=1000次,那么在这10s内处理器预设线程应该休眠1000次。也就是说,从接收到消息后处理器预设线程再休眠1000次,就将所述消息消除。

图4是本发明一实施例提供的终端设备的示意图。如图4所示,该实施例的终端设备4包括:处理器40、存储器41以及存储在所述存储器41中并可在所述处理器40上运行的计算机程序42。所述处理器40执行所述计算机程序42时实现上述各个方法实施例中的步骤,例如图1所示的步骤101至103。或者,所述处理器40执行所述计算机程序42时实现上述各装置实施例中各模块/单元的功能,例如图3所示模块31至33的功能。

示例性的,所述计算机程序42可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器41中,并由所述处理器40执行,以完成本发明。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序42在所述终端设备4中的执行过程。

所述终端设备4可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器40、存储器41。本领域技术人员可以理解,图4仅仅是终端设备4的示例,并不构成对终端设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。

所称处理器40可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器41可以是所述终端设备4的内部存储单元,例如终端设备4的硬盘或内存。所述存储器41也可以是所述终端设备4的外部存储设备,例如所述终端设备4上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器41还可以既包括所述终端设备4的内部存储单元也包括外部存储设备。所述存储器41用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器41还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

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

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

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

所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

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