CN114615308A - 基于rpc的异步多线程并发网络通讯方法及装置 - Google Patents
基于rpc的异步多线程并发网络通讯方法及装置 Download PDFInfo
- Publication number
- CN114615308A CN114615308A CN202011412605.3A CN202011412605A CN114615308A CN 114615308 A CN114615308 A CN 114615308A CN 202011412605 A CN202011412605 A CN 202011412605A CN 114615308 A CN114615308 A CN 114615308A
- Authority
- CN
- China
- Prior art keywords
- asynchronous
- thread
- asynchronous task
- network connection
- working
- 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
Links
- 238000004891 communication Methods 0.000 title claims abstract description 67
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000012545 processing Methods 0.000 description 19
- 230000008569 process Effects 0.000 description 18
- 230000006870 function Effects 0.000 description 6
- 230000000903 blocking effect Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请实施例提供了一种基于RPC的异步多线程并发网络通讯方法、装置、电子设备及计算机可读存储介质,涉及并发网络通讯领域。该方法包括:接收业务端基于业务量发送的启动指令;根据启动指令初始化线程池,线程池中包括基于业务量确定的工作线程;当接收到I/O事件时,通过异步任务分配器基于I/O事件创建I/O异步任务,并将I/O异步任务分配至第一工作线程的异步任务队列;根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务。本申请实施例在保证远程网络连接的基础效率和性能的基础上,实现了性能在理论上可线性扩展。
Description
技术领域
本发明涉及并发网络通讯领域,具体涉及一种基于RPC的异步多线程并发网络通讯方法、装置、电子设备及计算机可读存储介质。
背景技术
在并发网络通讯领域,存在多种通讯模型的设计和实现,如基础的Proactor和Reactor模式,以及相对上层的gRpc和Thrift等通用产品化方案。这些通用的模型和产品方案,都是以常规应用场景设计,目的是满足一般性的网络通讯和远程访问需求。
现有的网络通讯模式可以归纳为以下三种模式:单线程多路复用模式,该模式对大量网络连接的水平扩展能力有限;一个线程对应一个Socket连接的模式,该模式线程利用率低,支持的连接数受限于线程数;多线程共享连接抢占式处理模式,该模式的抢占过程性能影响较大并且与线程相关的状态管理实现较为复杂。
另外,该领域中的一些通用模型和通用产品化方案,都是以满足一些常规应用场景为设计目标,许多通用的RPC实现都是支持面向单一服务,并不支持面向服务集群。同时,对于一些特定的细分应用场景,并不能达到该应用场景特定的目标需求,性能低且无法负载均衡。
发明内容
本申请的目的旨在至少能解决上述的技术缺陷之一,特别是通讯模型的性能低且无法负载均衡的技术缺陷。
第一方面,提供了一种基于RPC的异步多线程并发网络通讯方法,该方法包括:
接收业务端基于业务量发送的启动指令;
根据启动指令初始化线程池,线程池中包括基于业务量确定的工作线程;
当接收到I/O事件时,通过异步任务分配器基于I/O事件创建I/O异步任务,并将I/O异步任务分配至第一工作线程的异步任务队列;
根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务。
可选地,根据启动指令初始化线程池,线程池中包括基于业务量确定的第一工作线程,包括:
根据业务量,确定工作线程的线程数量;
根据线程数量,创建工作线程及工作线程的异步任务队列;
启动工作线程。
可选地,在根据启动指令初始化线程池之后,还包括:
根据业务量,确定网络连接的第一连接数量;
根据第一连接数量,通过异步任务分配器创建网络连接异步任务;
通过异步任务分配器将网络连接异步任务分配至第二工作线程的异步任务队列;
通过第二工作线程异步执行从第二工作线程的异步任务队列中获取的网络连接异步任务以建立网络连接;
其中,在异步执行网络连接异步任务时,生成异步回调消息。
可选地,在通过第二工作线程异步执行网络连接异步任务之后,还包括:
当成功建立网络连接时,通过异步任务分配器将网络连接分配给工作线程;
通过异步任务分配器更新网络连接与为网络连接分配的第一工作线程的对应关系。
可选地,将I/O异步任务分配至第一工作线程的异步任务队列之前,还包括:
根据I/O事件确定网络连接;
通过异步任务分配器根据网络连接和对应关系确定第一工作线程,第一工作线程为与网络连接相对应的工作线程。
可选地,根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务包括:
根据远程服务调用协议,通过第一工作线程确定I/O异步任务中的通讯链路数据和业务数据;
当对通讯链路数据进行处理时,通过第一工作线程基于通讯链路数据执行异步操作;
当对业务数据进行处理时,通过第一工作线程基于业务数据执行异步操作;
其中,在执行异步操作时,生成异步回调信息。
可选地,基于RPC的异步多线程并发网络通讯方法还包括:
通过异步回调接口向业务端发送异步回调信息;
接收业务端基于异步回调信息反馈的指令。
可选地,基于RPC的异步多线程并发网络通讯方法还包括:
接收业务端发送的停止指令;
根据停止指令停止接收I/O事件,并通过工作线程关闭网络连接、停止异步执行操作。
可选地,基于RPC的异步多线程并发网络通讯方法,还包括:
当接收到业务端发送的更新网络连接的指令时,根据指令确定网络连接的第二连接数量;
根据第二连接数量,通过异步任务分配器创建新的网络连接异步任务;
通过异步任务分配器将新的网络连接异步任务分配给第二工作线程的异步任务队列;
通过第二工作线程异步执行从第二工作线程的异步任务队列中获取的新的网络连接异步任务以更新网络连接。
第二方面,提供了一种基于RPC的异步多线程并发网络通讯装置,该装置包括:
接收单元,用于接收业务端基于业务量发送的启动指令;
线程池单元,用于根据启动指令初始化线程池,线程池中包括基于业务量确定的工作线程;
异步任务分配单元,包括异步任务分配器,用于在接收到I/O事件时,通过异步任务分配器基于I/O事件创建I/O异步任务,并将I/O异步任务分配至与第一工作线程的异步任务队列;
其中,所述线程池单元包括执行子单元,用于根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务。
可选地,线程池单元还包括初始化子单元,具体用于:
根据业务量,确定工作线程的线程数量;
根据线程数量,创建工作线程及工作线程的异步任务队列;
启动工作线程。
可选地,基于RPC的异步多线程并发网络通讯装置还包括:网络连接单元,用于在根据启动指令初始化线程池之后,根据业务量确定网络连接的第一连接数量;
则异步任务分配单元还用于:
根据第一连接数量,通过异步任务分配器创建网络连接异步任务;
通过异步任务分配器将网络连接异步任务分配至第二工作线程的异步任务队列;
执行子单元还用于:
通过第二工作线程异步执行从第二工作线程的异步任务队列中获取的网络连接异步任务以建立网络连接;
其中,在异步执行网络连接异步任务时,生成异步回调消息。
可选地,异步任务分配单元还用于:
当成功建立网络连接时,通过异步任务分配器将网络连接分配给工作线程;
通过异步任务分配器更新网络连接与为网络连接分配的工作线程的对应关系。
可选地,异步任务分配单元还用于:
根据I/O事件,确定网络连接;
通过异步任务分配器根据网络连接和对应关系确定第一工作线程,第一工作线程为与网络连接相对应的工作线程。
可选地,执行子单元在根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务中具体用于:
根据远程服务调用协议,通过第一工作线程确定I/O异步任务中的通讯链路数据和业务数据;
当对通讯链路数据进行处理时,通过第一工作线程基于通讯链路数据执行异步操作;
当对业务数据进行处理时,通过第一工作线程基于业务数据执行异步操作;
其中,在执行异步操作时,生成异步回调信息。
可选地,基于RPC的异步多线程并发网络通讯装置还包括:
异步回调消息处理单元,用于通过异步回调接口向业务端发送异步回调信息;
则接收单元还用于:
接收业务端基于异步回调信息反馈的指令。
可选地,接收单元还用于:接收业务端发送的停止指令;
执行子单元还用于:根据停止指令停止接收I/O事件,并通过工作线程关闭网络连接、停止异步执行操作。
可选地,接收单元还用于:接收业务端发送的更新网络连接的指令;
网络连接单元还用于:根据更新网络连接的指令确定网络连接的第二连接数量;
异步任务分配单元还用于:
根据第二连接数量,通过异步任务器创建新的网络连接异步任务;
通过异步任务分配器将新的网络连接异步任务分配给第二工作线程的异步任务队列;
执行子单元还用于:通过第二工作线程异步执行从第二工作线程的异步任务队列中获取的新的网络连接异步任务以更新网络连接。
第三方面,提供了一种电子设备,该电子设备包括:
处理器和存储器,存储器存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由所述处理器加载并执行以实现如本申请的第一方面所示的基于RPC的异步多线程并发网络通讯方法对应的操作。
存储器用于存放至少一可执行指令,可执行指令使处理器执行如本申请的第一方面所示的基于RPC的异步多线程并发网络通讯方法对应的操作。
第四方面,提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现本申请第一方面所示的基于RPC的异步多线程并发网络通讯方法。
本申请的实施例采用异步非阻塞通讯,保证了基础效率和性能。集成多I/O线程并发模型,使得I/O资源和任务平均绑定到各个线程,避免因争抢资源带来的性能损耗,实现性能在理论上的可线性扩展。支持面向服务集群的负载均衡访问技术,让服务集群的访问更加便利和高效。基于定制的RPC协议,可实现区分通讯链路数据和业务数据的目的,从而更高效的处理业务。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种基于RPC的异步多线程并发网络通讯方法的流程示意图;
图2为本申请实施例提供的一个基于RPC的异步多线程并发网络通讯应用场景的结构示意图;
图3为本申请实施例提供的一种基于RPC的异步多线程并发网络通讯装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
线程(英文,thtead),被包含在进程之中,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流,俗称单线程。一个进程可以并发多个线程,每条线程并行执行不同的任务,多个并发线程俗称多线程。
计算机程序的执行方式包括两种:同步处理和异步处理。异步处理与同步处理相对,异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少共享变量的数量),减少了死锁的可能,避免了程序阻塞。而同步处理则需阻塞当前线程来等待处理完成。
RPC(remote procedure call),远程过程调用,具体是客户端应用和服务端之间通信协议。在客户端,它所需要的一些功能并不在该应用的实现范围之内,所以应用要向提供这些功能的其他系统寻求帮助,而远程应用通过远程服务暴露这些功能。在远程网络交互上有两种交互方式:一种是RPC模块和服务模块相互独立,服务模块通过RPC提供的接口使用RPC功能,这种服务的实现可能受限于RPC的功能;另一种服务模块内部包含了专用的RPC实现,这个RPC模块是专门为服务端的相关功能优化的,这种方式的RPC模块是面向服务原生的。服务集群是一组具有相同功能逻辑、用于完成相同任务的服务实例。本申请的方案中涉及到了RPC专用协议,就是指客户端和服务端之间的专有的通信协议。
负载均衡,英文名称为Load Balance,其含义就是指将负载进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
一方面,在当前网络通讯的应用场景中,网络连接的数量较低、处理输入输出的消息不能很好的从低负载到高负载转换。另一方面,如何使RPC模型在实现上从原生集成到面向服务集群也是个很大的问题。
本申请提供的一种基于RPC的异步多线程并发网络通讯方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
本申请的实施例中涉及的主体为RPC模块,所涉及的方法均为RPC模块为业务端提供的远程服务调用方法。其中,业务端为客户端接收和处理业务的模块,RPC模块为业务端在处理业务时调用的远程服务模块。
本申请实施例中提供了一种基于RPC的异步多线程并发网络通讯方法,如图1所示,该方法包括:
S101,接收业务端基于业务量发送的启动指令;
具体地,客户端通过业务端在接收业务后,对该业务进行处理,该处理包括确定远程服务调用的业务及其业务量。基于远程服务调用的业务及其业务量,向RPC模块发送启动指令。RPC模块在接收到启动指令后,根据该启动指令确定RPC模块中需创建的工作线程的线程数量和网络连接的第一连接数量。
S102,根据启动指令初始化线程池,线程池中包括基于业务量确定的工作线程;
根据线程数量,为线程池创建相应数量的工作线程。
S103,当接收到I/O事件时,通过异步任务分配器基于I/O事件创建I/O异步任务,并将I/O异步任务分配至第一工作线程的异步任务队列;
底层操作系统监控网络连接上的I/O事件,具体是通过轮询的方式确定与RPC模块相关的网络连接的缓存区中有没有新的数据。在发现缓存区有新的数据之后,发送关于该缓存区中新的数据的I/O事件的通知给RPC模块。RPC模块在接收到I/O事件后,需要根据其做进一步的处理。RPC模块获取缓存区的数据,调用异步任务分配器根据I/O事件创建I/O异步任务,将I/O异步任务分配至第一工作线程的异步任务队列上。
其中,该新的数据是根据远程服务调用协议生成的数据。在异步任务分配器根据该I/O事件创建的I/O异步任务时,I/O异步任务中包括的数据体也是遵循远程服务调用协议。
应理解,在该实施例中,第一工作线程为创建的工作线程中处理I/O事件的异步任务的工作线程。
S104,根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务。
基于业务量确定工作线程的线程数量和网络连接的第一连接数量,实现了性能在理论上可线性扩展。通过异步任务分配器根据I/O事件创建I/O异步任务,并分配给第一工作线程的异步任务队列,避免第一工作线程去因争抢任务而浪费资源,实现了负载均衡。
可选地,本申请实施例的另一种实施方式,根据启动指令初始化线程池,线程池中包括基于业务量确定的工作线程包括:
根据业务量,确定工作线程的线程数量;根据线程数量,创建工作线程及工作线程的异步任务队列;启动工作线程。
RPC模块在接收到启动指令后,根据业务量确定处理业务所需的工作线程的线程数量。在初始化线程池时,可创建相应线程数量的工作线程。
其中,创建工作线程时,包括为每个工作线程配置异步任务队列。该异步任务队列用于获取异步任务。
可选地,本申请实施例的另一种实施方式,在根据启动指令初始化线程池之后,还包括建立客户端与服务端之间的网络连接。具体地:
首先,根据业务量确定网络连接的第一连接数量;
具体而言,第一连接数量为基于业务量确定的初始连接数。
其次,根据第一连接数量,通过异步任务分配器创建网络连接异步任务;
并通过异步任务分配器将连接异步任务分配给第二工作线程的异步任务队列;
其中,第二工作线程,属于第一工作线程中的一种,比其它第一工作线程多处理一项异步任务。一般的,第一工作线程处理I/O异步任务,而第二工作除此之外,还处理网络连接异步任务。具体而言,第二工作线程是在线程池初始化时,创建的第一个工作线程。
其中,网络连接异步任务包括:
(1)发起网络连接请求;(2)建立网络连接;(3)调用异步任务分配器,将网络连接分配给其他的工作线程。
通过第二工作线程异步执行网络连接异步任务;
其中,在异步执行网络连接异步任务时,产生异步回调消息。
第一工作线程在异步执行I/O异步任务或第二工作线程在异步执行网络连接异步任务时,均会产生异步回调信息。RPC模块中设置有统一的异步回调接口,负责处理该异步回调信息。具体地,通过调用该异步回调接口发送异步回调消息给业务端。业务端在接收异步回调消息后,基于该异步回调信息发送反馈的指令。
例如,下载一个指定的文件。业务端发送启动指令给RPC模块,该启动指令中包含了文件的名称、大小及其他相关信息。RPC模块向服务端发送请求下载文件的请求消息,后收到服务端的确定发送和开始发送的消息。底层操作系统在发现网络连接的缓存区有新的数据,发送关于新的数据的通知,即I/O事件给RPC模块。RPC模块通过异步任务分配器基于I/O事件创建接收文件的异步任务,并分配给与网络连接相对应的第一工作线程的异步任务队列。第一工作线程获取到该异步任务后,异步执行。若在异步执行过程中下载失败,通过调用异步回调接口向业务端发送“下载指定文件失败”的回调消息。业务端基于业务需求,发送重新下载指定文件的启动指令,或者不做任何处理,接着分派下一个需远程服务调用的业务给RPC模块处理。
可选地,在通过第二工作线程异步执行网络连接异步任务之后,还包括:
当成功建立网络连接时,通过异步任务分配器将创建成功的网络连接分配给线程池中的工作线程;通过所述异步任务分配器更新所述网络连接与为所述网络连接分配的工作线程的对应关系。
具体而言,在第二工作线程执行网络连接异步任务时,存在执行失败的情形,该情形会导致实际创建数可能小于或者等于初始创建数,即成功连接数量小于或者等于第一连接数量。此外,还基于业务量设置了最小连接数,在当前所有的实际的网络连接数不满足最小连接数的情形下,RPC无法继续启动接下来的操作。
例如,在线程池中存在工作线程A和工作线程B,其中,第二工作线程对应工作线程A,基于业务量设置第一连接数量为4个,设置最小连接数为2。
当创建成功的网络连接的数量为4个时,异步任务分配器将4个网络连接平均分配给工作线程A和工作线程B。
当创建成功的网络连接的数量为3个时,异步任务分配器可能将2个网络连接分配给工作线程A,也可能将1个分配给工作线程A,总之,不会将3个网络连接全部分配给工作线程A。
当创建成功的网络连接的数量为2个时,分配工作线程A和工作线程B各一个网络连接。
当创建成功的网络连接的数量为1个时,由于成功连接的数量小于最小连接数。RPC模块会再次启动创建新的网络连接的任务,直至实际的网络连接的个数为至少2个时,RPC模块才启动接下来的操作,即开始接收I/O事件。
进一步地,本申请的实施例是基于负载均衡的理念,通过异步任务分配器执行网络连接的分配。
RPC模块在启动时,创建工作线程和网络连接的对应关系表,该表处于缺省状态,并存储于在RPC模块的公共缓存区。在第二工作线程完成网络连接的建立任务后,通过异步任务分配器将该成功连接数量的网络连接分配给所有的工作线程。此外,通过异步任务分配器把网络连接和与网络连接所分配的工作线程之间的对应关系更新至对应关系表中。
例如,网络连接通过套接字标识,第一工作线程通过线程ID标识,对应关系表中的信息具体为套接字和线程ID相对应。其中,一个线程ID所对应的套接字位置可以为空,也可以有一个或者多个套接字。每个第一工作线程对应一个唯一的线程ID。
基于业务量确定工作线程的线程数量和网络连接的第一连接数量,实现了性能在理论上可线性扩展。通过异步任务分配器根据I/O事件创建I/O异步任务,并分配给第一工作线程的异步任务队列,避免第一工作线程去因争抢任务而浪费资源,实现了负载均衡。
可选地,将I/O异步任务分配至第一工作线程的异步任务队列之前,还包括:
根据I/O事件确定网络连接;通过异步任务分配器根据网络连接确定第一工作线程,第一工作线程为与网络连接相对应的工作线程。
可选地,本申请实施例的另一种实施方式,根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务包括:
远程服务调用协议为RPC协议,是客户端和服务端之间的接收和发送数据的协议。其中包括,将I/O异步任务中的数据区分为通讯链路数据和业务数据。
当对通讯链路数据进行处理时,通过第一工作线程基于通讯链路数据执行异步操作;
例如,当需要执行安全验证、超时设置、服务路由、多租户、加密和压缩扩展等基于通讯链路数据的操作时,那么,仅需解析出通讯链路数据。通常,通讯链路数据的格式和大小是固定的,其解析和处理的过程相对统一。
当对业务数据进行处理时,通过第一工作线程基于业务数据执行异步操作;
通常,不同的业务其对应的发送和接收的消息的格式是不同的,业务与业务之间也存在业务量差距,这就造成了基于业务数据的异步执行过程复杂度各有不同,并不统一。
其中,在执行异步操作时,产生异步回调信息。
设计使用定制的专用RPC协议,支持区分通讯链路需要的数据字段与业务数据,可使第一工作线程直接根据业务需求去获取相关数据并处理,而无需解析异步任务中的全部数据。
可选地,本申请实施例的另一种实施方式,在业务端向RPC模块发送停止指令之后,包括:
根据停止指令停止接收I/O事件,并通过工作线程关闭网络连接、停止异步执行操作。
具体地,当接收到停止指令时,RPC模块将执行以下操作:
(1)RPC模块停止接收I/O事件;
(2)通过工作线程关闭已经连接的网络连接;
(3)通过工作线程暂停线程上任务的执行,工作线程处于挂起状态。
可选地,本申请实施例的另一种实施方式,RPC模块在远程服务调用过程中存在网络连接的数量不能匹配业务量,此时需创建新的网络连接以匹配业务量。具体地:
当接收业务端发送的更新网络连接的指令时,根据该指令确定客户端和服务端之间的新的网络连接的个数;
业务端设置一个检查RPC模块中网络连接的数量的机制,在网络连接数量不符合业务需求的情况下,向RPC模块发送更新网络连接的指令,该更新网络连接的指令中包含要创建的新的网络连接的个数,即第二连接数量。
根据第二连接数量,通过异步任务分配器创建新的网络连接异步任务;
通过异步任务分配器将新的网络连接异步任务分配给第二工作线程的异步任务队列;
通过第二工作线程从其异步任务队列中获取新的网络连接异步任务,并异步执行网络连接异步任务。
此外,当成功建立网络连接时,通过异步任务分配器将新的网络连接分配至线程池中的工作线程上,并根据该分配更新对应关系表。
具体而言,根据业务量设置网络连接的数量限制,包括设置最大连接数和最小连接数。例如,当实际连接的网络连接的数量小于最小连接数时,需根据上述更新网络连接的指令增加新的网络连接,以满足业务需求。或者,在后续业务执行过程中,可能需要扩大网络连接数,也需要根据上述更新网络连接的指令增加新的网络连接,以满足业务需求。
例如,在上述线程池中,工作线程A和工作线程B各自分配了2个网络连接。但是在执行业务过程中,分配给工作线程B的其中一个网络连接断开连接了,而此时,业务端基于业务量发送需创建最大的连接数为6个的更新网络连接的指令。RPC模块根据更新网络连接的指令将线程池中的网络连接的总数提高到6个。最后的状态是,工作线程A所分配的网络连接为3个,工作线程B所分配的网络连接数为3个。网络连接的建立和分配过程已在上述实施例中有详细说明,在此不再赘述。
基于业务量确定网络连接的连接数并随时对其更新,实现了性能在理论上可线性扩展。通过异步任务分配器将建立成功的网路连接分配给线程池中的工作线程,实现了负载均衡。
可选地,本申请实施例的另一种实施方式,具体实现一个代码类AsyncRpcService,该AsyncRpcService包括如图2中所示的异步任务分配器、异步I/O线程池和异步回调接口。该AsyncRpcService类具体包括:
异步线程池;启动接口;
通过启动接口接收启动操作,初始化线程池。其初始化线程池具体为创建异步I/O线程,并未第一工作线程配置异步任务队列。启动异步I/O线程。
其中,异步I/O线程为一种基于非阻塞Socket/Poll/EPoll技术、负责网络连接的建立与关闭、基于专用RPC协议消息的接收与发送的多路复用I/O模型线程,也可称为工作线程。
建立网络连接接口;
通过异步I/O线程建立网络连接。
服务监听接口;
在网络连接创建完成并被分配至异步I/O线程后,通过异步I/O线程监听Socket并接收新的连接数据。
消息异步发送和接收接口;
将消息异步发送和接收封装成对应的异步任务,发送并通知相关网络连接所绑定的异步I/O线程,进行所需的异步I/O线程。
停止接口;
在接收停止通知消息后,发送通知给异步I/O线程,关闭Socket端口接听、关闭所有网络连接、停止所有异步I/O线程的异步执行操作。
本申请的实施例采用异步非阻塞通讯,保证了基础效率和性能。集成多I/O线程并发模型,使得I/O资源和任务平均绑定到各个线程,避免因争抢资源带来的性能损耗,实现性能在理论上的可线性扩展。支持面向服务集群的负载均衡访问技术,让服务集群的访问更加便利和高效。基于定制的RPC协议,可实现区分通讯链路数据和业务数据的目的,从而更高效的处理业务。
本申请实施例提供了一种基于RPC的异步多线程并发网络通讯装置,如图3所示,该基于RPC的异步多线程并发网络通讯装置20可以包括:
接收单元201,用于接收业务端基于业务量发送的启动指令;
线程池单元204,用于根据启动指令初始化线程池,线程池中包括基于业务量确定的工作线程;
异步任务分配单元203,包括异步任务分配器,用于在接收到I/O事件时,通过异步任务分配器基于I/O事件创建I/O异步任务,并将I/O异步任务分配至与第一工作线程的异步任务队列;
其中,所述线程池单元204包括执行子单元2042,用于根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务。
可选地,线程池单元204还包括初始化子单元2041,具体用于:
根据业务量,确定第一工作线程的线程数量;
根据线程数量,创建第一工作线程及第一工作线程的异步任务队列;
启动第一工作线程。
可选地,基于RPC的异步多线程并发网络通讯装置还包括:
网络连接单元202,用于在根据启动指令初始化线程池之后,根据业务量确定网络连接的第一连接数量;
则异步任务分配单元203还用于:
根据第一连接数量,通过异步任务分配器创建网络连接异步任务;
通过异步任务分配器将网络连接异步任务分配至第二工作线程的异步任务队列;
执行子单元2042,还用于通过第二工作线程异步执行从第二工作线程的异步任务队列中获取的网络连接异步任务以建立网络连接;
其中,在异步执行网络连接异步任务时,生成异步回调消息。
可选地,异步任务分配单元203还用于:
当成功建立网络连接时,通过异步任务分配器将网络连接分配给线程池中的工作线程;
通过异步任务分配器更新网络连接与为其分配的第一工作线程的对应关系。
可选地,异步任务分配单元203还用于:
根据I/O事件,确定网络连接;
通过异步任务分配器根据网络连接确定第一工作线程,第一工作线程为与网络连接相对应的工作线程。
可选地,执行子单元2042在根据远程服务调用协议,通过第一工作线程异步执行从第一工作线程的异步任务队列中获取的I/O异步任务中具体用于:
根据远程服务调用协议,通过第一工作线程确定I/O异步任务中的通讯链路数据和业务数据;
当对通讯链路数据进行处理时,通过第一工作线程基于通讯链路数据执行异步操作;
当对业务数据进行处理时,通过第一工作线程基于业务数据执行异步操作;
其中,在执行异步操作时,生成异步回调信息。
可选地,基于RPC的异步多线程并发网络通讯装置还包括:
异步回调消息处理单元205,用于通过异步回调接口向业务端发送异步回调信息。
则接收单元201,还用于接收业务端基于异步回调信息反馈的指令。
可选地,接收单元201,还用于接收业务端发送的停止指令;
执行子单元2042还用于:
根据停止指令停止接收I/O事件,并通过工作线程关闭网络连接、停止异步执行操作。
可选地,接收单元201,还用于接收业务端发送的更新网络连接的指令;
网络连接单元202还用于:根据更新网络连接的指令确定网络连接的第二连接数量。
异步任务分配单元203还用于:
根据第二连接数量,通过异步任务器创建新的网络连接异步任务;
通过异步任务分配器将新的网络连接异步任务分配给第二工作线程的异步任务队列;
执行子单元2042还用于:
通过第二工作线程异步执行从第二工作线程的异步任务队列中获取的新的网络连接异步任务以更新网络连接。
根据本申请的一个或多个实施例,提供了一种电子设备,该电子设备包括:
处理器和存储器,该存储器存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现如本申请的一个或多个实施例中任一可选的实现方式中所示的方法。
根据本申请的一个或多个实施例,提供了一种计算机可读介质,该计算机可读介质用于存储计算机指令、程序、代码集或指令集,当其在计算机上运行时,使得计算机执行如本申请的一个或多个实施例中任一可选的实现方式中所示的方法。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本申请的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
Claims (12)
1.一种基于RPC的异步多线程并发网络通讯方法,其特征在于,包括:
接收业务端基于业务量发送的启动指令;
根据所述启动指令初始化线程池,所述线程池中包括基于所述业务量确定的工作线程;
当接收到I/O事件时,通过异步任务分配器基于所述I/O事件创建I/O异步任务,并将所述I/O异步任务分配至第一工作线程的异步任务队列;
根据远程服务调用协议,通过所述第一工作线程异步执行从所述第一工作线程的异步任务队列中获取的所述I/O异步任务。
2.根据权利要求1所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,所述根据所述启动指令初始化线程池,所述线程池中包括基于所述业务量确定的工作线程,包括:
根据所述业务量确定所述工作线程的线程数量;
根据所述线程数量,创建所述工作线程及所述工作线程的异步任务队列;
启动所述工作线程。
3.根据权利要求1所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,在根据所述启动指令初始化线程池之后,还包括:
根据所述业务量确定网络连接的第一连接数量;
根据所述第一连接数量,通过所述异步任务分配器创建网络连接异步任务;
通过所述异步任务分配器将所述网络连接异步任务分配至第二工作线程的异步任务队列;
通过所述第二工作线程异步执行从所述第二工作线程的异步任务队列中获取的所述网络连接异步任务以建立所述网络连接;
其中,在异步执行所述网络连接异步任务时,生成异步回调消息。
4.根据权利要求3所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,在通过所述第二工作线程异步执行所述网络连接异步任务之后,还包括:
当成功建立所述网络连接时,通过所述异步任务分配器将所述网络连接分配给所述工作线程;
通过所述异步任务分配器更新所述网络连接与为所述网络连接分配的工作线程的对应关系。
5.根据权利要求4所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,所述将所述I/O异步任务分配至第一工作线程的异步任务队列之前,还包括:
根据所述I/O事件,确定所述网络连接;
通过所述异步任务分配器根据所述网络连接和所述对应关系确定所述第一工作线程,所述第一工作线程为与所述网络连接相对应的工作线程。
6.根据权利要求1所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,根据远程服务调用协议,通过所述第一工作线程异步执行从所述第一工作线程的异步任务队列中获取的所述I/O异步任务,包括:
根据所述远程服务调用协议,通过所述第一工作线程确定所述I/O异步任务中的通讯链路数据和业务数据;
当对所述通讯链路数据进行处理时,通过所述第一工作线程基于所述通讯链路数据执行异步操作;
当对所述业务数据进行处理时,通过所述第一工作线程基于所述业务数据执行异步操作;
其中,在所述执行异步操作时,生成异步回调信息。
7.根据权利要求3~6中任一所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,还包括:
通过异步回调接口向所述业务端发送所述异步回调信息;
接收所述业务端基于所述异步回调信息反馈的指令。
8.根据权利要求3~5任一所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,还包括:
当接收到所述业务端发送的停止指令时,根据所述停止指令停止接收所述I/O事件,并通过所述工作线程关闭所述网络连接、停止异步执行操作。
9.根据权利要求3~5任一所述的基于RPC的异步多线程并发网络通讯方法,其特征在于,还包括:
当接收到所述业务端发送的更新网络连接的指令时,根据所述指令确定所述网络连接的第二连接数量;
根据所述第二连接数量,通过所述异步任务分配器创建新的网络连接异步任务;
通过所述异步任务分配器将所述新的网络连接异步任务分配给所述第二工作线程的异步任务队列;
通过所述第二工作线程异步执行从所述第二工作线程的异步任务队列中获取的所述新的网络连接异步任务以更新所述网络连接。
10.一种基于RPC的异步多线程并发网络通讯装置,其特征在于,包括:
接收单元,用于接收业务端基于业务量发送的启动指令;
线程池单元,用于根据所述启动指令初始化线程池,所述线程池中包括基于所述业务量确定的工作线程;
异步任务分配单元,包括异步任务分配器,用于在接收到I/O事件时,通过所述异步任务分配器基于所述I/O事件创建I/O异步任务,并将所述I/O异步任务分配至第一工作线程的异步任务队列;
其中,所述线程池单元还包括执行子单元,用于根据远程服务调用协议,通过所述第一工作线程异步执行从所述第一工作线程的异步任务队列中获取的所述I/O异步任务。
11.一种电子设备,其特征在于,所述电子设备包括:
处理器和存储器,所述存储器存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1~9任一项所述的方法。
12.一种计算机可读介质,其特征在于,所述计算机可读介质用于存储计算机指令、程序、代码集或指令集,当其在计算机上运行时,使得计算机执行如权利要求1~9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011412605.3A CN114615308A (zh) | 2020-12-03 | 2020-12-03 | 基于rpc的异步多线程并发网络通讯方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011412605.3A CN114615308A (zh) | 2020-12-03 | 2020-12-03 | 基于rpc的异步多线程并发网络通讯方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114615308A true CN114615308A (zh) | 2022-06-10 |
Family
ID=81856376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011412605.3A Pending CN114615308A (zh) | 2020-12-03 | 2020-12-03 | 基于rpc的异步多线程并发网络通讯方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114615308A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115827121A (zh) * | 2023-01-16 | 2023-03-21 | 南京国睿信维软件有限公司 | 基于图元素的异步仿真执行引擎系统及方法 |
CN115866035A (zh) * | 2022-11-30 | 2023-03-28 | 广东舜势测控设备有限公司 | 多线程数据高速推送方法、系统、控制器及存储介质 |
CN116074357A (zh) * | 2023-04-06 | 2023-05-05 | 四川九通智路科技有限公司 | 基于物联网隧道照明系统数据可视化监测分析控制平台 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102594891A (zh) * | 2012-02-17 | 2012-07-18 | 中国科学院计算技术研究所 | 用于处理远程过程调用请求的方法及系统 |
CN107329838A (zh) * | 2017-05-23 | 2017-11-07 | 努比亚技术有限公司 | 一种业务交互方法、终端和计算机可读存储介质 |
CN108055255A (zh) * | 2017-12-07 | 2018-05-18 | 华东师范大学 | 一种事件库、可扩展数据管理系统及其管理方法 |
CN109582455A (zh) * | 2018-12-03 | 2019-04-05 | 恒生电子股份有限公司 | 多线程任务处理方法、装置及存储介质 |
CN111427751A (zh) * | 2020-04-15 | 2020-07-17 | 赞同科技股份有限公司 | 基于异步处理机制对业务进行处理的方法及系统 |
CN111752696A (zh) * | 2020-06-25 | 2020-10-09 | 武汉众邦银行股份有限公司 | 一种基于rpc及线程锁的分布式定时任务调度方法 |
-
2020
- 2020-12-03 CN CN202011412605.3A patent/CN114615308A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102594891A (zh) * | 2012-02-17 | 2012-07-18 | 中国科学院计算技术研究所 | 用于处理远程过程调用请求的方法及系统 |
CN107329838A (zh) * | 2017-05-23 | 2017-11-07 | 努比亚技术有限公司 | 一种业务交互方法、终端和计算机可读存储介质 |
CN108055255A (zh) * | 2017-12-07 | 2018-05-18 | 华东师范大学 | 一种事件库、可扩展数据管理系统及其管理方法 |
CN109582455A (zh) * | 2018-12-03 | 2019-04-05 | 恒生电子股份有限公司 | 多线程任务处理方法、装置及存储介质 |
CN111427751A (zh) * | 2020-04-15 | 2020-07-17 | 赞同科技股份有限公司 | 基于异步处理机制对业务进行处理的方法及系统 |
CN111752696A (zh) * | 2020-06-25 | 2020-10-09 | 武汉众邦银行股份有限公司 | 一种基于rpc及线程锁的分布式定时任务调度方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115866035A (zh) * | 2022-11-30 | 2023-03-28 | 广东舜势测控设备有限公司 | 多线程数据高速推送方法、系统、控制器及存储介质 |
CN115827121A (zh) * | 2023-01-16 | 2023-03-21 | 南京国睿信维软件有限公司 | 基于图元素的异步仿真执行引擎系统及方法 |
CN115827121B (zh) * | 2023-01-16 | 2023-05-16 | 南京国睿信维软件有限公司 | 基于图元素的异步仿真执行引擎系统及方法 |
CN116074357A (zh) * | 2023-04-06 | 2023-05-05 | 四川九通智路科技有限公司 | 基于物联网隧道照明系统数据可视化监测分析控制平台 |
CN116074357B (zh) * | 2023-04-06 | 2023-06-20 | 四川九通智路科技有限公司 | 基于物联网隧道照明系统数据可视化监测分析控制平台 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11809900B2 (en) | Method and system for migration of containers in a container orchestration platform between compute nodes | |
CN114615308A (zh) | 基于rpc的异步多线程并发网络通讯方法及装置 | |
CN105472042B (zh) | Web端控制的消息中间件系统及其数据传送方法 | |
US5802293A (en) | Integrated plant environment utilizing an advanced program-to-program server enabling communications between programs running in different computing environments | |
US7536688B2 (en) | Segmented virtual machine | |
US9323591B2 (en) | Listening for externally initiated requests | |
CN104579792A (zh) | 多适配方式实现多种类型虚拟资源集中管理架构及方法 | |
CN101453404A (zh) | 一种实现负载均衡的方法及装置 | |
CN113032166B (zh) | 核间通信的方法、处理器、核间通信系统及计算机可读存储介质 | |
CN111414241A (zh) | 批量数据处理方法、装置、系统、计算机设备及计算机可读存储介质 | |
CN111124640A (zh) | 任务分配方法及系统、存储介质、电子装置 | |
CN110365786B (zh) | 作业处理系统、异步作业调度方法和计算机设备 | |
CN110618821A (zh) | 基于Docker的容器集群系统及快速搭建方法 | |
CN110825455A (zh) | 一种应用程序运行方法、装置和系统 | |
CN106657195B (zh) | 任务处理方法和中继设备 | |
CN112099930A (zh) | 一种量子计算机集群分布式队列调度方法 | |
CN109634749B (zh) | 一种分布式统一调度方法及设备 | |
CN115361382A (zh) | 基于数据群组的数据处理方法、装置、设备和存储介质 | |
CN115225482A (zh) | 一种基于Kubernetes进行Pod容器网络配置的方法及装置 | |
CN114237858A (zh) | 一种基于多集群网络的任务调度方法及系统 | |
CN102681881A (zh) | 跨机调度方法及其系统 | |
CN114745377B (zh) | 边缘云集群服务系统及实现方法 | |
CN115811549B (zh) | 支持混合异构运行时的云边资源管理调度方法及系统 | |
JPH06243077A (ja) | 分散トランザクション処理方式 | |
KR100442599B1 (ko) | 교환 시스템에서 워크스테이션의 분산 객체를 이용한메시지 처리 장치 및 방법 |
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 |