CN111427751A - 基于异步处理机制对业务进行处理的方法及系统 - Google Patents
基于异步处理机制对业务进行处理的方法及系统 Download PDFInfo
- Publication number
- CN111427751A CN111427751A CN202010296767.9A CN202010296767A CN111427751A CN 111427751 A CN111427751 A CN 111427751A CN 202010296767 A CN202010296767 A CN 202010296767A CN 111427751 A CN111427751 A CN 111427751A
- Authority
- CN
- China
- Prior art keywords
- thread
- service
- running
- processed
- sub
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3017—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is implementing multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/508—Monitor
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于异步处理机制对业务进行处理的方法及系统,其中方法包括:初始化用于对多个业务进行处理的业务执行线程池;响应于检测到所述待处理的业务的主线程创建子线程时,确定完成所述子线程所需要的运行时间,当所需要的运行时间大于时间阈值时,将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理;将所述待处理的业务设置为暂停状态并记录所述待处理的业务的运行上下文信息,并为所述子线程设置监听器以监听所述子线程的运行状态;当监听器监听到所述子线程的运行状态为运行完成时,根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行,并将所述待处理的业务设置为运行状态。
Description
技术领域
本发明涉及计算机领域,并且更具体地,涉及一种基于异步处理机制对业务进行处理的方法及系统。
背景技术
随着信息技术和网络技术的发展,并且由于应用的复杂性和需求的多样性,一个业务逻辑通常会关联多个系统。因此,每个系统之间就需要不断地进行交互。交互一般采用的都是网络交互。在系统并发量大,吞吐量大的时候,网络压力会带来时间上的消耗,并且因此会导致系统的吞吐量变小。传统上,系统处理上一般使用同步等待响应的方式。同步等待响应的方式通常为了加大系统并发和吞吐量会采用采用加大业务线程池的线程数,或者加大业务引擎实例数。
线程的建立需要消耗系统的资源和时间,因此采用线程池技术可以有效的加快服务逻辑的处理,只要有服务需要处理时,把任务提交到线程池即可,线程池技术就是管理一组已经创建好线程的技术。当下异步编程技术非常成熟,Java API对异步编程提供非常方便且好用的接口,采用线程池和异步编程API可以很快的完成异步编程逻辑。
现有技术中,主服务调用子服务,并同步等待子服务返回。这种方式会让主服务的线程处于空闲等待状态,并且主服务占用的线程其他服务暂时不能使用。这样会导致机器CPU利用率低。并且如果有大量的业务都是这样,会导致大量的业务线程处于相同的状态,从而导致系统的吞吐量低。
此外,系统创建多个线程或者水平扩展多个进程来处理服务。一个请求分配一个线程来处理,这样就会创建大量的线程,但是系统不能无限制的增加线程。另一方面,由于现在的计算机都是多核心CPU,多线程技术也是为了提高多核CPU的能力。如果水平扩展进程数,会让机器CPU发挥不了多核心的优势,只是增加线程数来解决问题,线程数太多时会导致切换线程带来的系统消耗增多,也会让系统的资源使用的更多。
发明内容
本发明旨在采用异步方式调用子服务,主服务线程可以暂时让出来处理其他的服务,从而提高线程的使用效率。现在的计算机对异步架构的支持都非常成熟,可以尽量不让线程处于等待状态,又可以减少系统切换线程带来的消耗,从而使多核CPU的资源更注重业务处理,从而提高系统的吞吐量。
本发明提供一种多线程调度方案,能够解决业务引擎执行服务逻辑并且需要调用级联服务逻辑时,即主服务调用子服务时,如果主服务调用子服务耗时比较长,会导致主服务执行线程阻塞的情况。其中,长时间阻塞调用线程会导致业务引擎吞吐量低下的情况。多线程调度方案可以应用在业务引擎领域。本发明的技术方案主要解决业务逻辑中一些步骤处理比较耗时,比如和其他系统通讯,而同步等待子服务的响应结果从而导致吞吐量低下的弊端。
本发明的业务处理线程池能够提高业务吞吐量,通过上下文记录能够确定服务处于暂停状态和恢复状态,并且使用Java线程回调技术。
本发明提供一种基于异步处理机制对业务进行处理的方法,所述方法包括:
初始化用于对多个业务进行处理的业务执行线程池,并为所述业务执行线程池设置核心线程数、最大线程数、缓冲队列深度、空闲业务线程销毁时间和拒绝策略;
当接收到待处理的业务时,根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证,当确定所述待处理的业务通过合法性验证时,则将所述待处理的业务设置为就绪状态;
当所述业务执行线程池内正在运行的线程数量小于最大线程数时,在业务执行线程池为所述待处理的业务创建主线程;
响应于检测到所述待处理的业务的主线程创建子线程时,确定完成所述子线程所需要的运行时间,当所需要的运行时间大于时间阈值时,将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理;
将所述待处理的业务设置为暂停状态并记录所述待处理的业务的运行上下文信息,并为所述子线程设置监听器以监听所述子线程的运行状态;
当监听器监听到所述子线程的运行状态为运行完成时,根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行,并将所述待处理的业务设置为运行状态。
所述核心线程数用于指示所述业务执行线程池中运行的核心线程的数量;
所述最大线程数用于指示所述业务执行线程池中能够运行的线程的最大数量;
所述缓冲队列深度用于指示缓冲队列能容纳的待处理的业务的数量,所述缓冲队列用于容纳处于暂停状态的待处理的业务;
空闲业务线程销毁时间用于指示处于空间状态的线程被销毁的时间期限;
拒绝策略包括多个拒绝条件,当需要在业务执行线程池中创建线程的业务符合至少一个拒绝条件时,拒绝为业务创建线程。
所述确定完成所述子线程所需要的运行时间包括:确定所述子线程所涉及的业务量,根据业务量和当前处理资源确定完成所述子线程所需要的运行时间。
所述将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理包括:
将与所述子线程相关联的运行参数和处理请求发送给位于所述业务执行线程池外部的外部处理模块,
所述外部处理模块根据所述处理请求和运行参数运行所述子线程。
在所述外部处理模块根据所述处理请求和运行参数运行所述子线程之后还包括:
所述外部处理模块为所述子线程生成监听对象,并将所述监听对象发送给监听器;
监听器通过对监听对象进行监听来实现对所述子线程的运行状态进行实时监测。
将所述待处理的业务设置为就绪状态之后,为所述待处理的业务创建数据处理容器。
将所述待处理的业务设置为暂停状态之后,释放为所述待处理的业务所创建的主线程占用的资源,将与所述主线程和数据处理容器相关的数据保存到缓冲队列。
将缓冲队列中的与所述主线程和数据处理容器相关的数据作为待处理的业务的运行上下文信息。
根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行包括:
根据所述子线程的运行结果确定与所述主线程相关联的返回参数;
对所述运行上下文信息进行解析以确定与所述主线程和数据处理容器相关的数据;
根据与所述主线程和数据处理容器相关的数据,以及返回参数继续运行所述待处理的业务的主线程。
根据与所述主线程和数据处理容器相关的数据,以及返回参数继续运行所述待处理的业务的主线程包括:
根据与所述主线程和数据处理容器相关的数据为所述待处理的业务创建新的数据处理容器;
基于新的数据处理容器,根据返回参数继续运行所述待处理的业务的主线程。
本发明提供一种基于异步处理机制对业务进行处理的系统,所述系统包括:
初始化单元,初始化用于对多个业务进行处理的业务执行线程池,并为所述业务执行线程池设置核心线程数、最大线程数、缓冲队列深度、空闲业务线程销毁时间和拒绝策略;
验证单元,当接收到待处理的业务时,根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证,当确定所述待处理的业务通过合法性验证时,则将所述待处理的业务设置为就绪状态;
创建单元,当所述业务执行线程池内正在运行的线程数量小于最大线程数时,在业务执行线程池为所述待处理的业务创建主线程;
处理单元,响应于检测到所述待处理的业务的主线程创建子线程时,确定完成所述子线程所需要的运行时间,当所需要的运行时间大于时间阈值时,将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理;
设置单元,将所述待处理的业务设置为暂停状态并记录所述待处理的业务的运行上下文信息,并为所述子线程设置监听器以监听所述子线程的运行状态;
运行单元,当监听器监听到所述子线程的运行状态为运行完成时,根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行,并将所述待处理的业务设置为运行状态。
所述核心线程数用于指示所述业务执行线程池中运行的核心线程的数量;
所述最大线程数用于指示所述业务执行线程池中能够运行的线程的最大数量;
所述缓冲队列深度用于指示缓冲队列能容纳的待处理的业务的数量,所述缓冲队列用于容纳处于暂停状态的待处理的业务;
空闲业务线程销毁时间用于指示处于空间状态的线程被销毁的时间期限;
拒绝策略包括多个拒绝条件,当需要在业务执行线程池中创建线程的业务符合至少一个拒绝条件时,拒绝为业务创建线程。
所述处理单元确定所述子线程所涉及的业务量,根据业务量和当前处理资源确定完成所述子线程所需要的运行时间。
所述处理单元将与所述子线程相关联的运行参数和处理请求发送给位于所述业务执行线程池外部的外部处理模块,
所述外部处理模块根据所述处理请求和运行参数运行所述子线程。
其中所述外部处理模块为所述子线程生成监听对象,并将所述监听对象发送给监听器;
监听器通过对监听对象进行监听来实现对所述子线程的运行状态进行实时监测。
还包括,将所述待处理的业务设置为就绪状态之后,由创建单元为所述待处理的业务创建数据处理容器。
还包括,将所述待处理的业务设置为暂停状态之后,处理单元释放为所述待处理的业务所创建的主线程占用的资源,将与所述主线程和数据处理容器相关的数据保存到缓冲队列。
将缓冲队列中的与所述主线程和数据处理容器相关的数据作为待处理的业务的运行上下文信息。
所述运行单元包括:
确定单元,根据所述子线程的运行结果确定与所述主线程相关联的返回参数;
解析单元,对所述运行上下文信息进行解析以确定与所述主线程和数据处理容器相关的数据;
运行子单元,根据与所述主线程和数据处理容器相关的数据,以及返回参数继续运行所述待处理的业务的主线程。
所述运行子单元:
根据与所述主线程和数据处理容器相关的数据为所述待处理的业务创建新的数据处理容器;
基于新的数据处理容器,根据返回参数继续运行所述待处理的业务的主线程。
参照附图来阅读对于示例性实施例的以下描述,本发明的其它特性特征和优点将变得清晰。
附图说明
并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其它的附图。
图1为根据本发明的基于异步处理机制对业务进行处理的方法的流程图;
图2为根据本发明的系统架构的结构示意图;
图3为根据本发明的业务处理方法的流程图;
图4为根据本发明的基于异步处理机制对业务进行处理的系统的结构示意图;
图5为根据本发明的运行单元的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在本申请中,使用了以下技术术语,
任务:一个业务逻辑抽象成一个任务,用Task来表示。
业务处理器:处理具体业务逻辑的模块或逻辑单元,包含业务处理线程池,业务处理引擎,业务上下文管理。
接出模块:负责异步业务逻辑的模块,比如和远程系统进行通讯,基于异步通讯框架来实现。
IFuture:是Java API的一个获取异步线程结果的接口,可以基于该接口实现异步结果处理逻辑。
IFutureListener:是Java异步编程的另外一个重要的接口,可以基于该接口实现异步结果监听器。
总线:业务处理器和接出模块之间通过消息进行交互的方式。
核心线程数:如果核心线程池有空闲位置,这是新的任务就会被核心线程池新建一个线程执行,执行完毕后不会销毁线程,线程会进入缓存队列等待再次被运行。
最大线程数:线程池能创建最大的线程数量。如果核心线程池和缓存队列都已经满了,新的任务进来就会创建新的线程来执行。但是数量不能超过最大线程数,否侧会采取拒绝接受任务策略。
缓冲队列深度:缓冲队列用来存放等待被执行的任务,缓冲队列深度指示缓冲队列能容纳的等待被执行的任务(或进程)的数量。
空闲业务线程销毁时间:非核心线程能够空闲的最长时间,超过时间,线程终止。这个参数默认只有在线程数量超过核心线程池大小时才会起作用。只要线程数量不超过核心线程大小,就不会起作用。
图1为根据本发明的基于异步处理机制对业务进行处理的方法的流程图。如图1所示,方法从步骤101处开始。
在步骤101,初始化用于对多个业务进行处理的业务执行线程池,并为所述业务执行线程池设置核心线程数、最大线程数、缓冲队列深度、空闲业务线程销毁时间和拒绝策略。所述核心线程数用于指示所述业务执行线程池中能够运行的核心线程的数量。所述最大线程数用于指示所述业务执行线程池中能够运行的线程的最大数量。所述缓冲队列深度用于指示缓冲队列能容纳的待处理的业务的数量,所述缓冲队列用于容纳处于暂停状态的待处理的业务。空闲业务线程销毁时间用于指示处于空间状态的线程被销毁的时间期限。拒绝策略包括多个拒绝条件,当需要在业务执行线程池中创建线程的业务符合至少一个拒绝条件时,拒绝为业务创建线程。线程池是一种线程使用模式。通常,线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。
在步骤102,当接收到待处理的业务时,根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证,当确定所述待处理的业务通过合法性验证时,则将所述待处理的业务设置为就绪状态。待处理的业务可以是系统内的各种类型的业务、任务或处理,例如,计算业务。根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证包括:确定待处理的业务所需要的计算资源或存储资源是否能够得到业务执行线程池的支持,即业务执行线程池是否允许待处理的业务获取所需要的计算资源或存储资源。例如,当业务执行线程池不允许待处理的业务获取所需要的计算资源或存储资源时,确定所述待处理的业务无法通过合法性验证。当业务执行线程池允许待处理的业务获取所需要的计算资源或存储资源时,确定所述待处理的业务通过合法性验证。将所述待处理的业务设置为就绪状态之后,为所述待处理的业务创建数据处理容器。
在步骤103,当所述业务执行线程池内正在运行的线程数量小于最大线程数时,在业务执行线程池为所述待处理的业务创建主线程。即,当接收到待处理的业务后,确定业务执行线程池内的线程数量是否已经达到最大线程数量。例如,当业务执行线程池内的线程数量已经达到最大线程数量时,不在业务执行线程池为所述待处理的业务创建主线程,并发送拒绝创建主线程的响应消息。当业务执行线程池内的线程数量没有达到最大线程数量时,在业务执行线程池为所述待处理的业务创建主线程。
在步骤104,响应于检测到所述待处理的业务的主线程创建子线程时,确定完成所述子线程所需要的运行时间,当所需要的运行时间大于时间阈值时,将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理。外部处理模块例如是接出模块。所述确定完成所述子线程所需要的运行时间包括:确定所述子线程所涉及的业务量,根据业务量和当前处理资源确定完成所述子线程所需要的运行时间。业务量例如包括计算任务量、数据存储和访问数量。当前处理资源例如包括CPU空闲处理资源、缓存空闲资源、内存空闲资源等。
所述将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理包括:将与所述子线程相关联的运行参数和处理请求发送给位于所述业务执行线程池外部的外部处理模块,所述外部处理模块根据所述处理请求和运行参数运行所述子线程。
在所述外部处理模块根据所述处理请求和运行参数运行所述子线程之后还包括:所述外部处理模块为所述子线程生成监听对象,并将所述监听对象发送给监听器;监听器通过对监听对象进行监听来实现对所述子线程的运行状态进行实时监测。
在步骤105,将所述待处理的业务设置为暂停状态并记录所述待处理的业务的运行上下文信息,并为所述子线程设置监听器以监听所述子线程的运行状态。将所述待处理的业务设置为暂停状态之后,释放为所述待处理的业务所创建的主线程占用的资源,将与所述主线程和数据处理容器相关的数据保存到缓冲队列。将缓冲队列中的与所述主线程和数据处理容器相关的数据作为待处理的业务的运行上下文信息。
在步骤106,当监听器监听到所述子线程的运行状态为运行完成时,根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行,并将所述待处理的业务设置为运行状态。
根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行包括:根据所述子线程的运行结果确定与所述主线程相关联的返回参数;对所述运行上下文信息进行解析以确定与所述主线程和数据处理容器相关的数据;根据与所述主线程和数据处理容器相关的数据,以及返回参数继续运行所述待处理的业务的主线程。
根据与所述主线程和数据处理容器相关的数据,以及返回参数继续运行所述待处理的业务的主线程包括:根据与所述主线程和数据处理容器相关的数据为所述待处理的业务创建新的数据处理容器;基于新的数据处理容器,根据返回参数继续运行所述待处理的业务的主线程。
图2为根据本发明的系统架构的结构示意图。系统包括业务处理器和接出模块(即,外部处理模块)。业务处理器进一步包括业务执行线程池、监听器和上下文管理模块。其中,业务处理器和接出模块可以通过异步方式进行通信。
业务执行线程池是一种线程使用模式。通常,线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。要实现一个业务执行线程池,需要实现线程池所包含的多个元素:核心线程数,最大线程数,缓冲队列深度,空闲业务线程销毁时间,和拒绝策略。
所述核心线程数用于指示所述业务执行线程池中能够运行的核心线程的数量。所述最大线程数用于指示所述业务执行线程池中能够运行的线程的最大数量。所述缓冲队列深度用于指示缓冲队列能容纳的待处理的业务的数量,所述缓冲队列用于容纳处于暂停状态的待处理的业务。空闲业务线程销毁时间用于指示处于空间状态的线程被销毁的时间期限。拒绝策略包括多个拒绝条件,当需要在业务执行线程池中创建线程的业务符合至少一个拒绝条件时,拒绝为业务创建线程。
服务引擎的上下文管理模块包括五个业务逻辑执行基本状态:服务开始执行状态,服务暂停状态,服务恢复状态,服务停止状态,和服务异常运行状态。基于Future接口实现IFuture类,封装异步操作结果。基于 EventListener实现IFutureListener接口,这是最高封装接口,Future监听器,Future完成时触发operationCompleted方法,IFuture中必须可以添加IFutureListener接口;
监听器实现回调逻辑。新建一个业务逻辑任务,并把暂停时上下文中的请求数据处理容器赋值给新的任务的请求数据处理容器,把响应数据处理容器赋值给新的任务的响应数据处理容器。把任务重新提交到线程池中,等待业务继续执行。
接出模块,主要执行子服务逻辑。接出模块主要和其他系统进行通讯,业务处理器和接出模块之间采用总线交互进行异步通讯。根据业务处理引擎逻辑,业务处理过程中和其他系统进行通讯时的步骤都可以发一个消息到接出模块,业务引擎把当前的业务处理逻辑的上下文保存起来,并且业务处理逻辑是暂停状态,业务线程退出。
图3为根据本发明的业务处理方法的流程图。
在步骤301,当接收到待处理的业务时,业务线程池分配线程处理业务。
在步骤302,业务逻辑通过异步交互方式把请求发到接出模块。
在步骤303,处理业务的线程或主线程退出或处于暂停状态,上下文环境保存当前的执行状态。
在步骤304,监听器开始侦听异步返回消息。
在步骤305,监听器收到响应消息,并对响应消息进行解析。
在步骤306,根据上下文信息在上下文环境中取出保存的执行状态,并重新向业务线程池提交任务。
在步骤307,业务线程池分配线程,继续执行待处理的业务的剩下的逻辑或处理。
本申请的关键代码解析:
(1)和接出模块通讯,返回值是一个future对象
(2)给future对象设置监听器
(3)把主线程的状态设置为暂停状态
(4)被唤醒后从上下文中取出状态,重新构建剩下的业务逻辑
(5)唤醒上下文,开始执行新构建的服务
本申请的关键技术点是采用JAVA的异步编程方式,把长时间耗时的服务,称为子服务,逻辑步骤用接出模块来完成,并且把当前主服务使用的线程资源析放出来。本申请的保护点是把主服务调用子服务的方式为异步,主服务的运行线程是业务处理器的,子服务的运行线程是接出模块的。本申请的主服务调用子服务的时候,主服务的暂停会标志为暂停,并且开启子服务的调用监听,等子服务调用完成后,会重新使用主服务的上下文创建新的服务提交到线程池。线程池会优先调用唤醒后的任务。
本申请提供了主服务调用子服务的方式为异步,可以达到不阻塞业务线程池线程从而提高系统的吞吐量的目的。本发明把主服务和子服务的执行逻辑分在不同的技术模块中执行,可以使模块功能单一化,代码可读性强。
本申请不区分业务处理模块和接出模块,都把这两个功能模块放在一个功能模块中实现。业务模块和接出模块运行在不同的进程中。
图4为根据本发明的基于异步处理机制对业务进行处理的系统400的结构示意图。系统400包括:初始化单元401、验证单元402、创建单元403、处理单元404、设置单元405和运行单元406。
初始化单元401,初始化用于对多个业务进行处理的业务执行线程池,并为所述业务执行线程池设置核心线程数、最大线程数、缓冲队列深度、空闲业务线程销毁时间和拒绝策略。所述核心线程数用于指示所述业务执行线程池中能够运行的核心线程的数量。所述最大线程数用于指示所述业务执行线程池中能够运行的线程的最大数量。所述缓冲队列深度用于指示缓冲队列能容纳的待处理的业务的数量,所述缓冲队列用于容纳处于暂停状态的待处理的业务。空闲业务线程销毁时间用于指示处于空间状态的线程被销毁的时间期限。拒绝策略包括多个拒绝条件,当需要在业务执行线程池中创建线程的业务符合至少一个拒绝条件时,拒绝为业务创建线程。线程池是一种线程使用模式。通常,线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。
验证单元402,当接收到待处理的业务时,根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证,当确定所述待处理的业务通过合法性验证时,则将所述待处理的业务设置为就绪状态。待处理的业务可以是系统内的各种类型的业务、任务或处理,例如,计算业务。根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证包括:确定待处理的业务所需要的计算资源或存储资源是否能够得到业务执行线程池的支持,即业务执行线程池是否允许待处理的业务获取所需要的计算资源或存储资源。例如,当业务执行线程池不允许待处理的业务获取所需要的计算资源或存储资源时,确定所述待处理的业务无法通过合法性验证。当业务执行线程池允许待处理的业务获取所需要的计算资源或存储资源时,确定所述待处理的业务通过合法性验证。将所述待处理的业务设置为就绪状态之后,为所述待处理的业务创建数据处理容器。
创建单元403,当所述业务执行线程池内正在运行的线程数量小于最大线程数时,在业务执行线程池为所述待处理的业务创建主线程。即,当接收到待处理的业务后,确定业务执行线程池内的线程数量是否已经达到最大线程数量。例如,当业务执行线程池内的线程数量已经达到最大线程数量时,不在业务执行线程池为所述待处理的业务创建主线程,并发送拒绝创建主线程的响应消息。当业务执行线程池内的线程数量没有达到最大线程数量时,在业务执行线程池为所述待处理的业务创建主线程。
处理单元404,响应于检测到所述待处理的业务的主线程创建子线程时,确定完成所述子线程所需要的运行时间,当所需要的运行时间大于时间阈值时,将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理。外部处理模块例如是接出模块。所述确定完成所述子线程所需要的运行时间包括:确定所述子线程所涉及的业务量,根据业务量和当前处理资源确定完成所述子线程所需要的运行时间。业务量例如包括计算任务量、数据存储和访问数量。当前处理资源例如包括CPU空闲处理资源、缓存空闲资源、内存空闲资源等。
所述将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理包括:将与所述子线程相关联的运行参数和处理请求发送给位于所述业务执行线程池外部的外部处理模块,所述外部处理模块根据所述处理请求和运行参数运行所述子线程。
在所述外部处理模块根据所述处理请求和运行参数运行所述子线程之后还包括:所述外部处理模块为所述子线程生成监听对象,并将所述监听对象发送给监听器;监听器通过对监听对象进行监听来实现对所述子线程的运行状态进行实时监测。
设置单元405,将所述待处理的业务设置为暂停状态并记录所述待处理的业务的运行上下文信息,并为所述子线程设置监听器以监听所述子线程的运行状态。将所述待处理的业务设置为暂停状态之后,释放为所述待处理的业务所创建的主线程占用的资源,将与所述主线程和数据处理容器相关的数据保存到缓冲队列。将缓冲队列中的与所述主线程和数据处理容器相关的数据作为待处理的业务的运行上下文信息。
运行单元406,当监听器监听到所述子线程的运行状态为运行完成时,根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行,并将所述待处理的业务设置为运行状态。
图5为根据本发明的运行单元500的结构示意图。运行单元500包括:确定单元501、解析单元502和运行子单元503。确定单元501根据所述子线程的运行结果确定与所述主线程相关联的返回参数;解析单元502对所述运行上下文信息进行解析以确定与所述主线程和数据处理容器相关的数据;运行子单元 503根据与所述主线程和数据处理容器相关的数据,以及返回参数继续运行所述待处理的业务的主线程。
根据与所述主线程和数据处理容器相关的数据,以及返回参数继续运行所述待处理的业务的主线程包括:根据与所述主线程和数据处理容器相关的数据为所述待处理的业务创建新的数据处理容器;基于新的数据处理容器,根据返回参数继续运行所述待处理的业务的主线程。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种基于异步处理机制对业务进行处理的方法,所述方法包括:
初始化用于对多个业务进行处理的业务执行线程池,并为所述业务执行线程池设置核心线程数、最大线程数、缓冲队列深度、空闲业务线程销毁时间和拒绝策略;
当接收到待处理的业务时,根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证,当确定所述待处理的业务通过合法性验证时,则将所述待处理的业务设置为就绪状态;
当所述业务执行线程池内正在运行的线程数量小于最大线程数时,在业务执行线程池为所述待处理的业务创建主线程;
响应于检测到所述待处理的业务的主线程创建子线程时,确定完成所述子线程所需要的运行时间,当所需要的运行时间大于时间阈值时,将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理;
将所述待处理的业务设置为暂停状态并记录所述待处理的业务的运行上下文信息,并为所述子线程设置监听器以监听所述子线程的运行状态;
当监听器监听到所述子线程的运行状态为运行完成时,根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行,并将所述待处理的业务设置为运行状态。
2.根据权利要求1所述的方法,所述核心线程数用于指示所述业务执行线程池中能够运行的核心线程的数量;
所述最大线程数用于指示所述业务执行线程池中能够运行的线程的最大数量;
所述缓冲队列深度用于指示缓冲队列能容纳的待处理的业务的数量,所述缓冲队列用于容纳处于暂停状态的待处理的业务;
空闲业务线程销毁时间用于指示处于空间状态的线程被销毁的时间期限;
拒绝策略包括多个拒绝条件,当需要在业务执行线程池中创建线程的业务符合至少一个拒绝条件时,拒绝为业务创建线程。
3.根据权利要求1所述的方法,所述确定完成所述子线程所需要的运行时间包括:确定所述子线程所涉及的业务量,根据业务量和当前处理资源确定完成所述子线程所需要的运行时间。
4.根据权利要求1所述的方法,所述将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理包括:
将与所述子线程相关联的运行参数和处理请求发送给位于所述业务执行线程池外部的外部处理模块,
所述外部处理模块根据所述处理请求和运行参数运行所述子线程。
5.根据权利要求4所述的方法,在所述外部处理模块根据所述处理请求和运行参数运行所述子线程之后还包括:
所述外部处理模块为所述子线程生成监听对象,并将所述监听对象发送给监听器;
监听器通过对监听对象进行监听来实现对所述子线程的运行状态进行实时监测。
6.一种基于异步处理机制对业务进行处理的系统,所述系统包括:
初始化单元,初始化用于对多个业务进行处理的业务执行线程池,并为所述业务执行线程池设置核心线程数、最大线程数、缓冲队列深度、空闲业务线程销毁时间和拒绝策略;
验证单元,当接收到待处理的业务时,根据所述业务执行线程池的拒绝策略对待处理的业务进行合法性验证,当确定所述待处理的业务通过合法性验证时,则将所述待处理的业务设置为就绪状态;
创建单元,当所述业务执行线程池内正在运行的线程数量小于最大线程数时,在业务执行线程池为所述待处理的业务创建主线程;
处理单元,响应于检测到所述待处理的业务的主线程创建子线程时,确定完成所述子线程所需要的运行时间,当所需要的运行时间大于时间阈值时,将所述子线程交给位于所述业务执行线程池外部的外部处理模块进行处理;
设置单元,将所述待处理的业务设置为暂停状态并记录所述待处理的业务的运行上下文信息,并为所述子线程设置监听器以监听所述子线程的运行状态;
运行单元,当监听器监听到所述子线程的运行状态为运行完成时,根据所述子线程的运行结果和所述运行上下文信息将所述待处理的业务的主线程恢复运行,并将所述待处理的业务设置为运行状态。
7.根据权利要求6所述的系统,所述核心线程数用于指示所述业务执行线程池中运行的核心线程的数量;
所述最大线程数用于指示所述业务执行线程池中能够运行的线程的最大数量;
所述缓冲队列深度用于指示缓冲队列能容纳的待处理的业务的数量,所述缓冲队列用于容纳处于暂停状态的待处理的业务;
空闲业务线程销毁时间用于指示处于空间状态的线程被销毁的时间期限;
拒绝策略包括多个拒绝条件,当需要在业务执行线程池中创建线程的业务符合至少一个拒绝条件时,拒绝为业务创建线程。
8.根据权利要求6所述的系统,所述处理单元确定所述子线程所涉及的业务量,根据业务量和当前处理资源确定完成所述子线程所需要的运行时间。
9.根据权利要求6所述的系统,所述处理单元将与所述子线程相关联的运行参数和处理请求发送给位于所述业务执行线程池外部的外部处理模块,
所述外部处理模块根据所述处理请求和运行参数运行所述子线程。
10.根据权利要求9所述的系统,
其中所述外部处理模块为所述子线程生成监听对象,并将所述监听对象发送给监听器;
监听器通过对监听对象进行监听来实现对所述子线程的运行状态进行实时监测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010296767.9A CN111427751B (zh) | 2020-04-15 | 2020-04-15 | 基于异步处理机制对业务进行处理的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010296767.9A CN111427751B (zh) | 2020-04-15 | 2020-04-15 | 基于异步处理机制对业务进行处理的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111427751A true CN111427751A (zh) | 2020-07-17 |
CN111427751B CN111427751B (zh) | 2023-08-22 |
Family
ID=71558102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010296767.9A Active CN111427751B (zh) | 2020-04-15 | 2020-04-15 | 基于异步处理机制对业务进行处理的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111427751B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112015559A (zh) * | 2020-09-03 | 2020-12-01 | 深圳虹川科技有限公司 | 基于http协议的异步实时数据更新系统及方法 |
CN112380028A (zh) * | 2020-10-26 | 2021-02-19 | 上汽通用五菱汽车股份有限公司 | 一种异步非阻塞响应式消息处理方法 |
CN112488860A (zh) * | 2020-11-27 | 2021-03-12 | 中国人寿保险股份有限公司 | 一种团单处理方法和系统 |
CN113268352A (zh) * | 2021-06-11 | 2021-08-17 | 中科院软件研究所南京软件技术研究院 | 面向通用服务机器人的多指令响应式任务协同管理方法 |
CN113282954A (zh) * | 2021-05-27 | 2021-08-20 | 北京达佳互联信息技术有限公司 | 基于业务平台的业务执行方法及装置 |
CN114615308A (zh) * | 2020-12-03 | 2022-06-10 | 亚信科技(中国)有限公司 | 基于rpc的异步多线程并发网络通讯方法及装置 |
CN116909718A (zh) * | 2023-09-13 | 2023-10-20 | 北京谷器数据科技有限公司 | 一种基于线程等待和异步报工的并行计算方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103366471A (zh) * | 2013-06-26 | 2013-10-23 | 福建联迪商用设备有限公司 | 一种联机业务并发处理方法、系统及服务器 |
CN104834506A (zh) * | 2015-05-15 | 2015-08-12 | 北京北信源软件股份有限公司 | 一种采用多线程处理业务应用的方法 |
US20160260040A1 (en) * | 2013-11-14 | 2016-09-08 | Huawei Technologies Co., Ltd. | Computer Device, Method, and Apparatus for Scheduling Business Flow |
CN106603708A (zh) * | 2016-12-30 | 2017-04-26 | 中国建设银行股份有限公司 | 一种业务处理方法及装置 |
CN108762913A (zh) * | 2018-03-23 | 2018-11-06 | 阿里巴巴集团控股有限公司 | 服务处理方法及装置 |
CN109992414A (zh) * | 2019-03-12 | 2019-07-09 | 平安普惠企业管理有限公司 | 一种基于线程池的任务处理方法及装置 |
-
2020
- 2020-04-15 CN CN202010296767.9A patent/CN111427751B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103366471A (zh) * | 2013-06-26 | 2013-10-23 | 福建联迪商用设备有限公司 | 一种联机业务并发处理方法、系统及服务器 |
US20160260040A1 (en) * | 2013-11-14 | 2016-09-08 | Huawei Technologies Co., Ltd. | Computer Device, Method, and Apparatus for Scheduling Business Flow |
CN104834506A (zh) * | 2015-05-15 | 2015-08-12 | 北京北信源软件股份有限公司 | 一种采用多线程处理业务应用的方法 |
CN106603708A (zh) * | 2016-12-30 | 2017-04-26 | 中国建设银行股份有限公司 | 一种业务处理方法及装置 |
CN108762913A (zh) * | 2018-03-23 | 2018-11-06 | 阿里巴巴集团控股有限公司 | 服务处理方法及装置 |
CN109992414A (zh) * | 2019-03-12 | 2019-07-09 | 平安普惠企业管理有限公司 | 一种基于线程池的任务处理方法及装置 |
Non-Patent Citations (1)
Title |
---|
何恐;: "Java后台程序设计及UTIL.CONCURRENT包的应用" * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112015559A (zh) * | 2020-09-03 | 2020-12-01 | 深圳虹川科技有限公司 | 基于http协议的异步实时数据更新系统及方法 |
CN112380028A (zh) * | 2020-10-26 | 2021-02-19 | 上汽通用五菱汽车股份有限公司 | 一种异步非阻塞响应式消息处理方法 |
CN112488860A (zh) * | 2020-11-27 | 2021-03-12 | 中国人寿保险股份有限公司 | 一种团单处理方法和系统 |
CN112488860B (zh) * | 2020-11-27 | 2024-04-19 | 中国人寿保险股份有限公司 | 一种团单处理方法和系统 |
CN114615308A (zh) * | 2020-12-03 | 2022-06-10 | 亚信科技(中国)有限公司 | 基于rpc的异步多线程并发网络通讯方法及装置 |
CN113282954A (zh) * | 2021-05-27 | 2021-08-20 | 北京达佳互联信息技术有限公司 | 基于业务平台的业务执行方法及装置 |
CN113282954B (zh) * | 2021-05-27 | 2024-02-23 | 北京达佳互联信息技术有限公司 | 基于业务平台的业务执行方法及装置 |
CN113268352A (zh) * | 2021-06-11 | 2021-08-17 | 中科院软件研究所南京软件技术研究院 | 面向通用服务机器人的多指令响应式任务协同管理方法 |
CN113268352B (zh) * | 2021-06-11 | 2024-03-08 | 中科院软件研究所南京软件技术研究院 | 面向通用服务机器人的多指令响应式任务协同管理方法 |
CN116909718A (zh) * | 2023-09-13 | 2023-10-20 | 北京谷器数据科技有限公司 | 一种基于线程等待和异步报工的并行计算方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111427751B (zh) | 2023-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111427751B (zh) | 基于异步处理机制对业务进行处理的方法及系统 | |
US7900210B2 (en) | Application connector parallelism in enterprise application integration systems | |
WO2015078394A1 (en) | Method and apparatus for scheduling blocking tasks | |
CN108595282A (zh) | 一种高并发消息队列的实现方法 | |
CN110795254A (zh) | 一种基于php处理高并发io的方法 | |
CN107491346A (zh) | 一种应用的任务处理方法、装置及系统 | |
CN108228330B (zh) | 一种串行化的多进程任务调度方法和装置 | |
US20240152395A1 (en) | Resource scheduling method and apparatus, and computing node | |
US7765548B2 (en) | System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock | |
CN111314429B (zh) | 一种网络请求处理系统和方法 | |
CN111984402A (zh) | 一种线程池统一调度监控方法及系统 | |
CN111586140A (zh) | 一种数据交互的方法及服务器 | |
CN111209112A (zh) | 一种异常处理方法及装置 | |
EP3084603B1 (en) | System and method for supporting adaptive busy wait in a computing environment | |
US10523746B2 (en) | Coexistence of a synchronous architecture and an asynchronous architecture in a server | |
CN103823712A (zh) | 一种多cpu虚拟机系统的数据流处理方法和装置 | |
EP2541406A1 (en) | Multi-core processor system, interrupt program, and interrupt method | |
CN111831408A (zh) | 异步任务处理方法、装置、电子设备及介质 | |
WO2023165484A1 (zh) | 一种分布式任务的处理方法、分布式系统及第一设备 | |
CN116257333A (zh) | 分布式任务调度方法、装置和分布式任务调度系统 | |
CN112817933A (zh) | 一种弹性数据库连接池的管理方法及装置 | |
EP3387529A1 (en) | Method and apparatus for time-based scheduling of tasks | |
CN117544584B (zh) | 基于双cpu架构的控制方法、装置、交换机及介质 | |
CN115412500B (zh) | 支持负载均衡策略的异步通信方法、系统、介质及设备 | |
US10419532B2 (en) | Asynchronous connection handling in a multi-threaded server |
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 | ||
CB03 | Change of inventor or designer information |
Inventor after: Liu Ge Inventor after: Li Ruhan Inventor before: Liu Ge Inventor before: Li Ruhan |
|
CB03 | Change of inventor or designer information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |