[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

CN107463439A - 一种线程池实现方法及装置 - Google Patents

一种线程池实现方法及装置 Download PDF

Info

Publication number
CN107463439A
CN107463439A CN201710718751.0A CN201710718751A CN107463439A CN 107463439 A CN107463439 A CN 107463439A CN 201710718751 A CN201710718751 A CN 201710718751A CN 107463439 A CN107463439 A CN 107463439A
Authority
CN
China
Prior art keywords
thread
subject
pool
pending task
currently
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.)
Pending
Application number
CN201710718751.0A
Other languages
English (en)
Inventor
董梁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Inspur Genersoft Information Technology Co Ltd
Original Assignee
Shandong Inspur Genersoft Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shandong Inspur Genersoft Information Technology Co Ltd filed Critical Shandong Inspur Genersoft Information Technology Co Ltd
Priority to CN201710718751.0A priority Critical patent/CN107463439A/zh
Publication of CN107463439A publication Critical patent/CN107463439A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种线程池实现方法及装置,该方法可以包括:预先创建线程池;根据预设的线程配置参数,创建第一数量的线程,并将所述第一数量的线程存储至所述线程池中;当接收到第二数量的待执行任务时,针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程;调取所述目标线程执行当前待执行任务;当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。本方案能够提高处理任务的效率。

Description

一种线程池实现方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种线程池实现方法及装置。
背景技术
随着互联网技术的不断发展,用户对于服务器处理能力的要求越来越高。例如,在某一时刻,服务器可能接收到多个任务,那么如何处理这些任务成为技术人员比较关注的问题。
目前,服务器每一次接收到任务时,均会为每一个任务依次创建一个线程,然后利用创建的线程执行任务,最终在执行任务后销毁线程。然而,如果每一次接收到的任务较多,那么每一次为每一个任务分别创建一个线程的处理方式将会花费大量的时间,从而造成处理任务的效率较低。
发明内容
本发明实施例提供了一种线程池实现方法及装置,能够提高处理任务的效率。
第一方面,本发明实施例提供了一种线程池实现方法,预先创建线程池;
根据预设的线程配置参数,创建第一数量的线程,并将所述第一数量的线程存储至所述线程池中;还包括:
当接收到第二数量的待执行任务时,针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程;
调取所述目标线程执行当前待执行任务;
当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
优选地,
所述线程配置参数,包括:最大线程数和增量数;
所述从所述线程池中确定一个当前处于空闲状态的目标线程,包括:
判断所述线程池中是否存在有当前处于空闲状态的线程,若是,则将当前处于空闲状态的任意一个线程确定为目标线程;若否,则执行,
S1:判断当前已创建的线程的数量是否达到所述最大线程数,若是,则执行S2;若否,则执行S3;
S2:将所述当前待执行任务存储至预设的任务队列中;
S3:创建数量为所述增量数的线程,并存储至所述线程池中;
S4:将数量为所述增量数的线程中的任意一个确定为目标线程。
优选地,
在所述S2之后,进一步包括:
实时检测是否有回收到所述线程池中且当前处于空闲状态的线程;
当检测到存在有回收到所述线程池中且当前处于空闲状态的线程时,将所述线程确定为目标线程。
优选地,
所述线程配置参数,包括:时间阈值;
所述调取所述目标线程执行当前待执行任务,包括:
调取所述目标线程执行所述当前待执行任务,并开始计时;
所述当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中,包括:
确定计时是否达到所述时间阈值;
若是,则强制释放所述目标线程占用的资源,强制将所述目标线程回收到所述线程池中;
若否,则实时检测所述目标线程是否执行完成所述当前待执行任务,当所述目标线程执行完成所述当前待执行任务时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
优选地,
进一步包括:
记录并缓存每一个所述目标线程执行每一个所述待执行任务的执行信息;
所述针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程,包括:
在缓存的各个所述执行信息中,确定是否存在与所述当前待执行任务相对应的目标执行信息;当确定存在所述目标执行信息时,根据所述目标执行信息,确定相对应的第一目标线程;判断所述第一目标线程当前是否处于空闲状态,当判断出所述第一目标线程当前处于空闲状态时,将所述第一目标线程确定为目标线程;
优选地,
在所述预先创建线程池之前,进一步包括:
封装一个关闭所述线程池的公共模型;
进一步包括:当检测到系统结束时,利用封装的所述公共模型销毁已创建的各个所述线程以及所述线程池。
第二方面,本发明实施例提供了一种线程池实现装置,包括:
创建单元,用于预先创建线程池;根据预设的线程配置参数,创建第一数量的线程,并将所述第一数量的线程存储至所述线程池中;
确定单元,用于当接收到第二数量的待执行任务时,针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程;
调取单元,用于调取所述目标线程执行当前待执行任务;
回收单元,用于当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
优选地,
所述线程配置参数,包括:最大线程数和增量数;
所述确定单元,用于判断所述线程池中是否存在有当前处于空闲状态的线程,若是,则将当前处于空闲状态的任意一个线程确定为目标线程;若否,则执行,
S1:判断当前已创建的线程的数量是否达到所述最大线程数,若是,则执行S2;若否,则执行S3;
S2:将所述当前待执行任务存储至预设的任务队列中;
S3:创建数量为所述增量数的线程,并存储至所述线程池中;
S4:将数量为所述增量数的线程中的任意一个确定为目标线程。
优选地,
所述确定单元,进一步用于在将所述当前待执行任务存储至所述任务队列中后,实时检测是否有回收到所述线程池中且当前处于空闲状态的线程;当检测到存在有回收到所述线程池中且当前处于空闲状态的线程时,将所述线程确定为目标线程。
优选地,
所述线程配置参数,包括:时间阈值;
所述调取单元,用于调取所述目标线程执行所述当前待执行任务,并开始计时;
所述回收单元,用于确定计时是否达到所述时间阈值;若是,则强制释放所述目标线程占用的资源,强制将所述目标线程回收到所述线程池中;若否,则实时检测所述目标线程是否执行完成所述当前待执行任务,当所述目标线程执行完成所述当前待执行任务时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
优选地,
进一步包括:缓存单元;
所述缓存单元,用于记录并缓存每一个所述目标线程执行每一个所述待执行任务的执行信息;
所述确定单元,用于在所述缓存单元缓存的各个所述执行信息中,确定是否存在与所述当前待执行任务相对应的目标执行信息;当确定存在所述目标执行信息时,根据所述目标执行信息,确定相对应的第一目标线程;判断所述第一目标线程当前是否处于空闲状态,当判断出所述第一目标线程当前处于空闲状态时,将所述第一目标线程确定为目标线程;
优选地,
进一步包括:封装单元和处理单元;
所述封装单元,用于在创建线程池之前,封装一个关闭所述线程池的公共模型;
所述处理单元,用于当检测到系统结束时,利用封装的所述公共模型销毁已创建的各个所述线程以及所述线程池。
本发明实施例提供了一种线程池实现方法及装置,通过在还未接收任务时创建线程池,并创建第一数量的线程存储至该线程池中,那么之后在接收到待执行任务时,可直接在该线程池中选择一个处于空闲状态的目标线程来执行当前待执行任务,而不必再针对接收到的每一个待执行任务,均再依次创建一个线程,而且最后当目标线程满足预设的回收条件时,还会将目标线程回收到线程池中,以便再接收到待执行任务时,进行执行处理,从而避免了每一次接收到任务时,每一次均需要为每一个任务创建线程的弊端,因此本方案缩短了任务处理的时间,提高了任务处理的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例提供的一种线程池实现方法的流程图;
图2是本发明另一个实施例提供的一种线程池实现方法的流程图;
图3是本发明一个实施例提供的一种线程池实现装置的结构示意图;
图4是本发明另一个实施例提供的一种线程池实现装置的结构示意图;
图5是本发明又一个实施例提供的一种线程池实现装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种线程池实现方法,该方法可以包括以下步骤:
步骤101:预先创建线程池。
步骤102:根据预设的线程配置参数,创建第一数量的线程,并将所述第一数量的线程存储至所述线程池中。
步骤103:当接收到第二数量的待执行任务时,针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程。
步骤104:调取所述目标线程执行当前待执行任务。
步骤105:当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
在图1所示的实施例中,通过在还未接收任务时创建线程池,并创建第一数量的线程存储至该线程池中,那么之后在接收到待执行任务时,可直接在该线程池中选择一个处于空闲状态的目标线程来执行当前待执行任务,而不必再针对接收到的每一个待执行任务,均再依次创建一个线程,而且最后当目标线程满足预设的回收条件时,还会将目标线程回收到线程池中,以便再接收到待执行任务时,进行执行处理,从而避免了每一次接收到任务时,每一次均需要为每一个任务创建线程的弊端,因此本方案缩短了任务处理的时间,提高了任务处理的效率。
为了能够确定一个当前处于空闲状态的目标线程,在本发明一个实施例中,所述线程配置参数,包括:最大线程数和增量数;
所述步骤103的具体实施方式,可包括:判断所述线程池中是否存在有当前处于空闲状态的线程,若是,则将当前处于空闲状态的任意一个线程确定为目标线程;若否,则执行,
S1:判断当前已创建的线程的数量是否达到所述最大线程数,若是,则执行S2;若否,则执行S3;
S2:将所述当前待执行任务存储至预设的任务队列中;
S3:创建数量为所述增量数的线程,并存储至所述线程池中;
S4:将数量为所述增量数的线程中的任意一个确定为目标线程。
其中,预设的线程配置参数中还可包括有线程活动数,如,线程活动数为200,那么在创建线程池后,根据预设的线程活动数,创建200(即为第一数量)个线程。
例如,最大线程数为500个,增量数为20个,那么针对当前待执行任务,假设能够在线程池中找到一个当前处于空闲状态的线程,则直接将该线程确定为目标线程即可,但若不存在,则确定还能否创建新的线程,假设当前已创建的线程数量为500个,由于已经达到最大线程数,则此时不能再创建新的线程,通过将当前待执行任务存储在预设的任务队列中,直到当有回收到线程池中且处于空闲状体的线程时,再选择目标线程,等待被执行;倘若当前已经创建的线程数量为200个,则此时可批量创建20个新的线程,然后在这20个新的线程中确定一个目标线程。
为了能够使存放在任务队列中的待执行任务被执行,在本发明一个实施例中,在所述S2之后,进一步包括:实时检测是否有回收到所述线程池中且当前处于空闲状态的线程;当检测到存在有回收到所述线程池中且当前处于空闲状态的线程时,将所述线程确定为目标线程。
例如,当前共创建了500个线程,其中,预设的最大线程数也为500,那么针对存放在任务队列中的待执行任务,可等待一段时间,直到存在有被回收到线程池中的线程时,再次确定目标线程。
在本发明一个实施例中,所述线程配置参数,包括:时间阈值;所述步骤104的具体实施方式,可包括:调取所述目标线程执行所述当前待执行任务,并开始计时;
所述步骤105的具体实施方式,可包括:确定计时是否达到所述时间阈值;
若是,则强制释放所述目标线程占用的资源,强制将所述目标线程回收到所述线程池中;
若否,则实时检测所述目标线程是否执行完成所述当前待执行任务,当所述目标线程执行完成所述当前待执行任务时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
其中,预设的时间阈值可根据用户的实际需求进行设定。
例如,预设的时间阈值为3秒,那么在计时达到3秒时,即使目标线程没有执行完成当前待执行任务,也会强制目标线程释放占用的资源,并强制将目标线程回收到线程池中;而当计时没有达到时间阈值3秒,但目标线程已经执行完成当前待执行任务时,则释放目标线程占用的资源,并将目标线程回收到线程池中,以执行其它待执行任务。
在本发明一个实施例中,进一步包括:记录并缓存每一个所述目标线程执行每一个所述待执行任务的执行信息;
所述步骤103的具体实施方式,可包括:
在缓存的各个所述执行信息中,确定是否存在与所述当前待执行任务相对应的目标执行信息;当确定存在所述目标执行信息时,根据所述目标执行信息,确定相对应的第一目标线程;判断所述第一目标线程当前是否处于空闲状态,当判断出所述第一目标线程当前处于空闲状态时,将所述第一目标线程确定为目标线程。
例如,当前待执行任务是加载某网页,那么在线程3完成加载某网页后,可记录其对应的执行信息,如线程3完成加载某网页,从而当再次接收到相应的待执行任务时,如已创建100个线程,那么可先不用盲目的判断每一个线程的状态,而是通过缓存的执行信息,直接判断线程3当前是否处于空闲状态,若是,则直接将线程3作为目标线程,从而省掉了多次判断的过程,从而能够进一步提高任务的执行效率。
在本发明一个实施例中,在所述步骤101之前,进一步包括:封装一个关闭所述线程池的公共模型;可进一步包括:当检测到系统结束时,利用封装的所述公共模型销毁已创建的各个所述线程以及所述线程池。
本发明实施例中,在系统结束时可一次性销毁所有的线程,不过在创建的线程数快要达到最大线程数时,若此时不存在较大量的并发任务,那么为了减少占用内存的资源,提高性能,则可销毁一部分一直处于空闲状态的线程。
下面将详细说明本发明实施例提供的一种线程池实现方法,如图2所示,该方法可以包括以下步骤:
步骤201:预先创建一个线程池。
本发明实施例中,可在系统启动时创建线程池。那么创建线程池时,需要初始化如下关键代码:
executorService=Executors.newCachedThreadPool();
步骤202:根据预设的线程配置参数,创建n1个线程,并将n1个线程存储至线程池中。
本发明实施例中,线程配置参数中可包括有:线程活动数n1、最大线程数n、增量数a以及时间阈值t,其中,各个参数的具体取值可根据实际的用户需求进行设定。例如,n1=100、n=1000、a=50以及t=5秒。那么首次创建线程时,可按照线程活动数进行创建,这样,线程池中有100个线程处于空闲状态,可用来执行之后接收到的待执行任务。
其中,这部分可能用到的关键代码如下:
步骤203:当接收到n2个待执行任务时,针对每一个待执行任务,判断线程池中是否存在有当前处于空闲状态的线程,若是,则执行步骤204,若否,则执行步骤205。
举例说明1,n2=50,线程池中当前存在有100个处于空闲状态的线程,那么此时针对50个待执行任务中的每一个待执行任务,如待执行任务1,可从100个空闲状态的线程中确定任意一个作为待执行任务1的目标线程。
举例说明2,n2=150,线程池中当前存在有100个处于空闲状态的线程,那么此时可直接保证150个待执行任务中的100个被执行,而剩余50个待执行任务中的每一个,可执行步骤205。
步骤204:将当前处于空闲状态的任意一个线程确定为目标线程,并执行步骤210。
步骤205:判断当前已创建的线程的数量是否达到预设的最大线程数n,若是,则执行步骤206,若否,则执行步骤208。
其中,为了保证系统能够正常运行,避免由于占用内存资源过多导致而系统出现瘫痪的情况,则已经创建的线程数量不得超过最大线程数。
上述步骤203中的举例说明2,针对剩余的50个待执行任务中的每一个,假设1:当前只创建了上述步骤202中的100个线程,则已创建的线程的数量100个远小于最大线程数1000个,那么针对当前情况,则执行步骤208。假设2:当前在创建了上述步骤202中的100个线程之后,又根据增量数创建了多个线程,如已创建的线程的数量为1000,那么针对当前情况,则执行步骤206。
步骤206:将当前待执行任务存储至预设的任务队列中。
本发明实施例中,可预先设置指定大小的任务队列,用来存放还未被执行的任务。
针对上述步骤205中的假设2,由于已经创建的线程数量达到最大线程数,即使线程池中不存在当前处于空闲状态的线程,则也不再创建新的线程,而是将这50个待执行任务,存放至任务队列中,并执行步骤207。
步骤207:实时检测是否有回收到线程池中且当前处于空闲状态的线程,当检测到存在有回收到线程池中且当前处于空闲状态的线程时,将线程确定为目标线程,并执行步骤210。
根据上述步骤206中的分析,可以确定出现在有1000个线程均不是处于空闲状态,但是根据预设的回收规则,最后会将线程进行回收,因此,可在线程回收之后,利用回收后的线程执行任务队列中还未被执行的任务。例1,当前时刻检测到共回收了100个线程,那么存放在任务队列中的50个任务中的每一个,均可在100个回收的线程中确定一个未被选择的线程;例2,当前时刻检测到共回收了20个线程,那么可按照任务队列先进先出的原则,为先存放进任务队列中的20个还未被执行的任务选择一个还未被选择的线程,而剩余存放的30个待执行任务,当再次检测到存在有回收到线程池中的线程时,再被执行。
步骤208:创建a(a为预设的增量数)个线程,并存储至线程池中。
针对上述步骤205中的假设1,由于已创建的线程的数量100远远小于最大线程数,因此当线程池中不存在处于空闲状态的线程时,可按照预设的增量数,再次创建新的线程,根据上述步骤202,则本发明实施例中会再次创建50个新的线程。
步骤209:将a个线程中的任意一个确定为目标线程。
那么针对上述步骤208中剩余的50个待执行任务中的每一个,可将创建的新线程中还未被选择的任意一个确定为目标线程。
步骤210:调取目标线程执行当前待执行任务,并开始计时。
本发明实施例中,可在步骤201之前,构造一个方法,以使目标线程通过调用该方法执行该当前待执行任务,该方法中的关键代码可如下:
线程池调用业务逻辑的部分代码如下:
步骤211:确定计时是否达到预设的时间阈值,若是,则执行步骤212,若否,则执行步骤213。
根据上述步骤202,时间阈值t=5秒,也就是说,在计时达到5秒时,即使目标线程没有执行完成当前待执行任务,会强制目标线程释放占用的资源,并强制将目标线程回收到线程池中。
步骤212:强制释放目标线程占用的资源,并强制将目标线程回收到线程池中,并结束当前流程。
步骤213:实时检测目标线程是否执行完成当前待执行任务,若是,则执行步骤214。
本发明实施例中,当计时没有达到时间阈值5秒,但目标线程已经执行完成当前待执行任务时,则释放目标线程占用的资源,并将目标线程回收到线程池中,以执行其它待执行任务。
步骤214:释放目标线程占用的资源,将目标线程回收到线程池中。
步骤215:记录并缓存目标线程执行当前待执行任务的执行信息。
例如,当前待执行任务是打开网站A,若线程1打开网站A,则记录其对应的执行信息,如线程1执行完成打开网站A,那么当再次接收到相应的待执行任务时,可先不用针对每一个线程均判断一遍,而是通过缓存中记录的执行信息,直接判断线程1当前是否处于空闲状态,若是,则直接将线程1作为目标线程。
步骤216:当检测到系统结束时,销毁已创建的各个线程以及线程池。
例如,可预先封装一个STOP模型(也即STOP方法),那么在系统结束时,通过调用该方法完成对已创建的各个线程以及线程池的销毁。其中,STOP方法的关键代码可如下:
如图3所示,本发明实施例提供了一种线程池实现装置,包括:
创建单元301,用于预先创建线程池;根据预设的线程配置参数,创建第一数量的线程,并将所述第一数量的线程存储至所述线程池中;
确定单元302,用于当接收到第二数量的待执行任务时,针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程;
调取单元303,用于调取所述目标线程执行当前待执行任务;
回收单元304,用于当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
在本发明一个实施例中,所述线程配置参数,包括:最大线程数和增量数;所述确定单元302,用于判断所述线程池中是否存在有当前处于空闲状态的线程,若是,则将当前处于空闲状态的任意一个线程确定为目标线程;若否,则执行,
S1:判断当前已创建的线程的数量是否达到所述最大线程数,若是,则执行S2;若否,则执行S3;
S2:将所述当前待执行任务存储至预设的任务队列中;
S3:创建数量为所述增量数的线程,并存储至所述线程池中;
S4:将数量为所述增量数的线程中的任意一个确定为目标线程。
在本发明一个实施例中,所述确定单元,进一步用于在将所述当前待执行任务存储至所述任务队列中后,实时检测是否有回收到所述线程池中且当前处于空闲状态的线程;当检测到存在有回收到所述线程池中且当前处于空闲状态的线程时,将所述线程确定为目标线程。
在本发明一个实施例中,所述线程配置参数,包括:时间阈值;
所述调取单元303,用于调取所述目标线程执行所述当前待执行任务,并开始计时;
所述回收单元304,用于确定计时是否达到所述时间阈值;若是,则强制释放所述目标线程占用的资源,强制将所述目标线程回收到所述线程池中;若否,则实时检测所述目标线程是否执行完成所述当前待执行任务,当所述目标线程执行完成所述当前待执行任务时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
如图4所示,进一步包括:缓存单元401;
所述缓存单元401,用于记录并缓存每一个所述目标线程执行每一个所述待执行任务的执行信息;
所述确定单元304,用于在所述缓存单元缓存的各个所述执行信息中,确定是否存在与所述当前待执行任务相对应的目标执行信息;当确定存在所述目标执行信息时,根据所述目标执行信息,确定相对应的第一目标线程;判断所述第一目标线程当前是否处于空闲状态,当判断出所述第一目标线程当前处于空闲状态时,将所述第一目标线程确定为目标线程;
如图5所示,本发明一个实施例中,进一步包括:封装单元501和处理单元502;
所述封装单元501,用于在创建线程池之前,封装一个关闭所述线程池的公共模型;
所述处理单元502,用于当检测到系统结束时,利用封装的所述公共模型销毁已创建的各个所述线程以及所述线程池。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本发明实施例提供了一种计算机可读介质,包括计算机执行指令,当存储控制器的处理器执行所述计算机执行指令时,所述存储控制器执行上述任一实施例中的线程池实现方法。
本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述存储控制器执行上述任一实施例中的线程池实现方法。
综上,本发明各个实施例至少具有如下有益效果:
1、在本发明实施例中,通过在还未接收任务时创建线程池,并创建第一数量的线程存储至该线程池中,那么之后在接收到待执行任务时,可直接在该线程池中选择一个处于空闲状态的目标线程来执行当前待执行任务,而不必再针对接收到的每一个待执行任务,均再依次创建一个线程,而且最后当目标线程满足预设的回收条件时,还会将目标线程回收到线程池中,以便再接收到待执行任务时,进行执行处理,从而避免了每一次接收到任务时,每一次均需要为每一个任务创建线程的弊端,因此本方案缩短了任务处理的时间,提高了任务处理的效率。
2、在本发明实施例中,当线程池中不存在当前处于空闲状态的线程时,若此时已经创建的线程数量未达到预设的最大线程数,则可以按照预设的增量数再创建一定数量的线程,以便处理当前需要处理的待执行任务,从而进一步提高任务处理的效率,而且之后在任务较少时,为减少内存资源的占用,还可对一部分经常处于空闲状态的线程进行销毁。
3、在本发明实施例中,为了避免由于其它某些故障,导致将线程分配给某一待执行任务时,一直无法执行的问题,从而通过时间阈值,这样,在调取线程后开始计时,若计时达到时间阈值,那么即使线程未执行完成,则会将线程进行强制收回,以不影响其它待执行任务的执行,从而能够进一步提高任务处理的效率。
4、在本发明实施例中,通过记录并缓存每一个目标线程执行每一个待执行任务的执行信息,从而之后在接收到相同任务时,可通过执行信息,确定相对应的第一目标线程,此时若判断出第一目标线程处于空闲状态,则可直接将该第一目标线程确定为目标线程,而避免了再针对已创建的每一个线程均判断一次状态的过程,从而也进一步提高了任务处理的效率。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种线程池实现方法,其特征在于,
预先创建线程池;
根据预设的线程配置参数,创建第一数量的线程,并将所述第一数量的线程存储至所述线程池中;还包括:
当接收到第二数量的待执行任务时,针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程;
调取所述目标线程执行当前待执行任务;
当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
2.根据权利要求1所述的方法,其特征在于,
所述线程配置参数,包括:最大线程数和增量数;
所述从所述线程池中确定一个当前处于空闲状态的目标线程,包括:
判断所述线程池中是否存在有当前处于空闲状态的线程,若是,则将当前处于空闲状态的任意一个线程确定为目标线程;若否,则执行,
S1:判断当前已创建的线程的数量是否达到所述最大线程数,若是,则执行S2;若否,则执行S3;
S2:将所述当前待执行任务存储至预设的任务队列中;
S3:创建数量为所述增量数的线程,并存储至所述线程池中;
S4:将数量为所述增量数的线程中的任意一个确定为目标线程。
3.根据权利要求2所述的方法,其特征在于,
在所述S2之后,进一步包括:
实时检测是否有回收到所述线程池中且当前处于空闲状态的线程;
当检测到存在有回收到所述线程池中且当前处于空闲状态的线程时,将所述线程确定为目标线程。
4.根据权利要求1所述的方法,其特征在于,
所述线程配置参数,包括:时间阈值;
所述调取所述目标线程执行当前待执行任务,包括:
调取所述目标线程执行所述当前待执行任务,并开始计时;
所述当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中,包括:
确定计时是否达到所述时间阈值;
若是,则强制释放所述目标线程占用的资源,强制将所述目标线程回收到所述线程池中;
若否,则实时检测所述目标线程是否执行完成所述当前待执行任务,当所述目标线程执行完成所述当前待执行任务时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
5.根据权利要求1-4任一所述的方法,其特征在于,
进一步包括:
记录并缓存每一个所述目标线程执行每一个所述待执行任务的执行信息;
所述针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程,包括:
在缓存的各个所述执行信息中,确定是否存在与所述当前待执行任务相对应的目标执行信息;当确定存在所述目标执行信息时,根据所述目标执行信息,确定相对应的第一目标线程;判断所述第一目标线程当前是否处于空闲状态,当判断出所述第一目标线程当前处于空闲状态时,将所述第一目标线程确定为目标线程;
和/或,
在所述预先创建线程池之前,进一步包括:
封装一个关闭所述线程池的公共模型;
进一步包括:当检测到系统结束时,利用封装的所述公共模型销毁已创建的各个所述线程以及所述线程池。
6.一种线程池实现装置,其特征在于,包括:
创建单元,用于预先创建线程池;根据预设的线程配置参数,创建第一数量的线程,并将所述第一数量的线程存储至所述线程池中;
确定单元,用于当接收到第二数量的待执行任务时,针对每一个所述待执行任务,从所述线程池中确定一个当前处于空闲状态的目标线程;
调取单元,用于调取所述目标线程执行当前待执行任务;
回收单元,用于当所述目标线程满足预设的回收条件时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
7.根据权利要求6所述的装置,其特征在于,
所述线程配置参数,包括:最大线程数和增量数;
所述确定单元,用于判断所述线程池中是否存在有当前处于空闲状态的线程,若是,则将当前处于空闲状态的任意一个线程确定为目标线程;若否,则执行,
S1:判断当前已创建的线程的数量是否达到所述最大线程数,若是,则执行S2;若否,则执行S3;
S2:将所述当前待执行任务存储至预设的任务队列中;
S3:创建数量为所述增量数的线程,并存储至所述线程池中;
S4:将数量为所述增量数的线程中的任意一个确定为目标线程。
8.根据权利要求7所述的装置,其特征在于,
所述确定单元,进一步用于在将所述当前待执行任务存储至所述任务队列中后,实时检测是否有回收到所述线程池中且当前处于空闲状态的线程;当检测到存在有回收到所述线程池中且当前处于空闲状态的线程时,将所述线程确定为目标线程。
9.根据权利要求6所述的装置,其特征在于,
所述线程配置参数,包括:时间阈值;
所述调取单元,用于调取所述目标线程执行所述当前待执行任务,并开始计时;
所述回收单元,用于确定计时是否达到所述时间阈值;若是,则强制释放所述目标线程占用的资源,强制将所述目标线程回收到所述线程池中;若否,则实时检测所述目标线程是否执行完成所述当前待执行任务,当所述目标线程执行完成所述当前待执行任务时,释放所述目标线程占用的资源,将所述目标线程回收到所述线程池中。
10.根据权利要求6-9任一所述的装置,其特征在于,
进一步包括:缓存单元;
所述缓存单元,用于记录并缓存每一个所述目标线程执行每一个所述待执行任务的执行信息;
所述确定单元,用于在所述缓存单元缓存的各个所述执行信息中,确定是否存在与所述当前待执行任务相对应的目标执行信息;当确定存在所述目标执行信息时,根据所述目标执行信息,确定相对应的第一目标线程;判断所述第一目标线程当前是否处于空闲状态,当判断出所述第一目标线程当前处于空闲状态时,将所述第一目标线程确定为目标线程;
和/或,
进一步包括:封装单元和处理单元;
所述封装单元,用于在创建线程池之前,封装一个关闭所述线程池的公共模型;
所述处理单元,用于当检测到系统结束时,利用封装的所述公共模型销毁已创建的各个所述线程以及所述线程池。
CN201710718751.0A 2017-08-21 2017-08-21 一种线程池实现方法及装置 Pending CN107463439A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710718751.0A CN107463439A (zh) 2017-08-21 2017-08-21 一种线程池实现方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710718751.0A CN107463439A (zh) 2017-08-21 2017-08-21 一种线程池实现方法及装置

Publications (1)

Publication Number Publication Date
CN107463439A true CN107463439A (zh) 2017-12-12

Family

ID=60549137

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710718751.0A Pending CN107463439A (zh) 2017-08-21 2017-08-21 一种线程池实现方法及装置

Country Status (1)

Country Link
CN (1) CN107463439A (zh)

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108345499A (zh) * 2018-02-01 2018-07-31 平安科技(深圳)有限公司 统一线程池处理方法、应用服务器及计算机可读存储介质
CN108829521A (zh) * 2018-06-13 2018-11-16 平安科技(深圳)有限公司 任务处理方法、装置、计算机设备及存储介质
CN108920275A (zh) * 2018-06-25 2018-11-30 郑州云海信息技术有限公司 一种抓取黑盒日志的方法、装置、设备及计算机存储介质
CN109189483A (zh) * 2018-08-02 2019-01-11 优视科技新加坡有限公司 任务执行的调控方法、装置、设备/终端/服务器及存储介质
CN109189506A (zh) * 2018-08-06 2019-01-11 北京奇虎科技有限公司 一种基于php异步处理任务的方法及装置
CN109271252A (zh) * 2018-08-29 2019-01-25 华为技术有限公司 一种调整线程数的方法及装置
CN109388485A (zh) * 2018-09-26 2019-02-26 广州虎牙信息科技有限公司 一种任务执行线程的处理方法、装置、设备及存储介质
CN109542640A (zh) * 2018-11-13 2019-03-29 平安科技(深圳)有限公司 图片上传方法、装置、计算机设备及存储介质
CN110032434A (zh) * 2019-03-12 2019-07-19 平安普惠企业管理有限公司 一种信号量许可的调整方法及装置
CN110413390A (zh) * 2019-07-24 2019-11-05 深圳市盟天科技有限公司 线程任务处理方法、装置、服务器及存储介质
CN110633133A (zh) * 2018-06-21 2019-12-31 中兴通讯股份有限公司 一种任务处理方法、装置及计算机可读存储介质
CN110908784A (zh) * 2019-11-12 2020-03-24 苏州智加科技有限公司 图像标注方法、装置、设备及存储介质
CN111338787A (zh) * 2020-02-04 2020-06-26 浙江大华技术股份有限公司 一种数据处理方法及装置、存储介质、电子装置
CN111432243A (zh) * 2020-04-01 2020-07-17 山东汇贸电子口岸有限公司 视频转码方法及装置
CN111552567A (zh) * 2020-04-27 2020-08-18 北京奇艺世纪科技有限公司 一种线程管理方法、装置、电子设备及存储介质
CN111625336A (zh) * 2020-05-22 2020-09-04 金蝶软件(中国)有限公司 线程数据处理方法及其装置
CN111651328A (zh) * 2020-06-08 2020-09-11 北京字节跳动网络技术有限公司 一种线程监控方法及装置
CN111782293A (zh) * 2020-06-28 2020-10-16 珠海豹趣科技有限公司 一种任务处理方法、装置、电子设备及可读存储介质
CN111782295A (zh) * 2020-06-29 2020-10-16 珠海豹趣科技有限公司 一种应用程序的运行方法、装置、电子设备及存储介质
CN112035255A (zh) * 2020-08-28 2020-12-04 北京浪潮数据技术有限公司 线程池资源管理任务处理方法、装置、设备及存储介质
CN112416584A (zh) * 2020-11-18 2021-02-26 捷开通讯(深圳)有限公司 一种进程通信方法、装置、存储介质及移动终端
CN112667385A (zh) * 2021-01-15 2021-04-16 北京金和网络股份有限公司 一种云服务系统及其任务执行方法和装置及服务器
CN113727110A (zh) * 2021-08-27 2021-11-30 猪八戒股份有限公司 将h264格式转换为mp4格式的方法、装置及介质
CN113742355A (zh) * 2020-06-29 2021-12-03 北京沃东天骏信息技术有限公司 更新库存的方法、装置、设备和计算机可读介质
CN114201726A (zh) * 2020-09-18 2022-03-18 深圳先进技术研究院 一种卷积运算优化方法、系统、终端以及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101135981A (zh) * 2007-08-29 2008-03-05 中兴通讯股份有限公司 一种实现批量报表生成的方法及装置
CN101290619A (zh) * 2007-04-20 2008-10-22 西北民族大学 基于内容的藏文网站唐卡图像搜索引擎智能机器人搜索方法
US20090172674A1 (en) * 2007-12-28 2009-07-02 International Business Machines Corporation Managing the computer collection of information in an information technology environment
US20120297393A1 (en) * 2009-12-30 2012-11-22 Zte Corporation Data Collecting Method, Data Collecting Apparatus and Network Management Device
CN103366471A (zh) * 2013-06-26 2013-10-23 福建联迪商用设备有限公司 一种联机业务并发处理方法、系统及服务器
US20150135183A1 (en) * 2013-11-12 2015-05-14 Oxide Interactive, LLC Method and system of a hierarchical task scheduler for a multi-thread system
CN106681811A (zh) * 2016-12-08 2017-05-17 腾讯科技(深圳)有限公司 基于线程池的多线程调度方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101290619A (zh) * 2007-04-20 2008-10-22 西北民族大学 基于内容的藏文网站唐卡图像搜索引擎智能机器人搜索方法
CN101135981A (zh) * 2007-08-29 2008-03-05 中兴通讯股份有限公司 一种实现批量报表生成的方法及装置
US20090172674A1 (en) * 2007-12-28 2009-07-02 International Business Machines Corporation Managing the computer collection of information in an information technology environment
US20120297393A1 (en) * 2009-12-30 2012-11-22 Zte Corporation Data Collecting Method, Data Collecting Apparatus and Network Management Device
CN103366471A (zh) * 2013-06-26 2013-10-23 福建联迪商用设备有限公司 一种联机业务并发处理方法、系统及服务器
US20150135183A1 (en) * 2013-11-12 2015-05-14 Oxide Interactive, LLC Method and system of a hierarchical task scheduler for a multi-thread system
CN106681811A (zh) * 2016-12-08 2017-05-17 腾讯科技(深圳)有限公司 基于线程池的多线程调度方法及装置

Cited By (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108345499A (zh) * 2018-02-01 2018-07-31 平安科技(深圳)有限公司 统一线程池处理方法、应用服务器及计算机可读存储介质
CN108829521A (zh) * 2018-06-13 2018-11-16 平安科技(深圳)有限公司 任务处理方法、装置、计算机设备及存储介质
CN110633133A (zh) * 2018-06-21 2019-12-31 中兴通讯股份有限公司 一种任务处理方法、装置及计算机可读存储介质
CN108920275A (zh) * 2018-06-25 2018-11-30 郑州云海信息技术有限公司 一种抓取黑盒日志的方法、装置、设备及计算机存储介质
CN109189483A (zh) * 2018-08-02 2019-01-11 优视科技新加坡有限公司 任务执行的调控方法、装置、设备/终端/服务器及存储介质
WO2020026010A3 (zh) * 2018-08-02 2020-03-05 优视科技新加坡有限公司 任务执行的调控方法、装置、设备/终端/服务器及存储介质
CN109189506A (zh) * 2018-08-06 2019-01-11 北京奇虎科技有限公司 一种基于php异步处理任务的方法及装置
CN109271252A (zh) * 2018-08-29 2019-01-25 华为技术有限公司 一种调整线程数的方法及装置
CN109388485A (zh) * 2018-09-26 2019-02-26 广州虎牙信息科技有限公司 一种任务执行线程的处理方法、装置、设备及存储介质
CN109388485B (zh) * 2018-09-26 2021-01-22 广州虎牙信息科技有限公司 一种任务执行线程的处理方法、装置、设备及存储介质
CN109542640A (zh) * 2018-11-13 2019-03-29 平安科技(深圳)有限公司 图片上传方法、装置、计算机设备及存储介质
CN109542640B (zh) * 2018-11-13 2023-08-11 平安科技(深圳)有限公司 图片上传方法、装置、计算机设备及存储介质
CN110032434A (zh) * 2019-03-12 2019-07-19 平安普惠企业管理有限公司 一种信号量许可的调整方法及装置
CN110413390A (zh) * 2019-07-24 2019-11-05 深圳市盟天科技有限公司 线程任务处理方法、装置、服务器及存储介质
CN110908784A (zh) * 2019-11-12 2020-03-24 苏州智加科技有限公司 图像标注方法、装置、设备及存储介质
CN110908784B (zh) * 2019-11-12 2022-09-20 苏州智加科技有限公司 图像标注方法、装置、设备及存储介质
CN111338787A (zh) * 2020-02-04 2020-06-26 浙江大华技术股份有限公司 一种数据处理方法及装置、存储介质、电子装置
CN111338787B (zh) * 2020-02-04 2023-09-01 浙江大华技术股份有限公司 一种数据处理方法及装置、存储介质、电子装置
CN111432243A (zh) * 2020-04-01 2020-07-17 山东汇贸电子口岸有限公司 视频转码方法及装置
CN111552567A (zh) * 2020-04-27 2020-08-18 北京奇艺世纪科技有限公司 一种线程管理方法、装置、电子设备及存储介质
CN111625336A (zh) * 2020-05-22 2020-09-04 金蝶软件(中国)有限公司 线程数据处理方法及其装置
CN111625336B (zh) * 2020-05-22 2024-03-19 金蝶软件(中国)有限公司 线程数据处理方法及其装置
CN111651328A (zh) * 2020-06-08 2020-09-11 北京字节跳动网络技术有限公司 一种线程监控方法及装置
CN111782293A (zh) * 2020-06-28 2020-10-16 珠海豹趣科技有限公司 一种任务处理方法、装置、电子设备及可读存储介质
CN111782295B (zh) * 2020-06-29 2023-08-29 珠海豹趣科技有限公司 一种应用程序的运行方法、装置、电子设备及存储介质
CN113742355A (zh) * 2020-06-29 2021-12-03 北京沃东天骏信息技术有限公司 更新库存的方法、装置、设备和计算机可读介质
CN111782295A (zh) * 2020-06-29 2020-10-16 珠海豹趣科技有限公司 一种应用程序的运行方法、装置、电子设备及存储介质
CN112035255A (zh) * 2020-08-28 2020-12-04 北京浪潮数据技术有限公司 线程池资源管理任务处理方法、装置、设备及存储介质
CN114201726A (zh) * 2020-09-18 2022-03-18 深圳先进技术研究院 一种卷积运算优化方法、系统、终端以及存储介质
WO2022104924A1 (zh) * 2020-11-18 2022-05-27 捷开通讯(深圳)有限公司 进程通信方法、装置、存储介质及移动终端
CN112416584B (zh) * 2020-11-18 2023-12-19 捷开通讯(深圳)有限公司 一种进程通信方法、装置、存储介质及移动终端
CN112416584A (zh) * 2020-11-18 2021-02-26 捷开通讯(深圳)有限公司 一种进程通信方法、装置、存储介质及移动终端
CN112667385A (zh) * 2021-01-15 2021-04-16 北京金和网络股份有限公司 一种云服务系统及其任务执行方法和装置及服务器
CN113727110A (zh) * 2021-08-27 2021-11-30 猪八戒股份有限公司 将h264格式转换为mp4格式的方法、装置及介质

Similar Documents

Publication Publication Date Title
CN107463439A (zh) 一种线程池实现方法及装置
CN100549982C (zh) 基于动态性能监控的存储器管理设备、方法和系统
CN101432702B (zh) 在事务处理码内对存储器分配和解除分配的系统和方法
CN107391268A (zh) 服务请求处理方法及装置
CN104063293B (zh) 一种数据备份方法及流计算系统
US6996821B1 (en) Data processing systems and method for batching tasks of the same type in an instruction cache
CN106952158A (zh) 解决热点账户问题的记账方法及设备
CN103810048A (zh) 一种面向资源利用最优的线程数量自动调整方法及装置
CN106547612A (zh) 一种多任务处理方法及装置
CN104461758B (zh) 一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构
CN103927305B (zh) 一种对内存溢出进行控制的方法和设备
CN113435998B (zh) 贷款逾期预测方法、装置、电子设备及存储介质
CN107278296A (zh) 用于响应于事务执行生成跟踪数据的装置和方法
CN107360149B (zh) 一种基于输出子集权重分配的拟态判决方法及装置
WO2021047398A1 (zh) 存储块回收方法、装置、存储介质及电子设备
CN103034538A (zh) 一种嵌入式操作系统中驱动程序的多级缓存处理方法
CN105373434B (zh) 资源管理系统及方法
US20230394307A1 (en) Data caching method and apparatus for multiple concurrent deep learning training tasks
CN107065616A (zh) 联动控制方法及装置、计算机可读存储介质
CN107861878A (zh) Java应用程序性能问题定位的方法、装置和设备
CN107526622A (zh) Linux的快速异常处理方法及装置
CN108648086A (zh) 一种金融量化交易处理方法及装置
CN105573721A (zh) 用以改善在处理器中重新执行加载的装置与方法
CN1950775B (zh) 用于程序执行期间的入侵检测的方法,设备和计算机系统
CN107544840A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20171212