[发明专利]单线程任务的多线程执行方法及系统有效
申请号: | 201310655730.0 | 申请日: | 2013-12-05 |
公开(公告)号: | CN103605498A | 公开(公告)日: | 2014-02-26 |
发明(设计)人: | 张士恒;王绍国;李鹏翼 | 申请(专利权)人: | 用友软件股份有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38;G06F9/48 |
代理公司: | 北京中恒高博知识产权代理有限公司 11249 | 代理人: | 刘洪京 |
地址: | 100094 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 线程 任务 多线程 执行 方法 系统 | ||
技术领域
本发明涉及一种对任务进行快速处理的方法和采用这种方法的系统,更具体地涉及一种单线程任务的多线程执行方法,并且涉及采用这种方法的系统。
背景技术
在当前各种系统中,海量数据需要计算、网络传输、IO操作等导致传统线性执行任务有很大效率问题,而为了提高效率,在系统中应用多线程处理的情况越来越多。但是现有的多线程处理需要繁琐的步骤,并且不易调试,这导致了现有的多线程处理很难实现,而且如果将现有系统中的单线程任务改成多线程执行对系统的改动将会很大,需要修改现有系统的工作任务,这会影响到系统对任务的执行,给产品稳定带来很大风险,并且大大增加了工作量;另外并不是所有的任务改成多线程执行都能很大地提高效率,经过测试许多单线程任务改为多线程执行后性能提升不明显,需要取消多线程执行,而现有解决方式是要重新修改系统,调回到原来状态,这样会造成资源的二次浪费。总之现有的多线程使用技术的使用成本比较高,而且给产品带来比较大的风险。
因此需要一种能够解决上述现有技术中多线程处理对系统结构影响过大且容易给系统带来不可测风险、成本过高而效率过低、以及功能切换和调试困难等问题。
发明内容
基于上述现有技术的缺点,本发明的发明目的在于提供一种单线程任务的多线程执行方法,其不仅对系统结构影响小、成本低且效率高,并且切换和调试方便;另外发明还提供了一种采用上述方法的系统。
为了实现上述的发明目的,本发明采用如下的技术方案:
一种单线程任务的多线程执行方法,该方法包括:
(1)接收单线程总任务,并进行上下文配置,其中在所述上下文配置中对任务划分模式、事务处理方式和多线程执行过程中的线程池大小进行配置;
(2)对所述单线程总任务进行任务自动划分,其中在自动划分过程中根据所述上下文配置及所述单线程总任务中的任务总数进行任务自动划分,并且在任务自动划分中使每一个线程处理的任务均衡,即执行时间相同并且执行的步骤的数量相同;
(3)根据所述上下文配置中配置的线程池大小来创建线程池,其中在线程池中创建处理线程并且对新线程上下文环境进行初始化;
(4)根据所述上下文配置中配置的事务处理方式来配置线程的事务处理,其中根据上下文配置,该事务处理方式包括任务整体成功和任务部分成功在内的至少两种事务处理方式;
(5)对划分后的任务进行任务调度和多线程管理组合,其中能够可选择地启用多线程执行功能,并且根据步骤(2)中对所述单线程总任务的任务自动划分以获取划分后的子任务、根据步骤(3)中的线程池获取线程、同时根据步骤(4)中的事务处理方式获取事务,将获取的所述子任务、线程和事务进行组合管理;
(6)根据步骤(5)中获取的子任务、线程和事务组合后,执行线程处理过程。
其中,在步骤(2)中,根据上下文配置来确定任务划分模式,所述方法能够自动匹配两种任务划分方式:对象数组方式和数据库表方式。
进一步地,所述对象数组方式是均等地任务分配方式,根据需要转换为多线程执行的现有单线程任务的总任务数及线程个数均等地分割任务,这种方式适用于每个任务完成所需资源相同,即当任务总数为N时,根据资源配置等信息确定线程个数为M,则每个线程需要处理的任务为N/M。
更进一步地,所述数据库表方式用于不是所有任务完成所需资源相同的情况,在相同的维度下的所有任务所需数据量差距非常大,数据库表方式根据对任务支持数量进行自适应,即根据传入数据库表的需要转换为多线程执行的现有单线程任务、任务划分维度、每个任务处理数据最大量进行自适应,能够自动划分任务,可使每个划分后的任务数据量相同。
另外,在所述步骤(3)中,所述上下文配置中创建所述线程池时支持:主线程调用完成后即结束和等待子线程完全执行完成后结束两种模式。
其次,在所述步骤(4)中,所述事务处理方式据上下文配置进行事务处理,如果配置所述任务整体成功即所有线程共用一个事务,如果配置允许所述任务部分成功则每一个线程单独创建单独事务。
a)当所有线程共用一个事务时,如果有一个线程失败则整个事务重新执行,该模式适用于任务之间有关联关系的情况;
b)当每一个线程单独创建单独事务时,如果该线程执行成功则直接提交事务,该模式适用于任务与任务之间没有直接关系的情况。
再次,在步骤(5)中,其中启用多线程执行功能包括如下两种方式:
a)直接调用,在所述单线程总任务中以参数传输处理方式完成多线程执行方法的调用;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于用友软件股份有限公司,未经用友软件股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310655730.0/2.html,转载请声明来源钻瓜专利网。