基于Go语言的多任务并行处理装置及方法制造方法及图纸

技术编号:30329356 阅读:14 留言:0更新日期:2021-10-10 00:31
本发明专利技术提供了一种基于Go语言的多任务并行处理装置及方法,可用于分布式技术领域,用以该装置包括:主线程模块,用于初始化一个channel缓冲区,声明该channel缓冲区传递的数据类型;并发建立多个协程,并将所述channel缓冲区作为参数传递给所述多个协程;读取channel缓冲区,获得协程的业务处理结果并执行主线程业务逻辑,获得汇总结果;协程模块,用于在每个协程建立后,执行每个协程的业务逻辑,并将每个协程的业务处理结果写入channel缓冲区中。本发明专利技术可以进行多任务汇总处理,效率高。率高。率高。

【技术实现步骤摘要】
基于Go语言的多任务并行处理装置及方法


[0001]本专利技术涉及分布式
,尤其涉及一种基于Go语言的多任务并行处理装置及方法。

技术介绍

[0002]在单机应用程序中,当一个父任务(主线程)有多个子任务(子线程)时,在不依赖其他中间件系统(缓存、数据库等)实现线程间数据共享的情况下,无法实现线程间通信,主线程无法获取子线程的计算结果,这种情况下子任务必须在主线程中串行执行,效率较低,耗时较长(例如个人所有账户总资产的计算、任务耗时统计等场景)。

技术实现思路

[0003]本专利技术实施例提出一种基于Go语言的多任务并行处理装置,用以进行多任务汇总处理,效率高,该装置包括:
[0004]主线程模块,用于初始化一个channel缓冲区,声明该channel缓冲区传递的数据类型;并发建立多个协程,并将所述channel缓冲区作为参数传递给所述多个协程;读取channel缓冲区,获得协程的业务处理结果并执行主线程业务逻辑,获得汇总结果;
[0005]协程模块,用于在每个协程建立后,执行每个协程的业务逻辑,并将每个协程的业务处理结果写入channel缓冲区中。
[0006]本专利技术实施例提出一种基于Go语言的多任务并行处理方法,用以进行多任务汇总处理,效率高,该方法包括:
[0007]利用主线程初始化一个channel缓冲区,声明该channel缓冲区传递的数据类型;并发建立多个协程,并将所述channel缓冲区作为参数传递给所述多个协程,其中主线程用于执行父任务,每个协程用于执行每个子任务;
[0008]执行每个协程的业务逻辑,并将每个协程的业务处理结果写入channel缓冲区中;
[0009]利用主线程读取channel缓冲区,获得协程的业务处理结果并执行主线程业务逻辑,获得汇总结果。
[0010]本专利技术实施例还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述基于Go语言的多任务并行处理方法。
[0011]本专利技术实施例还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述基于Go语言的多任务并行处理方法的计算机程序。
[0012]在本专利技术实施例中,主线程模块,用于初始化一个channel缓冲区,声明该channel缓冲区传递的数据类型;并发建立多个协程,并将所述channel缓冲区作为参数传递给所述多个协程,其中主线程用于执行父任务,每个协程用于执行每个子任务;读取channel缓冲区,获得协程的业务处理结果并执行主线程业务逻辑,获得汇总结果;协程模块,用于在每个协程建立后,执行每个协程的业务逻辑,并将每个协程的业务处理结果写入channel缓冲
区中。在上述过程中,可以并行处理多个子任务,并且父任务可以与子任务通信,即可以阻塞式的等待所有子任务计算完成并汇总结果,从而提升任务处理效率,缩短处理时间。
附图说明
[0013]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
[0014]图1为本专利技术实施例中基于Go语言的多任务并行处理装置的示意图;
[0015]图2为本专利技术实施例中主线程和多个协程通信的原理图;
[0016]图3为本专利技术实施例中基于Go语言的多任务并行处理方法的流程图;
[0017]图4为本专利技术实施例中基于Go语言的多任务并行处理方法的详细流程图;
[0018]图5为本专利技术实施例中计算机设备的示意图。
具体实施方式
[0019]为使本专利技术实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本专利技术实施例做进一步详细说明。在此,本专利技术的示意性实施例及其说明用于解释本专利技术,但并不作为对本专利技术的限定。
[0020]在本说明书的描述中,所使用的“包含”、“包括”、“具有”、“含有”等,均为开放性的用语,即意指包含但不限于。参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”等的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本申请的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
[0021]首先对本专利技术实施例涉及的术语进行解释。
[0022]Go语言:谷歌于2009年发布的编程语言,其特点是对多线程编程支持较好,非常适用于高并发量系统的开发。
[0023]协程(goroutine):与传统的系统级线程和进程相比,Go语言的协程的最大优势在于其“轻量级”,可以轻松创建上百万个而不会导致系统资源衰。
[0024]channel:channel是Go语言在语言级别提供的goroutine间的通信方式。可以使用channel在两个或多个goroutine之间传递消息。一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。向channel写入数据通常会导致程序阻塞,直到有其他goroutine从这个channel中读取数据;如果channel之前没有写入数据,那么从channel中读取数据也会导致程序阻塞,直到channel中被写入数据为止。
[0025]图1为本专利技术实施例中基于Go语言的多任务并行处理装置的示意图,如图1所示,该装置包括:
[0026]主线程模块101,用于初始化一个channel缓冲区,声明该channel缓冲区传递的数据类型;并发建立多个协程,并将所述channel缓冲区作为参数传递给所述多个协程,其中
主线程用于执行父任务,每个协程用于执行每个子任务;读取channel缓冲区,获得协程的业务处理结果并执行主线程业务逻辑,获得汇总结果;
[0027]协程模块102,用于在每个协程建立后,执行每个协程的业务逻辑,并将每个协程的业务处理结果写入channel缓冲区中。
[0028]在上述实施例中,可以并行处理多个子任务,并且父任务可以与子任务通信,即可以阻塞式的等待所有子任务计算完成并汇总结果,从而提升任务处理效率,缩短处理时间。
[0029]读取channel缓冲区时,是阻塞式的,即使没有读取方,写入方也可以一直往channel缓冲区里写入,在channel缓冲区被填完之前都不会阻塞,channel缓冲区如果被填满,则写入方阻塞等待。在上述实施例中,主线程模块每读取一个业务处理结果,就执行一次主线程逻辑,而不会等待所有协程完成,才执行主线程逻辑。汇总结果是实时更新的。获得汇总结果后,go语言内部机制会将本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Go语言的多任务并行处理装置,其特征在于,包括:主线程模块,用于初始化一个channel缓冲区;并发建立多个协程,并将所述channel缓冲区作为参数传递给所述多个协程,其中主线程用于执行父任务,每个协程用于执行每个子任务;读取channel缓冲区,获得协程的业务处理结果并执行主线程业务逻辑,获得汇总结果;协程模块,用于在每个协程建立后,执行每个协程的业务逻辑,并将每个协程的业务处理结果写入channel缓冲区中。2.如权利要求1所述的基于Go语言的多任务并行处理装置,其特征在于,所述channel缓冲区的大小为CPU核心数。3.如权利要求1所述的基于Go语言的多任务并行处理装置,其特征在于,主线程模块还用于:初始化一个计数器变量;在从channel缓冲区中读取到一个协程的业务处理结果后,对所述计数器变量进行加1操作;判断计数器变量是否与协程总数一致,若一致,输出汇总结果,若不一致,继续等待从channel缓冲区读取业务处理结果。4.如权利要求3所述的基于Go语言的多任务并行处理装置,其特征在于,协程模块还用于:对每个协程,在该协程建立后,启动一个异常处理子协程,所述异常处理子协程在预设时长后,将该协程对应的超时信号写入channel中回复:已改;主线程模块还用于:在从channel缓冲区中读取到该协程对应的超时信号后,结束主线程。5.如权利要求3或4所述的基于Go语言的多任务并行处理装置,其特征在于,主线程模块具体用于:利用Go语言atomic库中的方法对计数器变量进行加1的原子操作。6.一种基于Go语言的多任务并行处理方法,其特征在于,包括:利用主线程初始化一个channel缓冲区,声明该channel缓冲区传递的数据类型;并发建立多个协...

【专利技术属性】
技术研发人员:杜敏琪李登峰马刚穆孙婷幸兰欣
申请(专利权)人:中国银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1