掌桥专利:专业的专利平台
掌桥专利
首页

基于内存映射文件的跨进程异步任务处理方法及系统

文献发布时间:2023-06-19 11:26:00


基于内存映射文件的跨进程异步任务处理方法及系统

技术领域

本发明涉及计算机通信技术领域,具体地,涉及一种基于内存映射文件的跨进程异步任务处理解决方案。

背景技术

目前解决高并发异步处理任务比较流程的办法为消息队列,一般做法为主交易作为消息生产者将需要做的任务发送到消息队列,由消息消费者异步处理任务,这种方式需要消息中间件支撑,有以下缺点:

1.消息中间件过于庞大,需要单独部署,对整个系统架构带来额外开销,不适合体量较小的应用,且消息中间件本身技术复杂,需要专门的人员对其进行调优,技术成本比较大

2.消息中间件一般消息的发送和接收均需要通过网络通讯,其性能低于本方案采用的内存映射文件读写

3.消息中间件需要开启持久化来保障可靠性,进一步影响了消息发送接收的性能,本方案采用内存映射存储,既满足了持久化可靠性,又不影响读写性能。

专利文献CN109254845A(申请号:201810847512.X)公开了一种应用于分布式通信计算服务端的线性扩展实现方法,该方法充分的将Server主进程的各种功能拆分出来,采用微服务的方式,使每一种功能形成一个进程,进程内再根据不同功能的特点,划分出若干多线程,来处理具体的逻辑任务,进程彼此之间是独立运行的,互不干扰,进程间通信使用需要传送的必要数据作为上下文,进程之间使用Socket进行通信。本发明通过CPU占用率、网络宽带使用情况、用户在线数,提供一个合理的负载均衡算法;通过复用Socket实现了跨进程的通信,隔离了多个用户的同时操作,极大地缓解了单进程模型的压力;通过线程池,充分的利用了硬件上的所有CPU资源,极大地降低了服务器部署成本。

发明内容

针对现有技术中的缺陷,本发明的目的是提供一种基于内存映射文件的跨进程异步任务处理方法及系统。

根据本发明提供的一种基于内存映射文件的跨进程异步任务处理方法,包括:

步骤S1:主交易进程调用异步任务信息记录模块将需要处理的异步任务写入任务存储模块中;

步骤S2:异步任务信息处理模块从任务存储模块中读取待处理的异步任务进行处理。

优选地,所述步骤S1中任务存储模块包括:N个存储组,每个存储组包括任务信息存储文件和任务信息索引文件;

所述任务信息存储文件被格式化成多个存储单元,每个存储单元存储一个任务信息,占用固定的空间;

所述任务信息索引文件记录每个存储单元的状态,组成一个循环链表按顺序存储待处理的任务信息。

优选地,所述步骤S1包括:锁定任务存储模块中一个存储组,查找存储组的任务信息索引文件的循环链表,在待处理单元后面最近的空闲存储单元进行记录,记录后将当前存储单元设置为待处理。

优选地,所述步骤S2包括:在异步任务处理进程中,当前异步任务处理进程与主交易进程运行在同一个服务器中。

优选地,所述步骤S2包括:针对任务存储模块中每一个存储组创建一个线程,当前线程负责顺序读取存储组的任务信息索引文件的循环链表,查找最前面的状态为待处理的任务,任务处理线程池执行最前面的状态为待处理的任务,在处理完成后将任务存储单元状态设置为空闲。

优选地,还包括:异步任务信息记录模块和异步任务信息处理模块均采用内存映射文件技术奖任务存储模块的存储文件映射到内存进行读写。

根据本发明提供的一种基于内存映射文件的跨进程异步任务处理系统,包括:

任务存储模块:主交易进程调用异步任务信息记录模块将需要处理的异步任务写入任务存储模块中;

异步任务信息处理模块:异步任务信息处理模块从任务存储模块中读取待处理的异步任务进行处理。

优选地,所述任务存储模块包括:N个存储组,每个存储组包括任务信息存储文件和任务信息索引文件;

所述任务信息存储文件被格式化成多个存储单元,每个存储单元存储一个任务信息,占用固定的空间;

所述任务信息索引文件记录每个存储单元的状态,组成一个循环链表按顺序存储;

所述任务存储模块包括:锁定任务存储模块中一个存储组,查找存储组的任务信息索引文件的循环链表,在待处理单元后面最近的空闲存储单元进行记录,记录后将当前存储单元设置为待处理。

优选地,所述异步任务信息处理模块包括:在异步任务处理进程中,当前异步任务处理进程与主交易进程运行在同一个服务器中;

所述异步任务信息处理模块包括:针对任务存储模块中每一个存储组创建一个线程,当前线程负责顺序读取存储组的任务信息索引文件的循环链表,查找最前面的状态为待处理的任务,任务处理线程池执行最前面的状态为待处理的任务,在处理完成后将任务存储单元状态设置为空闲。

优选地,还包括:异步任务信息记录模块和异步任务信息处理模块均采用内存映射文件技术奖任务存储模块的存储文件映射到内存进行读写。

与现有技术相比,本发明具有如下的有益效果:

1、本发明通过采用内存映射文件记录待处理任务的机制,实现跨进程任务登记和处理,主交易进程高效登记待处理任务,任务处理进程异步处理任务,既解决了额外附加的操作处理,又不影响主交易的性能,解决了各种高并发交易的附加操作,如日志记录、流量统计、异步消息发送等业务场景,实现了功能解耦。

2、本发明采用内存映射文件记录待处理任务的机制,在任务信息读取写入均通过内存操作,不依赖任何外部设备和环境,其性能远远高于网络、数据库进行跨进程交互,大大降低了部署维护成本。

3、本发明采用内存映射文件记录待处理任务的机制,可以起到任务缓冲及持久化作用,在任务处理进程忙不过来的情况下,不影响主交易登记性能,同时也不会造成待处理任务丢失,而且随着存储文件越多,能够缓冲持久化的任务也越多。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为基于内存映射文件的跨进程异步任务处理系统示意图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

根据本发明提供的一种基于内存映射文件的跨进程异步任务处理方法,包括:

步骤S1:主交易进程调用异步任务信息记录模块将需要处理的异步任务写入任务存储模块中;

具体地,所述步骤S1中任务存储模块包括:N个存储组,每个存储组包括任务信息存储文件和任务信息索引文件;

所述任务信息存储文件被格式化成多个存储单元,每个存储单元存储一个任务信息,占用固定的空间;

所述任务信息索引文件记录每个存储单元的状态,组成一个循环链表按顺序存储待处理的任务信息。

具体地,所述步骤S1包括:锁定任务存储模块中一个存储组,查找存储组的任务信息索引文件的循环链表,在待处理单元后面最近的空闲存储单元进行记录,记录后将当前存储单元设置为待处理。

步骤S2:异步任务信息处理模块从任务存储模块中读取待处理的异步任务进行处理。

具体地,所述步骤S2包括:在异步任务处理进程中,当前异步任务处理进程与主交易进程运行在同一个服务器中。

具体地,所述步骤S2包括:针对任务存储模块中每一个存储组创建一个线程,当前线程负责顺序读取存储组的任务信息索引文件的循环链表,查找最前面的状态为待处理的任务,任务处理线程池执行最前面的状态为待处理的任务,在处理完成后将任务存储单元状态设置为空闲。

具体地,还包括:异步任务信息记录模块和异步任务信息处理模块均采用内存映射文件技术奖任务存储模块的存储文件映射到内存进行读写。

根据本发明提供的一种基于内存映射文件的跨进程异步任务处理系统,包括:

任务存储模块:主交易进程调用异步任务信息记录模块将需要处理的异步任务写入任务存储模块中;

具体地,所述任务存储模块包括:N个存储组,每个存储组包括任务信息存储文件和任务信息索引文件;

所述任务信息存储文件被格式化成多个存储单元,每个存储单元存储一个任务信息,占用固定的空间;

所述任务信息索引文件记录每个存储单元的状态,组成一个循环链表按顺序存储待处理的任务信息;

所述任务存储模块包括:锁定任务存储模块中一个存储组,查找存储组的任务信息索引文件的循环链表,在待处理单元后面最近的空闲存储单元进行记录,记录后将当前存储单元设置为待处理。

异步任务信息处理模块:异步任务信息处理模块从任务存储模块中读取待处理的异步任务进行处理。

具体地,所述异步任务信息处理模块包括:在异步任务处理进程中,当前异步任务处理进程与主交易进程运行在同一个服务器中;

所述异步任务信息处理模块包括:针对任务存储模块中每一个存储组创建一个线程,当前线程负责顺序读取存储组的任务信息索引文件的循环链表,查找最前面的状态为待处理的任务,任务处理线程池执行最前面的状态为待处理的任务,在处理完成后将任务存储单元状态设置为空闲。

具体地,还包括:异步任务信息记录模块和异步任务信息处理模块均采用内存映射文件技术奖任务存储模块的存储文件映射到内存进行读写。

实施例2是实施例1的优选例

在高并发高吞吐应用的交易线程中需要进行一些额外的操作,如登记日志、统计流量等,但我们不希望这些操作影响交易线程本身逻辑处理和性能,本发明主要负责高效可靠的处理这些额外操作,而不影响交易线程本身逻辑处理和性能。

本方案分为两个进程,三个模块,包括:

任务存储模块,负责存储待处理的任务,其包括N个存储组,每个存储组包括两个文件,一个为任务信息存储文件,一个为任务信息索引文件。任务信息存储文件被格式化成多个存储单元,每个存储单元存储一个任务信息,占用固定的空间,如1K,任务信息索引文件记录了每个存储单元的状态(0-空闲,1-待处理),这样就组成了一个循环链表按顺序存储待处理的任务信息。假如一个任务单元占用1K空间,那么一个20M的任务信息存储文件可以存储20M/1K=20480个任务信息,N个存储组就可以支撑N*20480个任务信息的存储,支撑N个线程同时登记任务信息。

异步任务信息记录模块,在主交易进程中运行,负责将需要额外处理的操作封装成一个任务信息,记录到任务存储模块中,其记录规则为:先锁定一个存储组,然后查找存储组的任务信息索引文件的循环链表,找出待处理单位后面最近的空闲存储单元0进行记录,记录后将该存储单元设置为待处理1,为了保障性能,这里采用内存映射文件技术将任务信息存储文件及索引文件映射到内存进行记录,同时保持住下一个空闲单元的指针,避免每次都查找空闲位置。

异步任务信息处理模块,在任务处理进程中运行,该进程与主交易进行运行在同一个服务器中,其针对每一个存储组创建一个线程,该线程负责顺序读取存储组的任务信息索引文件的循环链表,找出最前面的状态为待处理1的任务,然后交给任务处理线程池执行真正的操作(如记录日志、统计流程等),在处理完成后将任务存储单元状态设置为空闲0。为了保障性能,这里采用内存映射文件技术将任务信息存储文件和任务信息索引文件映射到内存进行读取和状态更新。

如图1所示,任务信息索引文件1和任务信息存储文件1组成一个任务存储组,记录器1、读线程1分别归属任务信息记录模块和任务信息处理模块、负责读写对应的任务存储组文件,这样可以组成N个任务存储组及其对应的读写线程,支撑N个业务线程并发记录待处理任务。

按照以上三个模块的逻辑,主交易进程调用异步任务信息记录模块将需要处理的任务写入到任务存储模块中即可,而异步任务信息处理模块负责从任务存储模块读取待处理的任务进行处理,这样往复循环可以实现高效的异步任务处理,既处理了任务,也保障了交易进程的性能。为了保障读写性能,异步任务信息记录模块和异步任务信息处理模块均采用内存映射文件技术将任务存储模块的存储文件映射到内存进行读写。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

相关技术
  • 基于内存映射文件的跨进程异步任务处理方法及系统
  • 基于 kafka 实现稳定的高吞吐量的异步任务处理方法
技术分类

06120112923435