本发明专利技术公开的异步网络应用程序处理方法包括:建立多个线程,其中各个线程具有相同的运行逻辑;其中一个线程获得全局锁,从而获得对事件队列的处理权;具有事件队列处理权的线程查询待处理事件队列,当待处理事件队列中存在待处理事件时,则该线程读取一个待处理事件,以便对该待处理事件进行处理;当待处理事件队列中不存在待处理事件时,则该线程对事件列表进行监测,当该线程监测到事件时,将所述事件加入待处理事件队列。本发明专利技术通过建立多个等效的线程以及多个线程之间对全局锁的竞锁逻辑,实现了对多线程简洁、高效的管理,节约了软硬件资源,通过简洁的线程模型进行超时处理,实现了轻量级的定时器机制和安全高效的异步消息机制。
【技术实现步骤摘要】
本专利技术涉及网络通信技术,尤其涉及一种。
技术介绍
异步网络应用,是指当发起一个线程的调度后,调用者并不需要等待结果,而可以去处理其他事件,而执行该线程调用的逻辑单元在完成调用后,将结果通过状态、消息、或者回调的方式通知调用者。而与之相对的同步网络应用是指调用者发起调度后,不执行其他任务,只等待该调用的结果。可以看出,异步网络应用是一种效率更高的网络通信方式。随着互联网的快速发展,各种异步网络应用不断丰富,因此,对网络应用软件的稳定性、高效性都提出了越来越高的要求。目前被广泛应用的有以下几种:(I)多线程处理方法。在该方法中,对于服务器与单个客户端之间建立的会话,对于服务器与单个客户端之间建立的会话都建立独立的进程/线程进行处理。因此,这种方法将创建大量的进程/线程,从而消耗大量的系统资源,而且,众多线程之间的同步和切换也会导致系统效率的大幅下降。(2)单线程处理方法。在该方法中,以单一的线程来处理所有的网络会话的相关运算。即所有网络相关操作,都由一个线程,通过操作系统支持的多路复用技术,实现对多会话网络业务的并发支持。这种模型可以节约系统资源,但其响应速度和并发度都存在不足,应用编写者任何一行不合理的代码都会导致整个系统失去响应。(3)线程池处理方法。在该方法中,需要建立有限的多个线程,所有的网络相关操作,由线程池中的有限个线程来承载。在所述多个线程中,设置一个管理线程,由所述管理线程来调度线程池中的其他线程,并且处理各个事件。例如,当一个管理线程发现了一个事件,根据不同的网络应用,所述管理线程有可能分配其他线程去处理;或者,该管理线程也可能由自身来处理该事件,即将自身降级为一般线程,而将其他线程升级为管理线程。可以看出,由于这种线程池处理方法引入了管理线程,使得多个线程间的线程均衡算法较为复杂,因此可扩展性和可维护性不强。而且,均衡算法若设计得不好,还会带来很大的系统开销。网络应用程序会大量地采用定时器,在现有的应用中,很多程序会以一个或多个线程固定作为定时器的超时处理线程,即为了定时器而新建线程,这会引起系统性能的大幅下降,在定时器的易用性和高效性上都会存在很大问题。另外,在一个网络应用中,应用内部的逻辑对象之间需要大量的通信。例如:逻辑对象A需要调用逻辑对象B执行一个持续时长不确定的事务,而对象B在执行完毕后,需要通知对象A。在现有的很多实现中,这一般通过如下方式来实现:对象A在调用对象B时,传给B —个指向某个属于A的函数的指针,当对象B完成事务后,通过这个指针调用对象A的某个函数,从而达到通知对象A的目的。在这种实现方式中,指针只有通信的对象双方知悉,通信也只在对象双方进行,系统的线程并未参与对通信内容、通信过程的管理,一旦对象的双方或一方注销,就会发生通信内容的丢失甚至程序失败,这会危及整个系统的安全,也不利于网络应用程序的维护和扩展。
技术实现思路
针对现有技术的缺陷,本专利技术的目的是提供一种能够简便地实现线程和事件管理的。本专利技术提供的包括:a.建立多个线程,其中各个线程具有相同的运行逻辑;b.其中一个线程获得全局锁,从而获得对事件队列的处理权;c.具有事件队列处理权的线程查询待处理事件队列,当待处理事件队列中存在待处理事件时,则该线程读取一个待处理事件,以便对该待处理事件进行处理;当待处理事件队列中不存在待处理事件时,则该线程对事件列表进行监测,当该线程监测到事件时,将所述事件加入待处理事件队列;d.在出现以下三种情况的任何一种时,当前获得所述处理权的线程退出全局锁,由所有线程竞争全局锁,并执行步骤b: (I)当前获得所述处理权的线程读取一个待处理事件后退出全局锁,并且在处理完该事件后与其他线程竞争全局锁;(2)当前获得所述处理权的线程将事件列表中的事件都加入待处理事件队列;(3)当前获得所述处理权的线程对事件列表完成了一个线程循环周期的监测。优选地,步骤c包括:cll.对定时器事件进行监测;cl2.在一次监测完成之前,计算所有定时器各自距下次超时的时间差,当一个定时器的时间差小于定时器的最小精度时,则该定时器到期,具有事件队列处理权的线程将其转换成超时事件,并将该超时事件加入待处理事件队列;cl3.具有事件队列处理权的线程查询所述待处理事件队列,当待处理事件队列中存在超时事件时,则该线程对所述超时事件进行处理;当待处理事件队列中不存在待处理事件时,则该线程对事件列表进行监测,当该线程监测到超时事件时,将超时事件加入待处理事件队列。优选地,步骤cll还包括,具有事件队列处理权的线程找出所有定时器的最小到期时间,以所述最小到期时间和最小线程循环周期中的最小值为监测周期,对定时器事件进行监测。优选地,本专利技术的还包括:将定时器事件从监测的事件中删除,以实现对定时器的注销。优选地,多个线程随机地获得全局锁。优选地,步骤c还包括以下步骤:c21.当一个源对象需要发送消息时,则所述源对象通过异步消息发送接口向目的对象发送消息,同时,源对象在消息队列中记录异步消息记录项;c22.具有事件队列处理权的线程根据接收到的告知信息从消息队列中接收异步消息记录项;c23.根据所述记录项读取记录的内容,所述具有事件队列处理权的线程将异步消息记录项转换成待处理的异步消息事件,并将所述异步消息事件加入待处理事件队列。优选地,步骤c21包括:当仅有该源对象向消息队列发送了异步消息记录项时,则在该源对象向消息队列发送异步消息记录项的同时,该源对象向具有事件队列处理权的线程发送告知信息。优选地,源对象通过特定的管道向具有事件队列处理权的线程发送告知信息。优选地,所述特定的管道是命名通道、文件句柄或套接字。优选地,所述异步消息记录项包括源对象ID、目的对象ID、消息内容。相对于现有技术,本专利技术的,通过建立多个等效的线程以及多个线程之间对全局锁的竞锁逻辑,实现了对多线程简洁、高效的管理,节约了软硬件资源,简化的异步网络应用程序的处理算法。进一步的,本专利技术还在上述线程调度的基础上提供了相应的定时器事件管理方法,通过简洁的线程模型进行超时处理,从而在不引入其他资源情况下,实现了轻量级的定时器机制。而且,本专利技术还在上述线程调度的基础上实现了一种对象之间的通信管理方法,通过线程对通信双方消息交互的处理,保证了对象之间通信的安全性,使得异步网络应用程序的运行更加稳定。附图说明图1是本专利技术一种具体实施方式的的流程图。具体实施例方式如图1所示,本专利技术一种具体实施方式的异步网络应用处理方法包括以下步骤:在步骤101,建立多个线程。所建立的多个线程具有等同的运行逻辑,S卩,各个线程之间的地位是平等的,不存在对于其他线程具有管理支配功能的管理线程,各线程相互为等效线程。线程对事件的处理执行,线程通过获得全局锁来获得对事件的处理权。线程的建立可以通过应用程序接口来完成。全局锁具有互斥的特性,S卩,任意时刻只有一个逻辑模块能获得锁,从而任意时刻只有一个逻辑模块能获得锁的线程即获得队列的处理权。在本专利技术中,所述逻辑模块可以是步骤101中建立的多个线程中的任意一个。建立线程可以通过各种适合的编程手段来实现,例如,在程序的主函数内,通过应用程序接口建立多个线程,用户通过应用程序接口的参数,传入系统希望建立的线程个数。对于多CPU的计算机系统,为本文档来自技高网...
【技术保护点】
一种异步网络应用程序处理方法,其特征在于,所述方法包括:a.建立多个线程,其中各个线程具有相同的运行逻辑;b.其中一个线程获得全局锁,从而获得对事件队列的处理权;c.具有事件队列处理权的线程查询待处理事件队列,当待处理事件队列中存在待处理事件时,则该线程读取一个待处理事件,以便对该待处理事件进行处理;当待处理事件队列中不存在待处理事件时,则该线程对事件列表进行监测,当该线程监测到事件时,将所述事件加入待处理事件队列;d.在出现以下三种情况的任何一种时,当前获得所述处理权的线程退出全局锁,由所有线程竞争全局锁,并执行步骤b:(1)当前获得所述处理权的线程读取一个待处理事件后退出全局锁,并且在处理完该事件后与其他线程竞争全局锁;(2)当前获得所述处理权的线程将监测到的事件都加入待处理事件队列;(3)当前获得所述处理权的线程对事件列表完成了一个线程循环周期的监测。
【技术特征摘要】
【专利技术属性】
技术研发人员:何林强,周明伟,张兴明,傅利泉,朱江明,吴军,吴坚,
申请(专利权)人:浙江大华技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。