一种线程调度方法、装置及电子设备与流程

文档序号:19827988发布日期:2020-02-04 12:05阅读:109来源:国知局
一种线程调度方法、装置及电子设备与流程

本申请涉及计算机技术领域,尤其涉及一种线程调度方法、装置及电子设备。



背景技术:

当前的软件通常采用c/s(client/server,客户机/服务器)架构或b/s(browser/server,浏览器/服务器)架构,服务器作为其核心,需要接收各个客户端的业务请求,因此设计高并发,高可用的服务器尤为重要。通常服务器能够同时处理的请求数量由pc性能(cpu,磁盘,内存)、业务的复杂程度和网络带宽等情况有关。

目前的软件架构中,客户端的请求会出现各种场景,有些任务比较耗时,有些任务不耗时但是数量比较多。如果服务器接收的都是非常耗时的业务请求时,则非常占用线程的处理时间;而对于处理不耗时但是数量很多的业务,会同时占用多个线程,还有时候两种情况同时存在,从而导致服务器无法同时保证高可用和高并发性。



技术实现要素:

有鉴于此,为了解决现有技术中业务复杂多样导致服务器无法保证高可用高并发的问题,本申请提供一种线程调度方法、装置及电子设备,可以在线程池中划分工作线程和并发线程,根据待处理业务的类型为该待处理业务分配工作线程或者并发线程,从而对线程进行调度,使相同类型的业务只会占用一个工作线程和\或多个并发线程,从而使并发全部为耗时任务时,还可以有工作线程进行业务处理,从而保证了服务器能够正常运转,避免出现线程堵塞不可用的情况,提升服务器的高可用和高并发性。

具体地,本申请是通过如下技术方案实现的:

第一方面,本申请提供一种线程调度方法,所述方法包括:

主线程获取业务队列中的待处理业务,判断在线程池中的工作线程中是否存在与所述待处理业务的业务类型相同的业务,所述线程池包括第一数量的工作线程和第二数量的并发线程;

若是,则在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理;

若否,则在线程池中存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。

第二方面,本申请提供一种线程调度装置,所述装置包括:

业务判断单元,用于获取业务队列中的待处理业务,判断在线程池中的工作线程中是否存在与所述待处理业务的业务类型相同的业务,所述线程池包括第一数量的工作线程和第二数量的并发线程;

第一分配单元,用于若在线程池中的工作线程中存在与所述待处理业务的业务类型相同的业务,则在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理;

第二分配单元,用于若在线程池中的工作线程中不存在与所述待处理业务的业务类型相同的业务,则在线程池中存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。

第三方面,本申请提供一种电子设备,包括处理器、通信接口、存储器和通信总线;

其中,所述处理器、通信接口、存储器通过所述通信总线进行相互间的通信;

所述存储器,用于存放计算机程序;

所述处理器,用于执行所述存储器上所存放的计算机程序,所述处理器执行所述计算机程序时实现所述线程调度方法的任一步骤。

第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现所述线程调度方法的任一步骤。

由上述实施例可见,本申请可以通过主线程获取业务队列中的待处理业务,判断在线程池中的工作线程中是否存在与所述待处理业务的业务类型相同的业务,所述线程池包括第一数量的工作线程和第二数量的并发线程;若是,则在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理;若否,则在线程池中存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。相比于现有技术,本申请可以在线程池中划分工作线程和并发线程,根据待处理业务的类型为该待处理业务分配工作线程或者并发线程,从而对线程进行调度,使相同类型的业务只会占用一个工作线程和\或多个并发线程,从而使并发全部为耗时任务时,还可以有工作线程进行业务处理,从而保证了服务器能够正常运转,避免出现线程堵塞不可用的情况,提升服务器的高可用和高并发性。

附图说明

图1为本申请示例性的一种线程调度方法的处理流程图;

图2为本申请示例性的一种线程池调度示意图;

图3为本申请示例性的另一种线程调度方法的处理流程图;

图4为本申请线程调度装置的一个实施例框图;

图5为本申请一种电子设备的一个实施例框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

为了提高并发性,相关技术中有一种方案可以将业务请求过来后,开启一个线程进行执行,执行后将线程销毁,但是该方法需要反复开启、销毁线程,增加了运营成本;为了避免反复开启销毁线程,又提供了一种方案,可以开启一个线程池,当业务请求过来后,投递到线程池中执行,虽然不需要反复的开启销毁线程,但是当业务数量占满线程池中所有的线程后,服务端无法响应请求,会导致线程池不可用;如果开启多个线程池,比如读取io的任务投递到线程池a中,执行网络操作的任务投递到线程池b中,则需要投递任务的操作者非常清楚往哪个线程池中投递,如果投递错误,则导致线程池不可用,此外各个线程池开启的线程数量也不好把控。

为了解决现有技术的问题,本申请可以通过主线程获取业务队列中的待处理业务,判断在线程池中的工作线程中是否存在与所述待处理业务的业务类型相同的业务,所述线程池包括第一数量的工作线程和第二数量的并发线程;若是,则在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理;若否,则在线程池中存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。相比于现有技术,本申请可以在线程池中划分工作线程和并发线程,根据待处理业务的类型为该待处理业务分配工作线程或者并发线程,从而对线程进行调度,使相同类型的业务只会占用一个工作线程和\或多个并发线程,从而使并发全部为耗时任务时,还可以有工作线程进行业务处理,从而保证了服务器能够正常运转,避免出现线程堵塞不可用的情况,提升服务器的高可用和高并发性。

如下,示出下述实施例对本申请提供的线程调度方法进行说明。

实施例一:

请参见图1,为本申请示例性的一种线程调度方法的处理流程图,该方法可以应用于服务器,该方法包括以下步骤:

步骤101、主线程获取业务队列中的待处理业务,判断在线程池中的工作线程中是否存在与所述待处理业务的业务类型相同的业务,所述线程池包括第一数量的工作线程和第二数量的并发线程;若是,则转步骤102;若否,则转步骤103;

在本实施例中,管理者可以根据实际业务需要,可以预先在线程池中分配第一数量的工作线程和第二数量的并发线程。第一数量与第二数量可以相等,也可以不相等,本申请不做限定。如图2所示,假设线程池中存在32个线程,则可以分配16个工作线程和16个并发线程,例如线程1-16为工作线程,线程17-32为并发线程;除了一比一的划分方式,还可以根据实际情况增多工作线程的数量,减少并发线程的数量;或者增多并发线程的数量,减少工作线程的数量,如果业务量增多时,还可以为该线程池增加更多的线程,具体划分方法根据实际需求而定,本申请不做限定。

主线程获取业务队列中的待处理业务后,可以判断在由线程池中的工作线程进行处理的业务中是否存在与所述待处理业务的业务类型相同的业务。

作为一个实施例,主线程在收到待处理业务时,可以根据所述待处理业务的类型为该待处理业务分配相应的业务标识,例如,为访问百度网页的业务分配业务标识a;为访问新浪网页的业务分配业务标识b;为访问qq网页的业务分配业务标识c;为下载的业务分配业务标识d等等;以上只是举例说明,实际应用中,管理者还可以根据实际需求进行细化,例如针对访问百度网页的业务,其中对访问百度音乐的业务分配业务标识a1,对访问百度知道的业务分配业务标识a2,对访问百度地图的业务分配业务标识a3等等。具体分配规则可以根据实际情况而定,本申请不做限定。

主线程获取当前待处理业务的业务标识后,可以判断在由线程池中的工作线程进行处理的业务中是否存在对应的业务标识与该待处理业务的业务标识相同的业务,如果存在,则说明工作线程中存在与该待处理业务的业务类型相同的业务;如果不存在,则说明工作线程中不存在与该待处理业务的业务类型相同的业务。

在可选的实施例中,还可以根据待处理业务的url(uniformresourcelocator,统一资源定位符)来区别业务类型,例如用户a和用户b都访问百度,则用户a的业务中的url和用户b的业务中的url相同,因此可以认为用户a的业务和用户b的业务为相同类型的业务;此外,还可以根据业务中的会话标识来区别业务类型,例如用户a发送业务a1访问百度音乐和发送业务a2访问百度地图,该用户a发送给服务器的业务a1和业务a2的会话标识中均为该用户a与服务器的会话标识,因此可以将业务a1和业务a2作为相同类型的业务处理,如果用户b也访问发送业务b1访问百度音乐和发送业务b2访问百度地图,但是由于该用户b与用户a的会话标识不相同,因此认为业务b1、b2与业务a1、a2的类型不同。实际应用中还可以存在多种业务类型的区分方法,此处不再一一例举。

步骤102、在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理;

当确定工作线程中存在与所述待处理业务的业务类型相同的业务,说明工作线程中已经在处理该类型的业务,因此可以在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理。

步骤103、在线程池中存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。

当确定工作线程中不存在与所述待处理业务的业务类型相同的业务时,说明工作线程中没有该类型的业务,因此可以在存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。

作为一个实施例,若在线程池中不存在空闲的工作线程时,说明当前工作线程已经满了,则可以将该待处理业务分配给空闲的并发线程处理。

作为一个实施例,若在线程池中不存在空闲的并发线程时,可以将该待处理业务降低处理优先级,使该待处理业务移动至业务队列最后处理。举例来讲,如果当前业务队列中有10个待处理业务,该待处理业务在业务队列中编号为1,若主线程将该待处理业务降低处理优先级后,该待处理业务会被移动到该业务队列的最后一个,则该待处理业务的编号则变为11。

相比于现有技术,本申请可以在线程池中划分工作线程和并发线程,根据待处理业务的类型为该待处理业务分配工作线程或者并发线程,从而对线程进行调度,使相同类型的业务只会占用一个工作线程和\或多个并发线程,从而使并发全部为耗时任务时,还可以有工作线程进行业务处理,从而保证了服务器能够正常运转,避免出现线程堵塞不可用的情况,提升服务器的高可用和高并发性。

下面结合图3对本申请的线程调度方法进行详细说明。

请参考图3,为本申请示例性的另一种线程调度方法的处理流程图,其中包括:

步骤301、主线程为待处理业务分配业务标识;

步骤302、判断工作线程中的业务标识是否与该待处理业务的业务标识相同;若是,则转步骤303;若否,则转步骤304;

步骤303、判断是否有空闲的并发线程;若是,则转步骤305;若否,则转步骤306;

步骤304、判断是否有空闲的工作线程,若是,则转步骤307;若否,则转步骤303;

步骤305、为该待处理业务分配空闲的并发线程,并结束;

步骤306、将该待处理业务移动至业务队列的最后处理,并结束;

步骤307、为该待处理业务分配空闲的工作线程,并结束。

由此可见,如果有一个业务执行非常耗时,根据上述方法的线程调度使该业务只会占用一个工作线程+多个并发线程,因此使服务器平台有大量空余的工作线程能够处理相应基本的业务请求,因此可以保证服务器正常运行。

与前述线程调度方法的实施例相对应,本申请还提供了线程调度装置的实施例。

请参见图4,为本申请线程调度装置的一个实施例框图,该装置应用于服务器,该装置40可以包括:

业务判断单元41,用于获取业务队列中的待处理业务,判断在线程池中的工作线程中是否存在与所述待处理业务的业务类型相同的业务,所述线程池包括第一数量的工作线程和第二数量的并发线程;

第一分配单元42,用于若在线程池中的工作线程中存在与所述待处理业务的业务类型相同的业务,则在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理;

第二分配单元43,用于若在线程池中的工作线程中不存在与所述待处理业务的业务类型相同的业务,则在线程池中存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。

作为一个实施例,所述业务判断单元41,具体用于根据所述待处理业务的业务类型分配相应的业务标识,当在线程池中的工作线程中存在业务标识与所述待处理业务的业务标识相同的业务时,确定在工作线程中存在与所述待处理业务的业务类型相同的业务。

作为一个实施例,所述装置还包括:

第三分配单元44,用于若在线程池中不存在空闲的工作线程时,将该待处理业务分配给空闲的并发线程处理。

作为一个实施例,所述装置还包括:

业务移动单元45,用于若在线程池中不存在空闲的并发线程时,将该待处理业务移动至业务队列最后处理。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

与前述线程调度方法的实施例相对应,本申请还提供了用于执行上述线程调度方法的电子设备的实施例。

作为一个实施例,请参考图5,一种电子设备,包括处理器51、通信接口52、存储器53和通信总线54;

其中,所述处理器51、通信接口52、存储器53通过所述通信总线54进行相互间的通信;

所述存储器53,用于存放计算机程序;

所述处理器51,用于执行所述存储器53上所存放的计算机程序,所述处理器51执行所述计算机程序时实现所述线程调度方法的任一步骤。

综上所述,本申请可以通过主线程获取业务队列中的待处理业务,判断在线程池中的工作线程中是否存在与所述待处理业务的业务类型相同的业务,所述线程池包括第一数量的工作线程和第二数量的并发线程;若是,则在线程池中存在空闲的并发线程时,将该待处理业务分配给空闲的并发线程处理;若否,则在线程池中存在空闲的工作线程时,将该待处理业务分配给空闲的工作线程处理。相比于现有技术,本申请可以在线程池中划分工作线程和并发线程,根据待处理业务的类型为该待处理业务分配工作线程或者并发线程,从而对线程进行调度,使相同类型的业务只会占用一个工作线程和\或多个并发线程,从而使并发全部为耗时任务时,还可以有工作线程进行业务处理,从而保证了服务器能够正常运转,避免出现线程堵塞不可用的情况,提升服务器的高可用和高并发性。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于计算机设备的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

与前述线程调度方法的实施例相对应,本申请还提供了用于执行上述线程调度方法的计算机可读存储介质的实施例。

作为一个实施例,本申请还包括一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现所述线程调度方法的任一步骤。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例以及计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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