一种基于多核平台的多任务开发模型及其方法与流程

文档序号:16608105发布日期:2019-01-14 21:18阅读:145来源:国知局
一种基于多核平台的多任务开发模型及其方法与流程

本发明涉及海量数据处理领域,尤其涉及一种基于多核平台的多任务开发模型及其方法。



背景技术:

海量数据处理平台通常对系统的处理性能要求较高,需要快速高效的处理网络数据。随着技术的发展,硬件的处理性能越来越高,多核平台以及大容量内存等资源极大地提高到了海量数据处理的效率,而系统处理的瓶颈逐渐向处理软件倾斜。

从软件处理的角度,系统的处理性能往往随着处理流量的增大以及处理流程的增多导致性能快速降低。导致性能降低的原因很多,从系统调用和线程切换开销的角度,其原因包含如下几点:①多线程处理性能并非与线程数量成线性关系,同时线程间高频率切换所带来的开销会导致处理性能的降低;②系统中断0x80以及用户态和内核态的切换存在一定的开销,频繁的系统调用带来的影响尤其明显;③多线程之间进行频繁交互,海量消息收发策略的不完善导致性能降低;④未充分利用多核平台的cpu资源。故需要针对这些瓶颈点,进行相应的性能优化,以实现海量数据的高效处理。



技术实现要素:

本发明的目的就在于针对海量数据处理领域,通过对影响系统处理性能的主要点如线程数量、线程切换、系统调用、线程交互及资源利用等多个方面在用户层面进行优化,提供一种基于多核平台的多任务开发模型及其方法。

本发明的目的技术方案是:

通过任务管理模块提供一种灵活的任务执行模式,根据业务层中具体的任务属性和数量,创建最低数量的线程集合即生产线集合,挂载任务并在不同的cpu逻辑核上执行;通过制定消息的批量收发策略,来提高任务的执行效率,为任务之间的交互高效的服务;通过内存的预先分配和内存池的分级管理,为业务层按需快速高效的分配内存,其中不同内存池的内存分配和释放可以并行进行;同时还提供安全检查机制,便于异常问题的发现;通过以单个系统定时器为基础创建用户层时钟,对定时器进行分级管理,循环扫描,高级向低级不断迁移的方式满足用户对定时器的大量需求;该模型中的业务层与其他支撑模块耦合度低,可以灵活地进行设计,开发复杂度降低。

具体地说:

一、一种基于多核平台的多任务开发模型(简称模型)

包括任务管理模块、消息管理模块、内存管理模块、定时器管理模块和业务层;

其交互关系是:

任务管理模块分别与消息管理模块、内存管理模块和业务层交互;

任务管理模块、定时器管理模块和消息管理模块依次循环交互。

二、基于多核平台的多任务开发方法(简称方法)

本方法包括下列步骤:

①业务层通过任务管理模块提供的接口,对内存管理模块和定时器管理模块进行初始化,即内存池集合的创建以及定时器管理结构的初始化;

同时,业务层根据开发需求制定任务块,并在任务管理模块中进行注册,任务注册时需指定待挂载的生产线及用于生产线绑定的cpu逻辑核编号;

②任务管理模块对所有的生产线进行初始化,同时利用消息管理模块为生产线创建独立的消息队列资源;随后启动所有的生产线,从消息队列获取消费消息供任务消费。同时根据配置保证每条生产线在独立的逻辑核上运行;

③消息管理模块对任务之间的交互进行管理,任务之间均可以通过消息管理模块进行消息的发送,发送的消息将首先装载到目标任务的预备消息容器中,预备容器已满的情况下转变属性为消费容器,从而经步骤②中的生产线进行消费。

不同生产线消费自身消息时可以并行执行,但向某个任务发送消息时,只能有一个任务获取发送权限,其他任务阻塞;

④内存管理模块通过不同大小的内存池集合,为生产线上的所有任务提供内存资源。指定大小的内存池,在同一时间只能有一个任务获得其权限,对其进行操作,其他任务阻塞。对于不同的内存集合之间,则可以并行操作;

⑤定时器模块通过任务管理模块,为所有任务提供定时器创建接口。并对定时器进行分级管理,循环扫描,高级向低级不断迁移的方式,及时的产生超时消息,通过步骤③提供给步骤②进行消费。

本发明具有下列优点和积极效果:

①一致性,多任务流水线生产模式场景下,不同的开发平台均可使用该模型;

②可拓展性,对于可承载的任务数量以及使用的内存资源,可以灵活地进行拓展;

③高效性,可以快速地获取和释放内存资源,在海量数据处理场景下效果更佳;

④安全性,对内存资源的使用提供保护机制,及时抛出异常点;

⑤可复用性,该模型可承载各种不同的业务,除业务层以外,其他部分可以复用,降低开发难度;

⑥灵活性,可以根据任务的繁忙程度,对任务进行灵活合理的规划分组,以最小的线程数担负所有任务。

总之,本发明对影响数据处理性能的因素进行针对性优化,提高程序的处理效率,同时对于不同的业务需求可以快速地进行复用,降低开发难度减少开发周期。

附图说明

图1为本模型的结构方框图;

图中:

10—任务管理模块;

20—消息管理模块;

30—内存管理模块;

40—定时器管理模块;

50—业务层。

图2为任务管理模块10的工作流程图;

图3为消息管理模块20的工作流程图;

图4为内存管理模块30的工作流程图;

图5为定时器管理模块40的工作流程图;

图6为业务层50的工作流程图。

英译汉:

1、cpu:centralprocessingunit,中央处理器。

具体实施方式

以下结合附图和实施例详细说明。

一、模型

1、总体

如图1,本模型包括任务管理模块10、消息管理模块20、内存管理模块30、定时器管理模块40和业务层50;

其交互关系是:

任务管理模块10分别与消息管理模块20、内存管理模块30和业务层50交互;

任务管理模块10、定时器管理模块40和消息管理模块20依次循环交互。

工作机理是:

任务管理模块10和消息管理模块20交互,任务管理模块10承载的各项任务,其相互之间的交互由消息管理模块20负责,任务将通过消息管理模块20发送到目标任务的消息队列中,当任务的消息队列中达到一定数量的消息时,消息管理模块20将消息批量提交给任务管理模块10;

任务管理模块10和业务层50交互,任务管理模块10作为整个模型的中心模块,承载业务层50注册的各种任务;业务层50所需的内存资源、定时器资源均由任务管理模块10间接提供;

任务管理模块10和内存管理模块30交互,内存管理模块30所管理的内存资源,均通过任务管理模块10向其他模块提供内存的申请和释放功能,而非直接向其他模块提供;

任务管理模块10、定时器管理模块40和消息管理模块20依次循环交互,任务管理模块10所承载的任务,利用定时器管理模块40创建定时器,超时时将超时消息发送给消息管理模块20,从而将该消息插入到目标任务的消息队列中,当满足批量处理的要求时,再提交给任务管理模块10管理的任务执行。

2、功能模块

1)任务管理模块10

任务管理模块10为整个模型的中心模块,承载业务层50注册的静态任务或动态任务,并对其进行管理和调度;

具体地说,如图2,任务管理模块10的工作流程如下:

a、开始-100

开始启动任务管理模块10时,需提前进行静态任务的注册和基本的初始化工作,该部分由业务层50完成;

b、整合业务层静态任务-101

业务层50根据任务管理模块10提供的任务注册接口提交任务,任务管理层50根据给定的参数进行分类梳理;

c、生产线初始化-102

任务管理模块10根据整体的任务规划,确定各个生产线的多种重要属性:所挂载的任务数、任务入口、生产线条数和生产线cpu亲和性,完成生产线消息队列的初始化;所述的生产线指线程;

d、生产线执行-103

开启生产线,从自身消息队列中获取消息提供各个任务进行消费,消息类型分为基础消息类型和业务层50自定义消息类型,前者用于任务状态的管理,后者由业务层自定义;

e、监听业务层动态任务-104

业务层50存在提交临时任务的可能,任务管理模块10提供接收该类任务的机制。

2)消息管理模块20

消息管理模块20负责任务之间的交互,通过安全机制不同任务的消息队列可以同时接收其他任务发送的消息,但具体的时刻同一消息队列只能接收唯一发送方的消息,消息管理模块20对消息先进行收集然后批量提交处理。

具体地说,如图3,消息管理模块20的工作流程如下:

a、接收业务层发消息指令-200

业务层任务之间通过消息交互,各生产线维护自身的消息链;

b、获取发消息资源锁-201

多个任务可以同时向某个任务发送消息申请,但只有在获得权限后才能继续执行,未获得权限的任务阻塞;

c、消息预备容器装载消息-202

预备容器存储最新接收的消息,其容量可配置设定;

d、判断检查消息预备容器是否已满-203

否则,释放发消息资源锁-204,即当前获得资源锁的任务将权限转让给其他消息发送方,再跳转到步骤a;

是则,依次为:

消息预备容器转变为消费容器-205,即预备容易已满时转变容器属性为消费属性,该类消息急需处理;

生产线接收消费消-206,即生产线从消费容器中批量接收消息,同时将消费容器改为预备属性;

根据消息类型选择任务消费消息-207,即生产线根据消息的类型选择相应的任务进行处理。

3)内存管理模块30

在用户层面实现内存的预先分配,统一管理,灵活进行拓展,通过任务管理模块10快速满足业务层50的内存资源需求;

具体地说,如图4,内存管理模块30的工作流程如下:

ⅰ、读取内存配置-300

从配置文件中读取各级内存池的大小、页面数、安全间隔、安全检测策略和拓展策略;

ⅱ、内存池初始化-301

根据确定的内存管理参数,创建各级内存池;

ⅲ、内存操作申请-302

接收业务层50的内存资源申请,提供内存资源和回收内存资源,业务层50中多任务可以同时提交申请;

分别为分配内存和释放内存,并行执行;

一、分配内存

子步骤a、确定内存池级别-303,即根据业务层申请的内存大小确定目标内存池;

ⅳ、获取目标内存池权限-305,即同一内存池,同一时刻只能有一个任务获取到内存池操作权限,不同的内存池之间可并行进行;

子步骤b、判断内存池资源检查是否存在资源-306,是则进入子步骤d,否则进入子步骤c;

子步骤c、内存池拓展-307;

子步骤d、分配内存-308;

ⅴ、释放内存池权限-310,即解除对内存池的锁定状态,便于其他内存申请操作执行;再跳转到步骤ⅲ。

二、释放内存

子步骤a、安全检查-304,即业务层释放内存资源时,对内存块进行检查是否存在异常操作;

ⅳ、获取目标内存池权限-305,即同一内存池,同一时刻只能有一个任务获取到内存池操作权限,不同的内存池之间可并行进行;

子步骤b、回收内存-309,即将内存资源释放到内存池中;

ⅴ、释放内存池权限-310,即解除对内存池的锁定状态,便于其他内存申请操作执行;再跳转到步骤ⅲ。

4)定时器管理模块40

通过模型的基础定时器,在用户面创建定时器集合,并进行分级管理,循环扫描,高级定时器向低级定时器不断迁移的方式实现定时器的快速创建及准实时超时。

具体地说,如图5,定时器管理模块40的工作流程如下:

ⅰ、定时器模块初始化-400

以模型定时器为基础创建用户层时钟,初始化定时器管理模块,根据定时器超时长度进行多级别管理,每个级别相邻节点间的时间跨度不一样,最低级节点时间跨度为1s;

ⅱ、分别为:

或定时器申请-401,即接受业务层的定时器申请;

创建定时器-402,即根据业务层申请的超时长度,创建定时器并根据当前的运行时间挂载到相应的定时器链表中,再继续定时器申请-401;

或扫描定时器-403,即根据用户面时钟,对最低级定时器当前节点的定时器链进行逐个扫描,扫描完毕,高级的定时器随着时间的变迁,剩余超时时间逐渐减少,需将更高级的定时器调整到低级定时器链表中,并开始对最低级定时器开始新一轮扫描;

创建超时消息-404,即最低级定时器链表中,被扫描到定时器均为超时定时器,创建业务层的超时消息发送到目标任务的消息队列中,随即进入接收业务层发消息指令(200)过程中;再继续扫描定时器-403。

5)业务层50

业务层10为该模型中最灵活的模块,是模型复用性的最终体现,业务层10的具体实现完全由用户根据自身的需求进行定义、任务及资源的管理交由模型中的其他模块实现,自身只需按照提供的接口执行即可;

具体地说,如图6,业务层50的工作流程如下:

α、初始化-500

业务层为该模型中自主性最大的模块,用户根据自身业务需求制定初始化流程,其中固定部分为通过任务管理模块提供的接口执行读取内存配置(300)、内存池初始化(301)及定时器模块初始化(400);

β、任务注册-501

业务层根据自身的需求制定不同的任务,并调用任务管理模块提供的接口进行任务注册,随即任务管理模块通过整合业务层静态任务(101)和监听业务层

动态任务(104)过程接受业务层任务;

γ、业务层执行-502

业务层根据自身业务需求开展业务,具体业务可由各个任务项完成。

3、本发明的工作机理

业务层50和任务管理模块10交互,任务管理模块10作为整个模型的中心模块,承载业务层50注册的各种任务;业务层50所需的内存资源、定时器资源均由任务管理模块10间接提供;

任务管理模块10和消息管理模块20交互,任务管理模块10承载的各项任务,其相互之间的交互由消息管理模块20负责;任务将通过消息管理模块20发送到目标任务的消息队列中,当队列的消息队列中达到一定数量的消息时,消息管理模块20将消息批量提交给任务管理模块10;

任务管理模块10和内存管理模块30交互,内存管理模块30所管理的内存资源,均通过任务管理模块10向其他模块提供内存的申请和释放功能,而非直接向其他模块提供;

任务管理模块10、定时器管理模块40和消息管理模块20循环交互,任务管理模块10所承载的任务,利用定时器管理模块40创建定时器,超时时将超时消息发送给消息管理模块20,从而将该消息插入到目标任务的消息队列中,当满足批量处理的要求时,再提交给任务管理模块10管理的任务执行。

4、本发明具体举例,如实际的流水线开发程序中有3个任务环节依次为:a、b、c、d,其中任务a、c为繁忙任务,任务b和d为清闲任务,则可以将任务a、c注册到独立的生产线上,即单线程执行单任务,而将任务b、d注册到同一生产线中,即单线程执行多任务,依次降低线程的数量;该方式涉及到3个线程,为3个线程指定单独的逻辑核,使其在各自的逻辑核上快速运行减少切换带来的开销;4个任务均可以通过任务管理模块10快速地申请和释放内存资源和定时器资源;4个任务之间消息的发送,则通过任务管理模块10提供的接口进行,消息的接收和执行由任务管理模块10和消息管理模块20负责。

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