一种多任务并发执行方法、存储介质、设备及系统与流程

文档序号:17481866发布日期:2019-04-20 06:30阅读:174来源:国知局
一种多任务并发执行方法、存储介质、设备及系统与流程

本发明涉及网络通信技术领域,具体来讲是一种多任务并发执行方法、存储介质、设备及系统。



背景技术:

随着网络通信技术的快速发展,在网络通信中需要执行各种网络请求,因此经常会碰到多任务并发执行的问题。目前,常规的实现网络请求的多任务执行的方式是:在需要的时候,通过系统接口创建新的线程,将多任务分发到几个线程进行执行;然后,在任务执行完成之后线程退出,操作系统再将相关资源释放。但是,实际应用中发现,这种常规的执行方式依然存在以下缺陷:

(1)在常规的执行方式中,需要在新任务开启时创建线程并在执行完成后释放线程,因此在多任务时,会频繁创建线程、释放线程。这就导致多任务下整体系统开销的增大;并且,频繁地创建、释放线程还会增大系统故障率的发生(由于创建释放的不适当,导致一些僵死线程)。

(2)当同一时间任务较多时,即多任务并发时,会使系统产生过多的线程。这无疑增大了系统的开销,使得系统资源得不到最好的利用,进而导致系统整体性能降低。



技术实现要素:

本发明的目的是为了克服上述背景技术的不足,提供一种多任务并发执行方法、存储介质、设备及系统,能最大限度的减少线程的创建、释放过程,有效降低整体系统开销及故障率,使得系统整体性能得到有效提升。

为达到以上目的,本发明采取的技术方案是:提供一种多任务并发执行方法,该方法包括以下步骤:

s1、主线程完成任务管理对象的初始化,所述任务管理对象用于管理所有子任务线程的创建、释放与开销;初始化过程中,将创建多个用于执行网络服务任务的子任务线程的对象,该子任务线程的对象的个数与操作系统的最大任务数相匹配;

s2、主线程通过执行任务管理对象已有的执行接口,完成所有子任务线程的创建,并进行子任务线程的执行过程的设置;

s3、主线程完成网络服务任务的初始化;初始化过程中,根据不同的网络请求创建各种不同的网络服务任务,并为每个网络服务任务绑定相应的网络请求回调函数,网络请求回调函数用来根据不同的网络请求执行不同的网络服务操作;

s4、当有网络服务任务对应的网络请求到来时,创建该网络服务任务对应的网络事件消息,并根据该网络服务任务绑定的网络请求回调函数,设置该网络事件消息的回调处理函数;再将该网络事件消息投递到消息队列中;当前线程最靠前的子任务线程,从消息队列中获取该网络事件消息,并通过调用相应的回调处理函数来执行对应网络服务任务;执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来。

在上述技术方案的基础上,步骤s1中主线程完成任务管理对象的初始化的具体流程为:s101、从本地配置文件中获取操作系统的最大任务数;s102、创建用于管理所有子任务线程的创建、释放与开销的任务管理对象;s103、将子任务线程的对象的个数初始化为与操作系统的最大任务数相匹配;s104、按照初始化的子任务线程的对象的个数,创建多个用于执行网络服务任务的子任务线程的对象;并设置好相应的初始化接口、处理函数,以及子任务线程的任务id。

在上述技术方案的基础上,步骤s2中,主线程采用循环方式完成所有子任务线程的创建及执行过程的设置,每次循环过程的具体流程为:

s201、设置子任务线程的调用接口函数的函数体,该函数体用来实现子任务线程的执行过程;该函数体被执行时,首先调用初始化时设置好的初始化接口,然后再获取消息接口,该消息接口是用来获取消息队列中网络事件消息的接收接口;该函数体的主体为一个while死循环,该while死循环的入口为网络事件消息获取,当获取到网络事件消息时调用初始化时设置好的处理函数执行该网络事件消息对应的网络服务任务,执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来;

s202、设置子任务线程的调用接口函数的处理参数,该处理参数为初始化时创建的子任务线程的对象;

s203、将子任务线程的id设置为初始化时设置好的子任务线程的任务id;

s204、通过子线程创建函数创建上述设置好的子任务线程;并将创建的子任务线程的id返回给任务管理对象进行统一管理。

在上述技术方案的基础上,步骤s3具体包括以下流程:s301、主线程根据不同的网络请求通过绑定ip与端口创建各种不同的网络服务任务;s302、主线程为每个网络服务任务绑定相应的网络请求回调函数;s303、主线程完成上述网络服务任务的初始化后,调用用于实现主线程等待的等待函数,保持主线程自身不退出。

本发明还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述多任务并发执行方法的步骤。

本发明还提供一种多任务并发执行设备,包括存储器、处理器及存储在存储器上并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述多任务并发执行方法的步骤。

本发明还提供一种多任务并发执行系统,该系统包括任务管理对象初始化模块、子任务线程创建设置模块、网络服务任务初始化模块、任务请求处理模块;

所述任务管理对象初始化模块用于:控制主线程完成任务管理对象的初始化,所述任务管理对象用于管理所有子任务线程的创建、释放与开销;初始化过程中,将创建多个用于执行网络服务任务的子任务线程的对象,该子任务线程的对象的个数与操作系统的最大任务数相匹配;

所述子任务线程创建设置模块用于:控制主线程通过执行任务管理对象已有的执行接口,完成所有子任务线程的创建,并进行子任务线程的执行过程的设置;

所述网络服务任务初始化模块用于:控制主线程完成网络服务任务的初始化;初始化过程中,根据不同的网络请求创建各种不同的网络服务任务,并为每个网络服务任务绑定相应的网络请求回调函数,网络请求回调函数用来根据不同的网络请求执行不同的网络服务操作;

所述任务请求处理模块用于:当有网络服务任务对应的网络请求到来时,创建该网络服务任务对应的网络事件消息,并根据该网络服务任务绑定的网络请求回调函数,设置该网络事件消息的回调处理函数;再将该网络事件消息投递到消息队列中;控制当前线程最靠前的子任务线程从消息队列中获取该网络事件消息,并通过调用相应的回调处理函数来执行对应网络服务任务;执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来。

在上述技术方案的基础上,所述任务管理对象初始化模块控制主线程完成任务管理对象的初始化的具体流程为:从本地配置文件中获取操作系统的最大任务数;创建用于管理所有子任务线程的创建、释放与开销的任务管理对象;将子任务线程的对象的个数初始化为与操作系统的最大任务数相匹配;按照初始化的子任务线程的对象的个数,创建多个用于执行网络服务任务的子任务线程的对象;并设置好相应的初始化接口、处理函数,以及子任务线程的任务id。

在上述技术方案的基础上,所述子任务线程创建设置模块控制主线程采用循环方式完成所有子任务线程的创建及执行过程的设置,每次循环过程的具体流程为:

所述子任务线程创建设置模块控制主线程设置子任务线程的调用接口函数的函数体,该函数体用来实现子任务线程的执行过程;该函数体被执行时,首先调用初始化时设置好的初始化接口,然后再获取消息接口,该消息接口是用来获取消息队列中网络事件消息的接收接口;该函数体的主体为一个while死循环,该while死循环的入口为网络事件消息获取,当获取到网络事件消息时调用初始化时设置好的处理函数执行该网络事件消息对应的网络服务任务,执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来;

所述子任务线程创建设置模块控制主线程设置子任务线程的调用接口函数的处理参数,该处理参数为初始化时创建的子任务线程的对象;

所述子任务线程创建设置模块控制主线程将子任务线程的id设置为初始化时设置好的子任务线程的任务id;

所述子任务线程创建设置模块控制主线程通过子线程创建函数创建上述设置好的子任务线程;并将创建的子任务线程的id返回给任务管理对象进行统一管理。

在上述技术方案的基础上,所述网络服务任务初始化模块控制主线程完成网络服务任务的初始化的具体流程为:控制主线程根据不同的网络请求通过绑定ip与端口,创建各种不同的网络服务任务;控制主线程为每个网络服务任务绑定相应的网络请求回调函数;控制主线程完成上述网络服务任务的初始化后,调用用于实现主线程等待的等待函数,保持主线程自身不退出。

本发明的有益效果在于:

本发明中,在任务管理对象的初始化的过程中会创建好与系统的最大任务数(通常为系统cpu核心数)相匹配的多个子任务线程的对象;当对应数量的子任务线程被创建后将作为线程池备用,然后等待网络服务任务的消息到达;当有消息到达时,顺序投递到消息队列中去,线程池中的子任务线程依次执行消息队列中的消息任务,直到消息队列中所有消息任务执行完毕;然后,等待新的消息任务的到来。

与现有技术相比,本发明取消了执行过程中不停的创建、释放线程导致的开销,不但有效降低了整体系统开销,而且能减少系统故障的发生率;并且,本发明创建的子任务线程数与系统cpu核心数相匹配,有效控制了线程数量,使得系统资源得到最好的利用,提升了系统整体性能。

附图说明

图1为本发明实施例中多任务并发执行方法的流程图;

图2为本发明实施例中多任务并发执行设备的结构示意图;

图3为本发明实施例中多任务并发执行系统的结构框图。

具体实施方式

下面结合附图及具体实施例对本发明作进一步的详细描述。

参见图1所示,本发明实施例提供一种多任务并发执行方法,该方法包括以下步骤:

步骤s1、主线程完成任务管理对象的初始化,所述任务管理对象用于管理所有子任务线程的创建、释放与开销;初始化过程中,将创建多个用于执行网络服务任务的子任务线程的对象(只是创建子任务线程的对象,并没有创建子任务线程的实例,即还没有真正创建子任务线程也没有开启子任务线程),该子任务线程的对象的个数与操作系统的最大任务数相匹配(相匹配是指小于等于操作系统的最大任务数)。

具体来说,在实际操作中,步骤s1中主线程完成任务管理对象的初始化的具体流程如下:

步骤s101、从本地配置文件中获取操作系统的最大任务数;通常,操作系统的最大任务数设置为cpu核心数。

步骤s102、创建用于管理所有子任务线程的创建、释放与开销的任务管理对象。

步骤s103、将子任务线程的对象的个数初始化为与操作系统的最大任务数相匹配。

步骤s104、按照初始化的子任务线程的对象的个数创建多个用于执行网络服务任务的子任务线程的对象;并设置好相应的初始化接口(如init)、处理函数(如m_entry),以及子任务线程的任务id(任务id只需要保证每个子任务线程唯一即可)。

步骤s2、主线程通过执行任务管理对象已有的执行接口(run接口),完成所有子任务线程的创建(也就是完成子任务线程的实例的创建),并将子任务线程的执行过程设置为:获取消息队列中的网络事件消息,当消息队列中有网络事件消息到来时,执行该网络事件消息对应的网络服务任务;执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来。

具体来说,步骤s2中,主线程采用循环方式完成所有子任务线程的创建及执行过程设置,每次循环过程(即每个子任务线程的创建及执行过程设置)具体包括以下流程:

步骤s201、设置子任务线程的调用接口函数的函数体,该子任务线程的调用接口函数的函数体用来实现子任务线程的执行过程;该函数体被执行时首先调用初始化时(具体步骤s104中)设置好的初始化接口(如init),然后再获取一个消息接口,该消息接口是用来获取消息队列中网络事件消息的接收接口;该函数体的主体为一个while死循环,该while死循环的入口为网络事件消息获取,当获取到网络事件消息时调用初始化时(具体步骤s104中)设置好的处理函数(如m_entry)执行该网络事件消息对应的网络服务任务;执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来。

步骤s202、设置子任务线程的调用接口函数的处理参数,该处理参数为初始化时创建的子任务线程的对象。

步骤s203、将子任务线程的id设置为初始化时(具体步骤s104中)设置好的子任务线程的任务id。

步骤s204、通过子线程创建函数pthread_create,创建上述设置好的子任务线程;并将创建的子任务线程的id返回给任务管理对象进行统一管理。

步骤s3、主线程完成网络服务任务的初始化;初始化过程中,将根据不同的网络请求创建各种不同的网络服务任务,并为每个网络服务任务绑定相应的网络请求回调函数,该网络请求回调函数用来根据不同的网络请求执行不同的网络服务操作。

具体来说,在实际操作中,步骤s3具体包括以下流程:

步骤s301、主线程根据不同的网络请求通过绑定ip(internetprotocol,网际协议)与端口,创建各种不同的网络服务任务。

步骤s302、主线程为每个网络服务任务绑定相应的网络请求回调函数,该网络请求回调函数用来根据不同的网络请求执行不同的网络服务操作。

步骤s303、主线程完成上述网络服务任务的初始化后,调用用于实现主线程等待的等待函数wait,保持主线程自身不退出。可以理解的是,主线程主要用来完成所有的初始化工作,因此,在所有初始化工作完成后,需要调用等待函数wait保持主线程自身不退出,从而避免子任务线程退出。

步骤s4、当有网络服务任务对应的网络请求到来时(即有新任务到来时),创建该网络服务任务对应的网络事件消息,并根据该网络服务任务绑定的网络请求回调函数,设置该网络事件消息的回调处理函数;再将该网络事件消息投递到消息队列中;当前所有子任务线程中线程最靠前的子任务线程,从消息队列中获取该网络事件消息,并通过调用相应的回调处理函数来执行对应网络服务任务;执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来。

可以理解的是,实际操作时,可通过调用前文设置好的子任务线程的调用接口函数来使线程最靠前的子任务线程,从消息队列中获取该网络事件消息,并通过调用相应的回调处理函数来执行对应网络服务任务;执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来。

通过上述操作,实现了一种的多任务并发的执行方法。上述执行过程中完全取消了执行过程中不停的创建、释放线程导致的系统开销,并且降低了整体系统的线程数,从而减小线程间的切换开销,进而提升了系统的整体性能。本方法不仅是在网络高并发请求中有很好的效果,在其他高并发任务下类似方案同样适用。

对应上述的多任务并发执行方法,本发明实施例还提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时可实现上述各实施例中的多任务并发执行方法的步骤。需要说明的是,所述存储介质包括u盘、移动硬盘、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。

另外,参见图2所示,对应上述的多任务并发执行方法,本发明实施例还提供一种多任务并发执行设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时可实现上述各实施例中的多任务并发执行方法的步骤。

参见图3所示,本发明实施例还提供一种多任务并发执行系统,该系统包括任务管理对象初始化模块、子任务线程创建设置模块、网络服务任务初始化模块、任务请求处理模块。

其中,任务管理对象初始化模块用于:控制主线程完成任务管理对象的初始化,所述任务管理对象用于管理所有子任务线程的创建、释放与开销;初始化过程中,将创建多个用于执行网络服务任务的子任务线程的对象,该子任务线程的对象的个数与操作系统的最大任务数相匹配;

子任务线程创建设置模块用于:控制主线程通过执行任务管理对象已有的执行接口,完成所有子任务线程的创建,并进行子任务线程的执行过程的设置;

网络服务任务初始化模块用于:控制主线程完成网络服务任务的初始化;初始化过程中,将根据不同的网络请求创建各种不同的网络服务任务,并为每个网络服务任务绑定相应的网络请求回调函数,该网络请求回调函数用来根据不同的网络请求执行不同的网络服务操作;

任务请求处理模块用于:当有网络服务任务对应的网络请求到来时,创建该网络服务任务对应的网络事件消息,并根据该网络服务任务绑定的网络请求回调函数,设置该网络事件消息的回调处理函数;再将该网络事件消息投递到消息队列中;控制当前线程最靠前的子任务线程从消息队列中获取该网络事件消息,并通过调用相应的回调处理函数来执行对应网络服务任务;执行完成后,释放该网络事件消息并继续等待新的网络事件消息的到来。

可以理解的是,该多任务并发执行系统中的各功能模块的具体实现流程是与上文多任务并发执行方法的各步骤详细流程一一对应的,此处不再赘述。

需要说明的是:上述实施例提供的系统在实现多任务并发的执行时,仅以上述各功能模块的划分进行举例说明,实际应用中,可根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或部分功能。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。

本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

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