CN109739583B - 多线程并行运行的方法、装置、计算机设备以及存储介质 - Google Patents
多线程并行运行的方法、装置、计算机设备以及存储介质 Download PDFInfo
- Publication number
- CN109739583B CN109739583B CN201811527417.8A CN201811527417A CN109739583B CN 109739583 B CN109739583 B CN 109739583B CN 201811527417 A CN201811527417 A CN 201811527417A CN 109739583 B CN109739583 B CN 109739583B
- Authority
- CN
- China
- Prior art keywords
- thread
- running
- execution
- parameter
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请揭示了多线程并行运行的方法,包括:调用执行接口接收所有运行对象的入参数据包;解析所述入参数据包,得到待批量执行的所述运行对象的总数量;根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同;将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上;从所述入参数据包获取各所述运行对象分别对应的入参参量;将各所述入参参量均封装于所述线程对象对应的run方法中;运行所述run方法以并行运行各所述线程通道。通过程序中转移线程的管理,将各运行对象生成线程对象,实现批处理管理并通过run方法实现并行执行各线程通道内的运行对象。
Description
技术领域
本申请涉及到微服务领域,特别是涉及到多线程并行运行的方法、装置、计算机设备以及存储介质。
背景技术
在设计微服务架构的时候,一般会关注模式、拓扑以及粒度等问题,但是有一个最为基础的决策是线程模型。为微服务选择正确的线程模型并确定它将如何与数据库进行关联连接非常重要,这决定了你的解决方案是刚好能用,还是会成为一个很棒的产品。在考虑效率和复杂性之间的权衡时,关注线程模型是一种有效的方式。比如服务会被分解为并行的操作,通过共享的资源来进行处理,所以应用会变得更加高效,其响应的延迟也会更短,但是并行操作和安全的资源共享会为代码引入更多的复杂性,因此目前市面上还无类似微服务多线程算法解决方案。
发明内容
本申请的主要目的为提供多线程并行运行的方法,旨在解决现无类似微服务多线程算法解决方案的技术问题。
本申请提出一种多线程并行运行的方法,包括:
调用执行接口接收所有运行对象的入参数据包;
解析所述入参数据包,得到待批量执行的所述运行对象的总数量;
根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同;
将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上;
从所述入参数据包获取各所述运行对象分别对应的入参参量;
将各所述入参参量均封装于所述线程对象对应的run方法中;
运行所述run方法以并行运行各所述线程通道。
优选地,所述运行所述run方法以并行运行各所述线程通道的步骤,包括:
将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器,其中所述分发服务器与各所述运行服务器预先关联连接;
监听各所述运行服务器的web容器响应对应线程通道的web工作请求;
根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道。
优选地,所述将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器的步骤之前,包括:
启动分发代理服务,以搜索预关联的所述分发服务器;
根据部署指令为与所述分发服务器与关联的所述运行服务器部署web容器,其中所述运行服务器至少包括两个。
优选地,所述根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道的步骤,包括:
根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量;
将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道。
优选地,所述线程通道内包括多个执行阶段,各所述执行阶段与所述运行对象的执行步骤一一对应,所述将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道的步骤,包括:
将所述第一线程通道当前执行阶段对应的当前运行数据,存储于第一内存数据空间;
判断所述当前执行阶段是否已处理完毕;
若是,则从所述第一内存数据空间调取所述当前运行数据的指定数据,作为所述当前执行阶段的下一执行阶段的执行参量;
根据所述执行参量,执行所述下一执行阶段,并将所述下一执行阶段对应的下一运行数据,存储于第一内存数据空间;
按照所述下一执行阶段的执行过程,运行完毕所述第一线程通道。
优选地,所述根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量的步骤,包括:
判断所述run方法是否处于锁闭状态;
若否,则根据第一线程通道对应的第一web工作请求,与所述run方法建立数据连接通道,并控制所述run方法处于锁闭状态;
根据所述数据连接通道从所述run方法中获取所述第一入参参量,其中所述第一入参参量包括各所述线程通道共用的数据参量;
判断所述第一入参参量是否传输完毕;
若所述第一入参参量传输完毕,则解锁所述run方法,使所述run方法处于允许访问状态。
优选地,所述运行对象为多个测试案例,所述执行接口为测试案例执行接口,所述调用执行接口接收所有运行对象的入参数据包的步骤,包括:
按照所述测试案例的预设测试顺序,迭代请求所述测试案例执行接口;
控制所述测试案例执行接口从前端输入页面获取当前测试案例对应的第二入参参量;
将各所述第二入参参量封装成测试案例入参数据包。
本申请还提供了一种多线程并行运行的装置,包括:
调用模块,用于调用执行接口接收所有运行对象的入参数据包;
解析模块,用于解析所述入参数据包,得到待批量执行的所述运行对象的总数量;
第一分配模块,用于根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同;
第二分配模块,用于将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上;
获取模块,用于从所述入参数据包获取各所述运行对象分别对应的入参参量;
封装模块,用于将各所述入参参量均封装于所述线程对象对应的run方法中;
运行模块,用于运行所述run方法以并行运行各所述线程通道。
本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
本申请通过将各运行对象转换为线程对象,直接控制线程的创建和管理,通过程序中转移线程的管理,并将运行对象传递给一个线程通道的执行程序,创建一个线程对象必须提供线程通道中执行的运行对象的代码,通过将各运行对象生成线程对象,实现批处理管理,并通过将各运行对象的代码封装在run方法中,实现并行执行各线程通道内的运行对象,而非串行执行各运行对象,提高待批量处理的运行对象的同步运行效率,实现自动化测试平台测试案例批量执行功能,实现自动化造数平台同一造数工具内多笔造数同时进行。本申请通过在主服务器中关联分发服务器,上述分发服务器为nginx服务器,然后再通过nginx服务器增加了几台其他的运行服务器,并在增加的运行服务器上部署web容器,然后在nginx服务器上配置代理转发到多个其他运行服务器的web容器,从而实现了运行负载的均衡分发,以便降低多线程通道并发时带给的主服务器的压力,以降低主服务器挂掉风险。本申请的每个独立线程通道,都会有自己独立的内存数据空间、存储器资源,因此每个独立线程通道在执行过程中涉及的内存数据是互不影响的,以保证各个线程通道并发运行时各个运行对象的数据可分离运用,互不干扰,实现测试案例批量执行时各个案例中数据的分离运用。本申请在有线程通道访问run方法时,则控制run方法处于锁闭状态,只允许当前访问run方法的线程通道获取对应的数据,以实现互斥地共享和锁访问共有的数据,实现测试案例批量执行时不同案例线程执行过程中共有数据的通讯,实现自动化造数批量造数时各笔造数线程运行过程中共有数据的共享和锁访问。
附图说明
图1本申请一实施例的多线程并行运行的方法流程示意图;
图2本申请一实施例的多线程并行运行的装置结构示意图;
图3本申请一实施例的计算机设备内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
参照图1,本申请一实施例的多线程并行运行的方法,包括:
S1:调用执行接口接收所有运行对象的入参数据包。
本实施例的执行接口具有批量执行功能,每请求一次该执行接口,就会给该执行接口传入前端输入的一个运行对象的入参,直至调入所有运行对象的入参,并将所有运行对象的入参集成入参数据包。上述运行对象包括通过执行接口进行相应操作的所有功能平台,比如包括测试案例的自动化测试平台或造数平台等。
S2:解析所述入参数据包,得到待批量执行的所述运行对象的总数量。
本实施例的入参数据包中不仅包括了各运行对象的入参参量,也包括了待批量执行的所述运行对象的总数量,以便根据运行对象的总数量,合理匹配线程通道。
S3:根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同。
本实施例通过为执行接口分配多个线程通道,提高批量执行运行对象的效率,本实施例的线程通道的数量与所述总数量相同,一个运行对象放在一个独立的线程通道中。
S4:将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上。
本实施例通过将各运行对象转换为线程对象,线程对象为可以产生线程的对象,直接控制线程的创建和管理,通过程序中转移线程的管理,并将运行对象一一对应传递给线程通道的执行程序,创建一个线程对象必须提供线程通道中执行的运行对象的代码,通过将各运行对象生成线程对象,实现批处理管理。
S5:从所述入参数据包获取各所述运行对象分别对应的入参参量。
本实施例通过入参数据包中各运行对象的名称,以及分别与各运行对象的名称相对应的入参参量,来分别获取各入参参量。
S6:将各所述入参参量均封装于所述线程对象对应的run方法中。
本实施例的底层代码的编辑语言为Java语言,通过将批量处理的各线程对象封装于run方法中,并通过Runnable接口定义run方法,以实现底层代码调用线程通道的操作。该run方法中含有各线程通道中执行的方法,通过Runnable接口传递与各运行对象的名称相对应的入参参量给构造器来创建run方法,以便每调用一次run方法,则读取一个运行对象的入参参量,对应调用该入参参量对应匹配的线程通道。
S7:运行所述run方法以并行运行各所述线程通道。
本实施例通过将各运行对象的代码封装在run方法中,通过多次调用run方法实现并行执行各线程通道内的运行对象,而非串行执行各运行对象,提高待批量处理的运行对象的同步运行效率。
进一步地,所述运行所述run方法以并行运行各所述线程通道的步骤S7,包括:
S70:将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器,其中所述分发服务器与各所述运行服务器预先关联连接。
本实施例在多线程通道并发地执行时,势必都会增加主服务器的负担,若并发运行的线程通道太多,容易导致主服务器的web容器的崩溃甚至主服务器宕机现象。本实施例通过在主服务器中关联分发服务器,本实施例的分发服务器为nginx服务器,然后再通过nginx服务器增加了几台其他的运行服务器,并在增加的运行服务器上部署web容器,然后在nginx服务器上配置代理转发到多个其他运行服务器的web容器,从而实现了运行负载的均衡分发。上述web容器为tomcat环境。
S71:监听各所述运行服务器的web容器响应对应线程通道的web工作请求。
本实施例中,当多个线程通道启动时,所有的线程通道会先发到nginx服务器,然后nginx服务器会均衡地分发到各个运行服务器的web容器中,由各自的tomcat分别处理响应线程通道的web请求工作,以便降低多线程通道并发时带给主服务器的压力,以降低主服务器挂掉的风险。
S72:根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道。
本实施例中每一个线程通道运行时,均会通过分发服务器访问run方法,以获取各线程通道运行的方法和入参参量,以并行运行各线程通道。本实施例的并发运行是每个线程通道均访问run方法后的运行状态,无需像串行运行那样,前一个运行对象运行完毕后再运行下一个运行对象,当每个线程通道均获取了运行过程中需要的方法和入参参量后,各线程通道可保持各自独立的并发运行状态,互不干扰。
进一步地,所述将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器的步骤S70之前,包括:
S701:启动分发代理服务,以搜索预关联的所述分发服务器。
本实施例在主服务器上启动nginx代理服务,并通过设备号搜索分发服务器,以建立关联连接。
S702:根据部署指令为与所述分发服务器与关联的所述运行服务器部署web容器,其中所述运行服务器至少包括两个。
本实施例通过在运行服务器上部署web容器,以满足运行线程通道的需要,本实施例的运行服务器为多个,每个运行服务器上可同时运行多个线程通道。上述运行服务器、主服务以及分发服务器的命名方式,仅用于区分而不用于限定。
进一步地,所述根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道的步骤S72,包括:
S720:根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量。
本实施例的各线程通道运行前均需发出web工作请求,以便分别从所述run方法中获取各线程通道分别对应的入参参量。
S721:将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道。
本实施例从run方法中获取各线程通道分别对应的入参参量后,会根据名称等关联关系,将上述入参参量赋值于对应线程通道内的运行对象中,并按照运行对象预设的运行方式运行。
进一步地,所述线程通道内包括多个执行阶段,各所述执行阶段与所述运行对象的执行步骤一一对应,所述将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道的步骤S721,包括:
S7211:将所述第一线程通道当前执行阶段对应的当前运行数据,存储于第一内存数据空间。
本实施例同一线程通道内运行的同一运行对象的运行方式中,包括多个执行步骤,分别对应于线程通道内的多个执行阶段,每个执行阶段对应的运行数据均会对应存储,以便查询。本实施例的每个独立线程通道,都会有自己独立的内存数据空间、存储器资源,因此每个独立线程通道在执行过程中涉及的内存数据是互不影响的,以保证各个线程通道并发运行时各个运行对象的数据可分离运用,互不干扰。
S7212:判断所述当前执行阶段是否已处理完毕。
通过判断是否接收到当前执行阶段的执行数据的反馈回执,进行判断当前执行阶段是否已处理完毕,接收到当前执行阶段的执行数据的反馈回执,则当前执行阶段已处理完毕,否则未处理完毕。
S7213:若是,则从所述第一内存数据空间调取所述当前运行数据的指定数据,作为所述当前执行阶段的下一执行阶段的执行参量。
本实施例的指定数据,包括上一执行阶段的反馈回执中的部分数据或全部数据,比如反馈回执的部分字段或全部字段作为当前执行阶段的下一执行阶段的执行参量。
S7214:根据所述执行参量,执行所述下一执行阶段,并将所述下一执行阶段对应的下一运行数据,存储于第一内存数据空间。
本实施例的同一运行对象的运行数据按照执行阶段,分别存储于该运行对象对应的内存数据空间,以便每个独立线程通道在执行过程中涉及的内存数据是互不影响的,实现数据分离调用,互不干扰,且方便各个线程通道并发运行后的数据查询。
S7215:按照所述下一执行阶段的执行过程,运行完毕所述第一线程通道。
举例地,下一执行阶段调用上一执行阶段的反馈回执中的数据,以完成下一执行阶段,依次按照所有执行阶段的预设排列顺序,执行完毕整个运行对象,并释放对应的线程通道。上述预设排列顺序指运行对象的运行方式中,包括的多个执行步骤。
进一步地,所述根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量的步骤S720,包括:
S7201:判断所述run方法是否处于锁闭状态。
本实施例的run方法每次只允许一个线程通道进行访问,当一个线程通道访问run方法时,run方法对于其他线程通道不能被访问,而处于锁闭状态。
S7202:若run方法未处于锁闭状态,则根据第一线程通道对应的第一web工作请求,与所述run方法建立数据连接通道,并控制所述run方法处于锁闭状态。
本实施例run方法未处于锁闭状态,则需要访问run方法的线程通道可访问run方法,并通过建立数据连接通道,从run方法中获取执行过程中需要的参量和/或执行方式。
S7203:根据所述数据连接通道从所述run方法中获取所述第一入参参量,其中所述第一入参参量包括各所述线程通道共用的数据参量。
本实施例中,当有线程通道访问run方法时,则控制run方法处于锁闭状态,只允许当前访问run方法的线程通道获取对应的数据,以实现互斥地共享和锁访问共有的数据。举例地,对于需要维护测试案例执行时各个测试案例间的共有数据,比如各测试案例的相同入参,通过将执行测试案例的自动化测试接口内封装的run方法,放在线程通道的runnable对象中,而runnable对象中放入了需要共享的数据对象,即上述相同入参,再把整个runnable对象放在线程通道的run方法,则实现了测试案例批量执行时,不同测试案例对应的线程通道执行过程中共有数据的通讯,只需在平台输入一次相同入参,然后供多个测试案例传入使用。再举例地,跑造数代码时,往往需要先读取一些环境信息,比如数据连接串、连接的账号密码、系统所属环境等,上述环境信息通常维护在excell或txt文件里,当造多笔造数时,虽然多笔造数是在相互独立的线程通道中运行的,但是多个造数线程都是读取同一个excell或者txt来获取环境信息,所以就需要实现环境信息等共有数据的共享和锁访问。比如通过把读取数据的代码封装在造数的执行方法里(读取数据的代码读取的是同一份数据文件),然后把造数的执行方法封装在线程通道的run方法里,使得在启动新线程通道时,多个线程通道分别执行run方法,实现互斥地共享和锁访问共有数据。
S7204:判断所述第一入参参量是否传输完毕。
本实施例中当线程通道访问run方法时,会通过数据传输状态判断访问状态,比如存在数据传输则处于访问状态,当预设时间段内数据传输量为0时,则判断对应数据传输完毕,且判定已访问完毕run方法。
S7205:若所述第一入参参量传输完毕,则解锁所述run方法,使所述run方法处于允许访问状态。
本实施例中,当判定对应数据传输完毕,且判定已访问完毕run方法后,重新控制run方法处于解锁状态,以便其他线程通道能及时访问run方法,实现并发运行过程中,分别处于不同线程通道的各运行对象之间的共有数据之间的通讯,以避免运行过程中多次输入相同的数据,提高运行效率。
进一步地,所述运行对象为多个测试案例,所述执行接口为测试案例执行接口,所述调用执行接口接收所有运行对象的入参数据包的步骤S1,包括:
S10:按照所述测试案例的预设测试顺序,迭代请求所述测试案例执行接口。
S11:控制所述测试案例执行接口从前端输入页面获取当前测试案例对应的第二入参参量。
S12:将各所述第二入参参量封装成测试案例入参数据包。
本实施例以测试案例的自动化测试平台为例,在自动化测试平台上选择完需要执行的测试案例以后,点击批量执行按钮,则会迭代地触发请求后台批量执行测试的执行接口,每请求一次该执行接口,就会给该执行接口传入某条测试案例的前端入参(也即测试案例的入参参量),然后把入参传给运行中的测试案例事前封装好的方法。每次调用方法,并不是直接地调用,而是通过生成线程对象,并把方法(即执行步骤)封装在线程对象的run方法里,然后运行线程对象的run方法,本实施例将所有测试案例的入参参量和执行步骤封装成测试案例入参数据包,并封装在线程对象的run方法里。即把执行测试案例分别放在独立的线程通道里,在批量执行测试案例时,虽然迭代地请求测试案例的执行接口,但是并不是串行执行测试案例的,而是并行执行测试案例,以实现测试案例的批量并行执行。
进一步地,所述运行对象为多个造数工具,所述执行接口为造数接口,所述调用执行接口接收所有运行对象的入参数据包的步骤S1,包括:
S101:按照所述造数工具的预设测试顺序,迭代请求所述造数接口。
S102:控制所述造数接口从前端输入页面获取当前造数工具对应的第三入参参量。
S103:将各所述第三入参参量封装成造数入参数据包。
本实施例以造数平台为例,在造数平台上,先选择某个造数工具,输入要造数的笔数,点击开始造数按钮,就会迭代地触发请求造数的接口,每请求一次该接口,就会将前端造数页面填写的入参信息传给到后端造数的接口,该接口会调用造数的方法,但是每次调用该方法不是直接调用,而是放在一个线程对象里,并封装在线程对象的run方法里,启用新的线程,去运行造数方法。本实施例每一笔造数都是一个独立的线程通道,从而做到了多笔造数同时进行。
本实施例通过将各运行对象转换为线程对象,直接控制线程的创建和管理,通过程序中转移线程的管理,并将运行对象传递给一个线程通道的执行程序,创建一个线程对象必须提供线程通道中执行的运行对象的代码,通过将各运行对象生成线程对象,实现批处理管理,并通过将各运行对象的代码封装在run方法中,实现并行执行各线程通道内的运行对象,而非串行执行各运行对象,提高待批量处理的运行对象的同步运行效率,实现自动化测试平台测试案例批量执行功能,实现自动化造数平台同一造数工具内多笔造数同时进行。本实施例通过在主服务器中关联分发服务器,上述分发服务器为nginx服务器,然后再通过nginx服务器增加了几台其他的运行服务器,并在增加的运行服务器上部署web容器,然后在nginx服务器上配置代理转发到多个其他运行服务器的web容器,从而实现了运行负载的均衡分发,以便降低多线程通道并发时带给的主服务器的压力,以降低主服务器挂掉风险。本实施例的每个独立线程通道,都会有自己独立的内存数据空间、存储器资源,因此每个独立线程通道在执行过程中涉及的内存数据是互不影响的,以保证各个线程通道并发运行时各个运行对象的数据可分离运用,互不干扰,实现测试案例批量执行时各个案例中数据的分离运用。本实施例在有线程通道访问run方法时,则控制run方法处于锁闭状态,只允许当前访问run方法的线程通道获取对应的数据,以实现互斥地共享和锁访问共有的数据,实现测试案例批量执行时不同案例线程执行过程中共有数据的通讯,实现自动化造数批量造数时各笔造数线程运行过程中共有数据的共享和锁访问。
参照图2,本申请一实施例的多线程并行运行的装置,包括:
调用模块1,用于调用执行接口接收所有运行对象的入参数据包。
本实施例的执行接口具有批量执行功能,每请求一次该执行接口,就会给该执行接口传入前端输入的一个运行对象的入参,直至调入所有运行对象的入参,并将所有运行对象的入参集成入参数据包。上述运行对象包括通过执行接口进行相应操作的所有功能平台,比如包括测试案例的自动化测试平台或造数平台等。
解析模块2,用于解析所述入参数据包,得到待批量执行的所述运行对象的总数量。
本实施例的入参数据包中不仅包括了各运行对象的入参参量,也包括了待批量执行的所述运行对象的总数量,以便根据运行对象的总数量,合理匹配线程通道。
第一分配模块3,用于根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同。
本实施例通过为执行接口分配多个线程通道,提高批量执行运行对象的效率,本实施例的线程通道的数量与所述总数量相同,一个运行对象放在一个独立的线程通道中。
第二分配模块4,用于将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上。
本实施例通过将各运行对象转换为线程对象,线程对象为可以产生线程的对象,直接控制线程的创建和管理,通过程序中转移线程的管理,并将运行对象一一对应传递给线程通道的执行程序,创建一个线程对象必须提供线程通道中执行的运行对象的代码,通过将各运行对象生成线程对象,实现批处理管理。
获取模块5,用于从所述入参数据包获取各所述运行对象分别对应的入参参量。
本实施例通过入参数据包中各运行对象的名称,以及分别与各运行对象的名称相对应的入参参量,来分别获取各入参参量。
封装模块6,用于将各所述入参参量均封装于所述线程对象对应的run方法中。
本实施例的底层代码的编辑语言为Java语言,通过将批量处理的各线程对象封装于run方法中,并通过Runnable接口定义run方法,以实现底层代码调用线程通道的操作。该run方法中含有各线程通道中执行的方法,通过Runnable接口传递与各运行对象的名称相对应的入参参量给构造器来创建run方法,以便每调用一次run方法,则读取一个运行对象的入参参量,对应调用该入参参量对应匹配的线程通道。
运行模块7,用于运行所述run方法以并行运行各所述线程通道。
本实施例通过将各运行对象的代码封装在run方法中,通过多次调用run方法实现并行执行各线程通道内的运行对象,而非串行执行各运行对象,提高待批量处理的运行对象的同步运行效率。
进一步地,所述运行模块7,包括:
发送子模块,用于将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器,其中所述分发服务器与各所述运行服务器预先关联连接。
本实施例在多线程通道并发地执行时,势必都会增加主服务器的负担,若并发运行的线程通道太多,容易导致主服务器的web容器的崩溃甚至主服务器宕机现象。本实施例通过在主服务器中关联分发服务器,本实施例的分发服务器为nginx服务器,然后再通过nginx服务器增加了几台其他的运行服务器,并在增加的运行服务器上部署web容器,然后在nginx服务器上配置代理转发到多个其他运行服务器的web容器,从而实现了运行负载的均衡分发。上述web容器为tomcat环境。
监听子模块,用于监听各所述运行服务器的web容器响应对应线程通道的web工作请求。
本实施例中,当多个线程通道启动时,所有的线程通道会先发到nginx服务器,然后nginx服务器会均衡地分发到各个运行服务器的web容器中,由各自的tomcat分别处理响应线程通道的web请求工作,以便降低多线程通道并发时带给主服务器的压力,以降低主服务器挂掉的风险。
运行子模块,用于根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道。
本实施例中每一个线程通道运行时,均会通过分发服务器访问run方法,以获取各线程通道运行的方法和入参参量,以并行运行各线程通道。本实施例的并发运行是每个线程通道均访问run方法后的运行状态,无需像串行运行那样,前一个运行对象运行完毕后再运行下一个运行对象,当每个线程通道均获取了运行过程中需要的方法和入参参量后,各线程通道可保持各自独立的并发运行状态,互不干扰。
进一步地,所述运行模块7,包括:
启动子模块,用于启动分发代理服务,以搜索预关联的所述分发服务器。
本实施例在主服务器上启动nginx代理服务,并通过设备号搜索分发服务器,以建立关联连接。
部署子模块,用于根据部署指令为与所述分发服务器与关联的所述运行服务器部署web容器,其中所述运行服务器至少包括两个。
本实施例通过在运行服务器上部署web容器,以满足运行线程通道的需要,本实施例的运行服务器为多个,每个运行服务器上可同时运行多个线程通道。上述运行服务器、主服务以及分发服务器的命名方式,仅用于区分而不用于限定。
进一步地,所述运行子模块,包括:
获取单元,用于根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量。
本实施例的各线程通道运行前均需发出web工作请求,以便分别从所述run方法中获取各线程通道分别对应的入参参量。
赋值单元,用于将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道。
本实施例从run方法中获取各线程通道分别对应的入参参量后,会根据名称等关联关系,将上述入参参量赋值于对应线程通道内的运行对象中,并按照运行对象预设的运行方式运行。
进一步地,所述线程通道内包括多个执行阶段,各所述执行阶段与所述运行对象的执行步骤一一对应,所述赋值单元,包括:
存储子单元,用于将所述第一线程通道当前执行阶段对应的当前运行数据,存储于第一内存数据空间。
本实施例同一线程通道内运行的同一运行对象的运行方式中,包括多个执行步骤,分别对应于线程通道内的多个执行阶段,每个执行阶段对应的运行数据均会对应存储,以便查询。本实施例的每个独立线程通道,都会有自己独立的内存数据空间、存储器资源,因此每个独立线程通道在执行过程中涉及的内存数据是互不影响的,以保证各个线程通道并发运行时各个运行对象的数据可分离运用,互不干扰。
第一判断子单元,用于判断所述当前执行阶段是否已处理完毕。
通过判断是否接收到当前执行阶段的执行数据的反馈回执,进行判断当前执行阶段是否已处理完毕,接收到当前执行阶段的执行数据的反馈回执,则当前执行阶段已处理完毕,否则未处理完毕。
调取子单元,用于若当前执行阶段是已处理完毕,则从所述第一内存数据空间调取所述当前运行数据的指定数据,作为所述当前执行阶段的下一执行阶段的执行参量。
本实施例的指定数据,包括上一执行阶段的反馈回执中的部分数据或全部数据,比如反馈回执的部分字段或全部字段作为当前执行阶段的下一执行阶段的执行参量。
执行子单元,用于根据所述执行参量,执行所述下一执行阶段,并将所述下一执行阶段对应的下一运行数据,存储于第一内存数据空间。
本实施例的同一运行对象的运行数据按照执行阶段,分别存储于该运行对象对应的内存数据空间,以便每个独立线程通道在执行过程中涉及的内存数据是互不影响的,实现数据分离调用,互不干扰,且方便各个线程通道并发运行后的数据查询。
运行子单元,用于按照所述下一执行阶段的执行过程,运行完毕所述第一线程通道。
举例地,下一执行阶段调用上一执行阶段的反馈回执中的数据,以完成下一执行阶段,依次按照所有执行阶段的预设排列顺序,执行完毕整个运行对象,并释放对应的线程通道。上述预设排列顺序指运行对象的运行方式中,包括的多个执行步骤。
进一步地,所述获取单元,包括:
第二判断子单元,用于判断所述run方法是否处于锁闭状态。
本实施例的run方法每次只允许一个线程通道进行访问,当一个线程通道访问run方法时,run方法对于其他线程通道不能被访问,而处于锁闭状态。
建立子单元,用于若run方法未处于锁闭状态,则根据第一线程通道对应的第一web工作请求,与所述run方法建立数据连接通道,并控制所述run方法处于锁闭状态。
本实施例run方法未处于锁闭状态,则需要访问run方法的线程通道可访问run方法,并通过建立数据连接通道,从run方法中获取执行过程中需要的参量和/或执行方式。
获取子单元,用于根据所述数据连接通道从所述run方法中获取所述第一入参参量,其中所述第一入参参量包括各所述线程通道共用的数据参量。
本实施例中,当有线程通道访问run方法时,则控制run方法处于锁闭状态,只允许当前访问run方法的线程通道获取对应的数据,以实现互斥地共享和锁访问共有的数据。举例地,对于需要维护测试案例执行时各个测试案例间的共有数据,比如各测试案例的相同入参,通过将执行测试案例的自动化测试接口内封装的run方法,放在线程通道的runnable对象中,而runnable对象中放入了需要共享的数据对象,即上述相同入参,再把整个runnable对象放在线程通道的run方法,则实现了测试案例批量执行时不同测试案例对应的线程通道执行过程中共有数据的通讯,只需在平台输入一次相同入参,然后供多个测试案例传入使用。再举例地,跑造数代码时,往往需要先读取一些环境信息,比如数据连接串、连接的账号密码、系统所属环境等,上述环境信息通常维护在excell或txt文件里,当造多笔造数时,虽然多笔造数是在相互独立的线程通道中运行的,但是多个造数线程都是读取同一个excell或者txt来获取环境信息,所以就需要实现环境信息等共有数据的共享和锁访问。比如通过把读取数据的代码封装在造数的执行方法里(读取数据的代码读取的是同一份数据文件),然后把造数的执行方法封装在线程通道的run方法里,使得在启动新线程通道时,多个线程通道分别执行run方法,实现互斥地共享和锁访问共有数据。
第三判断子单元,用于判断所述第一入参参量是否传输完毕。
本实施例中当线程通道访问run方法时,会通过数据传输状态判断访问状态,比如存在数据传输则处于访问状态,当预设时间段内数据传输量为0时,则判断对应数据传输完毕,且判定已访问完毕run方法。
解锁子单元,用于若所述第一入参参量传输完毕,则解锁所述run方法,使所述run方法处于允许访问状态。
本实施例中,当判定对应数据传输完毕,且判定已访问完毕run方法后,重新控制run方法处于解锁状态,以便其他线程通道能及时访问run方法,实现并发运行过程中,分别处于不同线程通道的各运行对象之间的共有数据之间的通讯,以避免运行过程中多次输入相同的数据,提高运行效率。
进一步地,所述运行对象为多个测试案例,所述执行接口为测试案例执行接口,所述调用模块1,包括:
第一迭代子模块,用于按照所述测试案例的预设测试顺序,迭代请求所述测试案例执行接口。
第一输入子模块,用于控制所述测试案例执行接口从前端输入页面获取当前测试案例对应的第二入参参量。
第一封装子模块,用于将各所述第二入参参量封装成测试案例入参数据包。
本实施例以测试案例的自动化测试平台为例,在自动化测试平台上选择完需要执行的测试案例以后,点击批量执行按钮,则会迭代地触发请求后台批量执行测试的执行接口,每请求一次该执行接口,就会给该执行接口传入某条测试案例的前端入参(也即测试案例的入参参量),然后把入参传给运行中的测试案例事前封装好的方法。每次调用方法,并不是直接地调用,而是通过生成线程对象,并把方法(即执行步骤)封装在线程对象的run方法里,然后运行线程对象的run方法,本实施例将所有测试案例的入参参量和执行步骤封装成测试案例入参数据包,并封装在线程对象的run方法里。即把执行测试案例分别放在独立的线程通道里,在批量执行测试案例时,虽然迭代地请求测试案例的执行接口,但是并不是串行执行测试案例的,而是并行执行测试案例,以实现测试案例的批量并行执行。
进一步地,所述运行对象为多个造数工具,所述执行接口为造数接口,所述调用模块1,包括:
第二迭代子模块,用于按照所述造数工具的预设测试顺序,迭代请求所述造数接口。
第二输入子模块,用于控制所述造数接口从前端输入页面获取当前造数工具对应的第三入参参量。
第二封装子模块,用于将各所述第三入参参量封装成造数入参数据包。
本实施例以造数平台为例,在造数平台上,先选择某个造数工具,输入要造数的笔数,点击开始造数按钮,就会迭代地触发请求造数的接口,每请求一次该接口,就会将前端造数页面填写的入参信息传给到后端造数的接口,该接口会调用造数的方法,但是每次调用该方法不是直接调用,而是放在一个线程对象里,并封装在线程对象的run方法里,启用新的线程,去运行造数方法。本实施例每一笔造数都是一个独立的线程通道,从而做到了多笔造数同时进行。
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储多线程并行运行的过程需要的所有数据。该计算机设备的网络接口用于与外部的端通过网络连接通信。该计算机程序被处理器执行时以实现多线程并行运行的方法。
上述处理器执行上述多线程并行运行的方法,包括:调用执行接口接收所有运行对象的入参数据包;解析所述入参数据包,得到待批量执行的所述运行对象的总数量;根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同;将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上;从所述入参数据包获取各所述运行对象分别对应的入参参量;将各所述入参参量均封装于所述线程对象对应的run方法中;运行所述run方法以并行运行各所述线程通道。
上述计算机设备,通过将各运行对象转换为线程对象,直接控制线程的创建和管理,通过程序中转移线程的管理,并将运行对象传递给一个线程通道的执行程序,创建一个线程对象必须提供线程通道中执行的运行对象的代码,通过将各运行对象生成线程对象,实现批处理管理,并通过将各运行对象的代码封装在run方法中,实现并行执行各线程通道内的运行对象,而非串行执行各运行对象,提高待批量处理的运行对象的同步运行效率,实现自动化测试平台测试案例批量执行功能,实现自动化造数平台同一造数工具内多笔造数同时进行。通过在主服务器中关联分发服务器,上述分发服务器为nginx服务器,然后再通过nginx服务器增加了几台其他的运行服务器,并在增加的运行服务器上部署web容器,然后在nginx服务器上配置代理转发到多个其他运行服务器的web容器,从而实现了运行负载的均衡分发,以便降低多线程通道并发时带给的主服务器的压力,以降低主服务器挂掉风险。每个独立线程通道,都会有自己独立的内存数据空间、存储器资源,因此每个独立线程通道在执行过程中涉及的内存数据是互不影响的,以保证各个线程通道并发运行时各个运行对象的数据可分离运用,互不干扰,实现测试案例批量执行时各个案例中数据的分离运用。在有线程通道访问run方法时,则控制run方法处于锁闭状态,只允许当前访问run方法的线程通道获取对应的数据,以实现互斥地共享和锁访问共有的数据,实现测试案例批量执行时不同案例线程执行过程中共有数据的通讯,实现自动化造数批量造数时各笔造数线程运行过程中共有数据的共享和锁访问。
在一个实施例中,上述处理器运行所述run方法以并行运行各所述线程通道的步骤,包括:将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器,其中所述分发服务器与各所述运行服务器预先关联连接;监听各所述运行服务器的web容器响应对应线程通道的web工作请求;根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道。
在一个实施例中,上述处理器将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器的步骤之前,包括:启动分发代理服务,以搜索预关联的所述分发服务器;根据部署指令为与所述分发服务器与关联的所述运行服务器部署web容器,其中所述运行服务器至少包括两个。
在一个实施例中,上述处理器根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道的步骤,包括:根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量;将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道。
在一个实施例中,所述线程通道内包括多个执行阶段,各所述执行阶段与所述运行对象的执行步骤一一对应,上述处理器将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道的步骤,包括:将所述第一线程通道当前执行阶段对应的当前运行数据,存储于第一内存数据空间;判断所述当前执行阶段是否已处理完毕;若是,则从所述第一内存数据空间调取所述当前运行数据的指定数据,作为所述当前执行阶段的下一执行阶段的执行参量;根据所述执行参量,执行所述下一执行阶段,并将所述下一执行阶段对应的下一运行数据,存储于第一内存数据空间;按照所述下一执行阶段的执行过程,运行完毕所述第一线程通道。
在一个实施例中,上述处理器根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量的步骤,包括:判断所述run方法是否处于锁闭状态;若否,则根据第一线程通道对应的第一web工作请求,与所述run方法建立数据连接通道,并控制所述run方法处于锁闭状态;根据所述数据连接通道从所述run方法中获取所述第一入参参量,其中所述第一入参参量包括各所述线程通道共用的数据参量;判断所述第一入参参量是否传输完毕;若所述第一入参参量传输完毕,则解锁所述run方法,使所述run方法处于允许访问状态。
在一个实施例中,所述运行对象为多个测试案例,所述执行接口为测试案例执行接口,上述处理器调用执行接口接收所有运行对象的入参数据包的步骤,包括:按照所述测试案例的预设测试顺序,迭代请求所述测试案例执行接口;控制所述测试案例执行接口从前端输入页面获取当前测试案例对应的第二入参参量;将各所述第二入参参量封装成测试案例入参数据包。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现多线程并行运行的方法,包括:调用执行接口接收所有运行对象的入参数据包;解析所述入参数据包,得到待批量执行的所述运行对象的总数量;根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同;将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上;从所述入参数据包获取各所述运行对象分别对应的入参参量;将各所述入参参量均封装于所述线程对象对应的run方法中;运行所述run方法以并行运行各所述线程通道。
上述计算机可读存储介质,通过将各运行对象转换为线程对象,直接控制线程的创建和管理,通过程序中转移线程的管理,并将运行对象传递给一个线程通道的执行程序,创建一个线程对象必须提供线程通道中执行的运行对象的代码,通过将各运行对象生成线程对象,实现批处理管理,并通过将各运行对象的代码封装在run方法中,实现并行执行各线程通道内的运行对象,而非串行执行各运行对象,提高待批量处理的运行对象的同步运行效率,实现自动化测试平台测试案例批量执行功能,实现自动化造数平台同一造数工具内多笔造数同时进行。通过在主服务器中关联分发服务器,上述分发服务器为nginx服务器,然后再通过nginx服务器增加了几台其他的运行服务器,并在增加的运行服务器上部署web容器,然后在nginx服务器上配置代理转发到多个其他运行服务器的web容器,从而实现了运行负载的均衡分发,以便降低多线程通道并发时带给的主服务器的压力,以降低主服务器挂掉风险。每个独立线程通道,都会有自己独立的内存数据空间、存储器资源,因此每个独立线程通道在执行过程中涉及的内存数据是互不影响的,以保证各个线程通道并发运行时各个运行对象的数据可分离运用,互不干扰,实现测试案例批量执行时各个案例中数据的分离运用。在有线程通道访问run方法时,则控制run方法处于锁闭状态,只允许当前访问run方法的线程通道获取对应的数据,以实现互斥地共享和锁访问共有的数据,实现测试案例批量执行时不同案例线程执行过程中共有数据的通讯,实现自动化造数批量造数时各笔造数线程运行过程中共有数据的共享和锁访问。
在一个实施例中,上述处理器运行所述run方法以并行运行各所述线程通道的步骤,包括:将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器,其中所述分发服务器与各所述运行服务器预先关联连接;监听各所述运行服务器的web容器响应对应线程通道的web工作请求;根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道。
在一个实施例中,上述处理器将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器的步骤之前,包括:启动分发代理服务,以搜索预关联的所述分发服务器;根据部署指令为与所述分发服务器与关联的所述运行服务器部署web容器,其中所述运行服务器至少包括两个。
在一个实施例中,上述处理器根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道的步骤,包括:根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量;将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道。
在一个实施例中,所述线程通道内包括多个执行阶段,各所述执行阶段与所述运行对象的执行步骤一一对应,上述处理器将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道的步骤,包括:将所述第一线程通道当前执行阶段对应的当前运行数据,存储于第一内存数据空间;判断所述当前执行阶段是否已处理完毕;若是,则从所述第一内存数据空间调取所述当前运行数据的指定数据,作为所述当前执行阶段的下一执行阶段的执行参量;根据所述执行参量,执行所述下一执行阶段,并将所述下一执行阶段对应的下一运行数据,存储于第一内存数据空间;按照所述下一执行阶段的执行过程,运行完毕所述第一线程通道。
在一个实施例中,上述处理器根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量的步骤,包括:判断所述run方法是否处于锁闭状态;若否,则根据第一线程通道对应的第一web工作请求,与所述run方法建立数据连接通道,并控制所述run方法处于锁闭状态;根据所述数据连接通道从所述run方法中获取所述第一入参参量,其中所述第一入参参量包括各所述线程通道共用的数据参量;判断所述第一入参参量是否传输完毕;若所述第一入参参量传输完毕,则解锁所述run方法,使所述run方法处于允许访问状态。
在一个实施例中,所述运行对象为多个测试案例,所述执行接口为测试案例执行接口,上述处理器调用执行接口接收所有运行对象的入参数据包的步骤,包括:按照所述测试案例的预设测试顺序,迭代请求所述测试案例执行接口;控制所述测试案例执行接口从前端输入页面获取当前测试案例对应的第二入参参量;将各所述第二入参参量封装成测试案例入参数据包。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (6)
1.一种多线程并行运行的方法,应用于微服务领域,其特征在于,包括:
调用执行接口接收所有运行对象的入参数据包;
解析所述入参数据包,得到待批量执行的所述运行对象的总数量;
根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同;
将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上;
从所述入参数据包获取各所述运行对象分别对应的入参参量;
将各所述入参参量均封装于所述线程对象对应的run方法中;
运行所述run方法以并行运行各所述线程通道;
将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器,其中所述分发服务器与各所述运行服务器预先关联连接;
监听各所述运行服务器的web容器响应对应线程通道的web工作请求;
根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道;
所述将各所述线程通道发送至分发服务器,使所述分发服务器将各所述线程通道均衡地分发至各运行服务器的web容器的步骤之前,包括:
启动分发代理服务,以搜索预关联的所述分发服务器;
根据部署指令为与所述分发服务器与关联的所述运行服务器部署web容器,其中所述运行服务器至少包括两个;
所述根据所述web工作请求分别运行所述run方法,以并行运行各所述线程通道的步骤,包括:
根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量;
将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道;
所述根据第一线程通道对应的第一web工作请求,从所述run方法中获取所述第一线程通道对应的第一入参参量的步骤,包括:
判断所述run方法是否处于锁闭状态;
若否,则根据第一线程通道对应的第一web工作请求,与所述run方法建立数据连接通道,并控制所述run方法处于锁闭状态;
根据所述数据连接通道从所述run方法中获取所述第一入参参量,其中所述第一入参参量包括各所述线程通道共用的数据参量;
判断所述第一入参参量是否传输完毕;
若所述第一入参参量传输完毕,则解锁所述run方法,使所述run方法处于允许访问状态。
2.根据权利要求1所述的多线程并行运行的方法,其特征在于,所述线程通道内包括多个执行阶段,各所述执行阶段与所述运行对象的执行步骤一一对应,所述将所述第一入参参量赋值于所述第一线程通道对应的第一运行对象中,并按照所述第一运行对象预设的运行方式运行所述第一线程通道的步骤,包括:
将所述第一线程通道当前执行阶段对应的当前运行数据,存储于第一内存数据空间;
判断所述当前执行阶段是否已处理完毕;
若是,则从所述第一内存数据空间调取所述当前运行数据的指定数据,作为所述当前执行阶段的下一执行阶段的执行参量;
根据所述执行参量,执行所述下一执行阶段,并将所述下一执行阶段对应的下一运行数据,存储于第一内存数据空间;
按照所述下一执行阶段的执行过程,运行完毕所述第一线程通道。
3.根据权利要求1所述的多线程并行运行的方法,其特征在于,所述运行对象为多个测试案例,所述执行接口为测试案例执行接口,所述调用执行接口接收所有运行对象的入参数据包的步骤,包括:
按照所述测试案例的预设测试顺序,迭代请求所述测试案例执行接口;
控制所述测试案例执行接口从前端输入页面获取当前测试案例对应的第二入参参量;
将各所述第二入参参量封装成测试案例入参数据包。
4.一种多线程并行运行的装置,用于实现权利要求1至3中任一项所述的方法,其特征在于,包括:
调用模块,用于调用执行接口接收所有运行对象的入参数据包;
解析模块,用于解析所述入参数据包,得到待批量执行的所述运行对象的总数量;
第一分配模块,用于根据所述总数量为所述执行接口分配线程通道,其中所述线程通道的数量与所述总数量相同;
第二分配模块,用于将各所述运行对象分别一一对应生成线程对象,并将各所述线程对象分别分配到各所述线程通道上;
获取模块,用于从所述入参数据包获取各所述运行对象分别对应的入参参量;
封装模块,用于将各所述入参参量均封装于所述线程对象对应的run方法中;
运行模块,用于运行所述run方法以并行运行各所述线程通道。
5.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至3中任一项所述方法的步骤。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至3中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811527417.8A CN109739583B (zh) | 2018-12-13 | 2018-12-13 | 多线程并行运行的方法、装置、计算机设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811527417.8A CN109739583B (zh) | 2018-12-13 | 2018-12-13 | 多线程并行运行的方法、装置、计算机设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109739583A CN109739583A (zh) | 2019-05-10 |
CN109739583B true CN109739583B (zh) | 2023-09-08 |
Family
ID=66358989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811527417.8A Active CN109739583B (zh) | 2018-12-13 | 2018-12-13 | 多线程并行运行的方法、装置、计算机设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739583B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413505A (zh) * | 2019-06-18 | 2019-11-05 | 平安普惠企业管理有限公司 | 造数工具接入处理方法、装置、存储介质和计算机设备 |
CN112835723B (zh) * | 2019-11-22 | 2024-07-23 | 北京小米移动软件有限公司 | 信息处理方法、装置、终端及存储介质 |
CN111198689B (zh) * | 2019-12-30 | 2023-04-28 | 北京明略软件系统有限公司 | 一种代码执行方法、装置及计算机可读存储介质 |
CN112859744B (zh) * | 2020-12-30 | 2023-03-14 | 中国建材国际工程集团有限公司 | 一种采集处理玻璃生产线实时数据的方法 |
CN113064702B (zh) * | 2021-03-04 | 2023-01-13 | 山东英信计算机技术有限公司 | 一种加速部署内存模块配置spd信息的方法及装置 |
CN114637555B (zh) * | 2022-03-25 | 2024-05-28 | 深圳市哲盟软件开发有限公司 | 一种批量获取物流信息通用方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102866922A (zh) * | 2012-08-31 | 2013-01-09 | 河海大学 | 一种海量数据多线程并行处理中的负载均衡方法 |
US9569281B1 (en) * | 2015-08-13 | 2017-02-14 | International Business Machines Corporation | Dynamic synchronization object pool management |
CN106681811A (zh) * | 2016-12-08 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 基于线程池的多线程调度方法及装置 |
CN107391090A (zh) * | 2017-07-28 | 2017-11-24 | 成都优博创通信技术股份有限公司 | 多线程执行方法及装置 |
CN108062252A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 一种信息交互方法、对象管理方法及装置和系统 |
CN108345499A (zh) * | 2018-02-01 | 2018-07-31 | 平安科技(深圳)有限公司 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
CN108763082A (zh) * | 2018-05-30 | 2018-11-06 | 平安普惠企业管理有限公司 | 测试数据生成方法、装置、计算机设备及存储介质 |
CN108763083A (zh) * | 2018-05-30 | 2018-11-06 | 平安普惠企业管理有限公司 | 自动化测试方法、装置、计算机设备及存储介质 |
CN108874666A (zh) * | 2018-05-30 | 2018-11-23 | 平安普惠企业管理有限公司 | 测试数据自动生成方法、装置、计算机设备及存储介质 |
-
2018
- 2018-12-13 CN CN201811527417.8A patent/CN109739583B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102866922A (zh) * | 2012-08-31 | 2013-01-09 | 河海大学 | 一种海量数据多线程并行处理中的负载均衡方法 |
US9569281B1 (en) * | 2015-08-13 | 2017-02-14 | International Business Machines Corporation | Dynamic synchronization object pool management |
CN108062252A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 一种信息交互方法、对象管理方法及装置和系统 |
CN106681811A (zh) * | 2016-12-08 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 基于线程池的多线程调度方法及装置 |
CN107391090A (zh) * | 2017-07-28 | 2017-11-24 | 成都优博创通信技术股份有限公司 | 多线程执行方法及装置 |
CN108345499A (zh) * | 2018-02-01 | 2018-07-31 | 平安科技(深圳)有限公司 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
CN108763082A (zh) * | 2018-05-30 | 2018-11-06 | 平安普惠企业管理有限公司 | 测试数据生成方法、装置、计算机设备及存储介质 |
CN108763083A (zh) * | 2018-05-30 | 2018-11-06 | 平安普惠企业管理有限公司 | 自动化测试方法、装置、计算机设备及存储介质 |
CN108874666A (zh) * | 2018-05-30 | 2018-11-23 | 平安普惠企业管理有限公司 | 测试数据自动生成方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
Java多线程机制的研究与实践;胡忠;达县师范高等专科学校学报(02);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109739583A (zh) | 2019-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739583B (zh) | 多线程并行运行的方法、装置、计算机设备以及存储介质 | |
CN109492017B (zh) | 业务信息查询处理方法、系统、计算机设备和存储介质 | |
CN112099958B (zh) | 分布式多任务管理方法、装置、计算机设备及存储介质 | |
US11231912B2 (en) | Post-deployment modification of information-technology application using lifecycle blueprint | |
CN110738389A (zh) | 工作流处理方法、装置、计算机设备和存储介质 | |
CN112214293A (zh) | 一种无服务器架构下业务部署的方法和函数管理平台 | |
US20130159532A1 (en) | Method and system for managing resources among different clients for an exclusive use | |
CN108304251B (zh) | 线程同步方法及服务器 | |
CN109254765B (zh) | 定时任务管理方法、装置、计算机设备及存储介质 | |
Moens et al. | Cost-effective feature placement of customizable multi-tenant applications in the cloud | |
CN110941681B (zh) | 电力系统的多租户数据处理系统、方法和装置 | |
CN114237628B (zh) | 微服务编排及调用方法、装置、计算机设备及存储介质 | |
CN109408216A (zh) | 任务生成方法、装置、设备及存储介质 | |
CN108416199A (zh) | 一种应用的用户权限控制方法、装置及服务器 | |
CN111913784A (zh) | 任务调度方法及装置、网元、存储介质 | |
CN111163140A (zh) | 资源获取和分配的方法、装置和计算机可读存储介质 | |
CN105373434A (zh) | 资源管理系统及方法 | |
CN115344533A (zh) | 微服务日志检索方法、系统、控制装置及存储介质 | |
CN110298549B (zh) | 机场建设工程的项目任务处理方法、装置、设备和介质 | |
CN1799059A (zh) | 用于将提供商产品包自动转换成资源管理系统可执行的客户特定的服务环境定义的方法和系统 | |
CN113536254A (zh) | 资源权限配置方法、装置、计算机设备和存储介质 | |
CN114443293A (zh) | 一种大数据平台的部署系统及方法 | |
Vasu et al. | Application Constraints and Safety Aware Mapping of AUTOSAR Applications on Multi-core Platforms | |
CN109257201B (zh) | 一种License的发送方法和装置 | |
CN113254180B (zh) | 一种数据匹配方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |