公开/公告号CN112732404A
专利类型发明专利
公开/公告日2021-04-30
原文格式PDF
申请/专利权人 湖南同有飞骥科技有限公司;
申请/专利号CN202110026009.X
申请日2021-01-08
分类号G06F9/455(20060101);G06F9/48(20060101);G06F9/50(20060101);G06F8/41(20180101);
代理机构11303 北京方韬法业专利代理事务所(普通合伙);
代理人党小林
地址 410000 湖南省长沙市长沙高新开发区尖山路39号长沙中电软件园有限公司总部大楼G0552室
入库时间 2023-06-19 10:48:02
技术领域
本发明涉及并行处理技术领域,特别是涉及一种基于Lua协程的程序并发IO优化方法及系统。
背景技术
互联网与改良数据发展的今天,并行处理大量数据已成为服务器的日常基本场景,基于此,服务器对于并发IO的处理能力已成为评判业务性能的重要指标。
对于并发IO的需求,传统的两类解决方案分别为基于异步IO的回调方案和基于多进程(线程)的并行方案。目前业界也诞生了一些新的解决方案,有各自的侧重优势,如gevent、go-routine等。
对于基于异步IO的回调方案(如select、epoll),回调的形式切断了连续功能代码上下文,导致当代码规模变大后软件开发和维护变得困难,开发效率较低。
对于基于多进程(线程)的并行方案,存在系统资源占用大(内存占用、CPU上下文切换)、并发数上限较低、并行资源需要进行同步控制加锁的问题。
对于genvent,虽然借助greenlet协程实现了并发IO,没有系统级线程的切换开销,并且开发效率极高,但是greenlet协程本质是对python原生堆栈的一种补充实现,内存占用仍然较大。
对于go-routine,性能较高,但go的一些设计思想和特点(如编译型、静态链接、自带GC),进而出现的体积大、占用资源较多,决定了其设计适配的仍然是大型高端服务器通用应用层场景。
发明内容
本发明要解决的技术问题是提供一种基于Lua协程的程序并发IO优化方法及系统,能够实现一种同时满足高并发、可维护性、可扩展性好的并发IO优化方案。
为解决上述技术问题,本发明提供了一种基于Lua协程的程序并发IO优化方法,所述方法包括:当业务层需要执行IO操作时,运行在业务层的协程通过中间接口向IO事件循环提交IO监听请求;IO事件循环等待与IO监听请求对应的IO句柄就绪后,调用该IO句柄执行相应的IO操作,且所述IO操作由业务层的Lua代码执行。
在一些实施方式中,运行在业务层的协程由Lua语言编写。
在一些实施方式中,还包括:IO事件循环发现监听的IO句柄就绪,则重入IO句柄对应的协程,继续执行业务层逻辑代码。
在一些实施方式中,IO事件循环及IO句柄运行在核心调度层。
在一些实施方式中,IO事件循环及IO句柄由C语言编写。
在一些实施方式中,还包括:业务层通过中间接口将IO操作注册到核心调度层。
此外,本发明还提供了一种基于Lua协程的程序并发IO优化系统,所述系统包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现根据前文所述的基于Lua协程的程序并发IO优化方法。
采用这样的设计后,本发明至少具有以下优点:
本发明基于Lua协程(一种用户态轻量级线程),摒弃了传统系统级线程,所以实现并发IO时无CPU上下文切换开销,具有资源占用小的特点。
本发明基于脚本,同时营造了连续的IO代码上下文,所以方便维护扩展业务代码。另外,脚本方案使得热更新也成为可能。
本发明因为使用Lua这种胶水脚本,所以可以轻易结合核心C程序,保留高并发、高性能的特点,或者对现有系统级程序进行二次开发优化。
附图说明
上述仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,以下结合附图与具体实施方式对本发明作进一步的详细说明。
图1是本发明实施例提供的基于Lua协程的程序并发IO优化方法的实现架构图;
图2是本发明实施例提供的基于Lua协程的程序并发IO优化方法的流程示意图;
图3是本发明实施例提供的基于Lua协程的程序并发IO优化系统的架构图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
本发明实现了一种同时满足高并发、可维护性可扩展性好的并发IO优化方案,适用于低端服务器环境应用、系统级软件开发、存储开发应用等场景。
参见图1,本发明主要采用如下架构:
1、业务代码以Lua协程的形式运行在业务层;
2、以C(或其他系统级程序语言)实现的IO事件循环(如epoll)运行在核心调度层;
3、业务层通过中间接口将IO操作注册到核心调度层,打通IO事件与事件处理。
参见图2,本发明的典型时序图举例如下:
1、业务代码发生IO操作时,向事件循环提交一个IO监听请求,并让出CPU执行权;
2、事件循环发现监听的IO句柄就绪,则重入IO句柄对应的原协程继续执行业务代码;
3、由于此时IO句柄已就绪,所以业务代码能正确执行;
4、对于所有的并发协程,发起IO操作时并未阻塞出当前进程,而是主动让出执行权,因此整个进程具有高并发处理IO事件的能力。
协程的让出与重入的伪代码实现,如下:
业务部分的伪代码如下:
图3示出了基于Lua协程的程序并发IO优化系统的结构。参见图3,例如,所述基于Lua协程的程序并发IO优化系统300可以用于充当并行处理系统中的优化IO系统。如本文所述,基于Lua协程的程序并发IO优化系统300可以用于在并行处理系统中实现对并发IO的优化调度功能。基于Lua协程的程序并发IO优化系统300可以在单个节点中实现,或者基于Lua协程的程序并发IO优化系统300的功能可以在网络中的多个节点中实现。本领域的技术人员应意识到,术语基于Lua协程的程序并发IO优化系统包括广泛意义上的设备,图3中示出的基于Lua协程的程序并发IO优化系统300仅是其中一个示例。包括基于Lua协程的程序并发IO优化系统300是为了表述清楚,并不旨在将本发明的应用限制为特定的基于Lua协程的程序并发IO优化系统实施例或某一类基于Lua协程的程序并发IO优化系统实施例。本发明所述的至少部分特征/方法可以在网络装置或组件,例如,基于Lua协程的程序并发IO优化系统300中实现。例如,本发明中的特征/方法可以采用硬件、固件和/或在硬件上安装运行的软件实现。基于Lua协程的程序并发IO优化系统300可以是任何通过网络处理,存储和/或转发数据帧的设备,例如,服务器,客户端,数据源等。如图3所示,基于Lua协程的程序并发IO优化系统300可以包括收发器(Tx/Rx)310,其可以是发射器,接收器,或其组合。Tx/Rx310可以耦合到多个端口350(例如上行接口和/或下行接口),用于从其他节点发送和/或接收帧。处理器330可耦合至Tx/Rx 310,以处理帧和/或确定向哪些节点发送帧。处理器330可以包括一个或多个多核处理器和/或存储器设备332,其可以用作数据存储器,缓冲区等。处理器330可以被实现为通用处理器,或者可以是一个或多个专用集成电路(applicationspecific integrated circuit,简称ASIC)和/或数字信号处理器(digital signalprocessor,简称DSP)的一部分。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,本领域技术人员利用上述揭示的技术内容做出些许简单修改、等同变化或修饰,均落在本发明的保护范围内。
机译: 基于本体的系统优化方法,包括将动态依赖于应用程序的相关性分配给本体元素,并利用相关性来确定基于本体的系统使用部分本体的优先级
机译: 在基于Web的应用程序中处理并发事件的方法,支持系统和使用该方法的应用程序系统
机译: 在基于Web的应用程序中处理并发事件的方法,支持系统和使用该方法的应用程序系统