本发明涉及线程管理领域,尤其涉及线程管理方法及装置。
背景技术:
目前,针对产品检测的任务线程分配技术中,通常都是来一个检测任务就新建一条检测线程,同时现有技术中,对于先开启的检测线程即使已经完成了检测任务,该检测线程也仍然处于开启状态。因此,如果同时产生的新检测任务过多且依然采用新建检测线程来分配处理的话,那么将会导致后台资源被大量占用,进而严重影响产品检测的效率。
技术实现要素:
本发明的主要目的在于提供一种线程管理方法及装置,旨在解决现有技术中无限次的新建并分配检测线程,进而导致后台资源被大量占用而严重影响产品检测效率的技术问题。
为实现上述目的,本发明提供一种线程管理方法,应用于产品检测,所述线程管理方法包括:
步骤S1、监测当前是否存在空闲的线程以及新的产品检测任务;
步骤S2、若当前存在空闲的线程且不存在新的产品检测任务,则休眠该空闲的线程;
步骤S3、若当前不存在空闲的线程且存在新的产品检测任务,则判断当前是否存在休眠的线程;
步骤S4、若当前存在休眠的线程,则唤醒当前休眠的线程,并将唤醒的线程分配给该新的产品检测任务;
步骤S5、执行步骤S1直至产品检测停止时退出。
优选地,所述监测当前是否存在空闲的线程以及新的产品检测任务之后包括:
若当前存在空闲的线程且存在新的产品检测任务,则将该空闲的线程分配给该新的产品检测任务。
优选地,所述监测当前是否存在空闲的线程以及新的产品检测任务之前包括:
建立固定数量的用于执行产品检测任务的线程。
优选地,所述若当前不存在空闲的线程且存在新的产品检测任务,则判断当前是否存在休眠的线程之后包括:
若当前不存在休眠的线程,则将当前新的产品检测任务缓存至预设任务队列中。
优选地,所述若当前不存在休眠的线程,则将当前新的产品检测任务缓存至预设任务队列中之后包括:
监测当前是否存在已执行完产品检测任务的线程;
若存在,则从所述任务队列中取出产品检测任务,并将该线程分配给该取出的产品检测任务。
为实现上述目的,本发明还提供一种线程管理装置,应用于产品检测,所述线程管理装置包括:
监测模块,用于监测当前是否存在空闲的线程以及新的产品检测任务;
休眠模块,用于在当前存在空闲的线程且不存在新的产品检测任务时,休眠该空闲的线程;
判断模块,用于在当前不存在空闲的线程且存在新的产品检测任务时,判断当前是否存在休眠的线程;
唤醒模块,用于在当前存在休眠的线程时,唤醒当前休眠的线程;
分配模块,用于将唤醒的线程分配给该新的产品检测任务。
优选地,所述分配模块还用于:
在当前存在空闲的线程且存在新的产品检测任务时,将该空闲的线程分配给该新的产品检测任务。
优选地,所述线程管理装置还包括:
线程模块,用于建立固定数量的用于执行产品检测任务的线程。
优选地,所述线程管理装置还包括:
缓存模块,用于在当前不存在休眠的线程时,将当前新的产品检测任务缓存至预设任务队列中。
优选地,所述监测模块还用于:监测当前是否存在已执行完产品检测任务的线程;
所述分配模块还用于:在当前存在已执行完产品检测任务的线程时,从所述任务队列中取出产品检测任务,并将该线程分配给该取出的产品检测任务。
本发明中,当产品检测任务较少时,休眠空闲的线程。而当产品检测任务较多时,若不存在空闲的线程而存在休眠的线程,则将之前休眠的线程唤醒并分配给当前的检测任务,进而可对线程的分配进行干预以防止线程的无限增加而导致后台资源被大量占用致使产品检测速度下降,从而相对提升了产品检测的速度与效率。
附图说明
图1为本发明线程管理方法一实施例的流程示意图;
图2为本发明线程管理装置第一实施例的功能模块示意图;
图3为本发明线程管理装置第二实施例的功能模块示意图;
图4为本发明线程管理装置第三实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明线程管理方法一实施例的流程示意图。本实施例中,线程管理方法包括:
步骤S10,监测当前是否存在空闲的线程以及新的产品检测任务;
本实施例中,对于监测方式,既可以是实时监测,也可以是每隔预设时长进行一次监测,同时对于预设时长的设置不限,比如每隔1分钟、10分钟等。本实施例中,线程具体用于执行产品检测任务。
本实施例中,空闲的线程具体是指没有执行产品检测任务的线程,比如从一开始就没有执行产品检测任务的线程,或者在执行完产品检测任务后处于待分配状态的线程。此外,本实施例中对于检测空闲的线程的方式不限,比如根据线程的运行状态进行确定等。
本实施例中,产品检测任务具体是指对产品进行检测的工作任务,其中,产品检测任务既可以是针对整个产品检测而言的,也可以是只针对产品的某个检测环节而言的。同时,对于产品检测任务的具体内容及形式不限,比如为指令、为程序包等。此外,本实施例中对于监测产品检测任务的监测形式不限,比如监测是否存在任务指令。
步骤S20,若当前存在空闲的线程且不存在新的产品检测任务,则休眠该空闲的线程;
本实施例中,当检测到空闲的线程时,由于当前不存在产品检测任务,因此,无需分配该空闲的检测线程,同时为避免线程开启而占用后台资源,因此,本实施例中,在不存在产品检测任务时,对空闲的线程进行休眠处理。本实施例中对于休眠线程的方式不限,具体根据实际需要进行设置。需要说明的是,休眠的线程可以在满足条件时而被唤醒。
步骤S30,若当前不存在空闲的线程且存在新的产品检测任务,则判断当前是否存在休眠的线程;
步骤S40,若当前存在休眠的线程,则唤醒当前休眠的线程,并将唤醒的线程分配给该新的产品检测任务;
本实施例中,当监测到新的产品检测任务时并不建立新的线程来执行该产品检测任务,而是进一步确定是否存在空闲的线程以及休眠的线程,如果当前不存在空闲的线程而存在休眠的线程,则可以唤醒处于休眠状态的线程,并将该唤醒后的线程分配给该新的产品检测任务,进而避免重新新建线程而对后台资源的占用,同时,在线程数量一定的情况下,既保证了后台资源的高效利用,同时也提升了线程的使用效率。
例如,有A、B、C、D四个线程,其中,在间隔时间点T处检测到线程A处于空闲状态,而线程B、C、D处于执行产品检测任务的工作状态,则休眠线程A,同时在线程A处于休眠期间,监测是否存在新的产品检测任务以及新的空闲线程(比如B、C、D任一个或多个),如果监测到新的产品检测任务,但同时不存在空闲的线程(也即B、C、D仍然处于工作状态),则将线程A唤醒,并将线程A分配给当前新的产品检测任务。
步骤S50,若当前存在空闲的线程且存在新的产品检测任务,则将该空闲的线程分配给该新的产品检测任务。
例如,在线程A处于休眠期间且未达到下一间隔时间点时,监测到新的产品检测任务,同时,存在空闲的线程B,则直接将线程B分配给该新的产品检测任务而无需唤醒线程A,进而进一步降低对后台资源的占用。
步骤S60,执行步骤S10直至产品检测停止时退出。
本实施例中,当产品检测任务较少时,休眠空闲的线程。而当产品检测任务较多时,若不存在空闲的线程而存在休眠的线程,则将之前休眠的线程唤醒并分配给当前的检测任务,进而可对线程的分配进行干预以防止线程的无限增加而导致后台资源被大量占用致使产品检测速度下降,从而相对提升了产品检测的速度与效率。
进一步可选的,在本发明线程管理方法一实施例中,在上述步骤S10之前进一步包括:建立固定数量的用于执行产品检测任务的线程。
本实施例中,在开始进行产品检测之前,预先建立固定数量的检测线程,同时所有线程都处于可分配状态。比如预先建立20条检测线程,同时开始每隔预设时长进行空闲线程的检测,例如,在间隔时长内若不存在空闲线程,则不进行休眠处理,而在间隔时长内若存在空闲的线程时,则休眠该空闲的线程。
本实施例中,通过预先建立固定数量的检测线程,从而避免线程无限次新建而导致后台资源被严重占用后使得产品检测速度下降的问题。
进一步可选的,在本发明线程管理方法一实施例中,上述步骤S30之后包括:若当前不存在休眠的线程,则将当前新的产品检测任务缓存至预设任务队列中。
本实施例中,若当前正在执行产品检测任务的检测线程的总数达到预设建立的线程的固定数量,也即当前不存在空闲的线程以及休眠的线程时,此时若新建线程,则可能导致后台资源被大量占用而降低产品检测速度,因此,通过预先建立的任务队列来缓存当前产生的新的产品检测任务。需要说明的是,本实施例中对于任务队列的数据结构形式不限,比如单向链表结构、双向链表结构等。
例如,在进行产品检测之前,预先建立多个线程,比如预先建立20条检测线程,则每产生一条产品检测任务则对应分配一条线程,而若当前已建立的线程已经分配完毕,则将当前产生的新的产品检测任务缓存至任务队列中,从而等待线程空闲时再行分配。
本实施例中,通过预先建立固定数量的线程,从而避免线程无限次新建而导致后台资源被严重占用后使得产品检测速度下降的问题,同时,在固定数量的线程被全部占用时,通过任务队列以缓存其他新的产品检测任务,进而在减少产品检测任务处理量的同时,相对提升产品的检测速度。
进一步可选的,在本发明线程管理方法另一实施例中,将当前新的产品检测任务缓存至预设任务队列中之后进一步包括:
监测当前是否存在已执行完产品检测任务的线程;
若存在,则从任务队列中取出产品检测任务,并将该线程分配给该取出的产品检测任务,其中,当任务队列为空时返回执行步骤S10。
本实施例中,在任务队列中缓存产品检测任务的同时,监测当前已分配的线程中是否存在已执行完产品检测任务的空闲线程,如果存在空闲的线程,也即存在可分配的线程时,从任务队列中取出产品检测任务,并将该空闲的检测线程分配给该取出的产品检测任务。
例如,预先建立了A、B、C、D四条线程,如果该四条线程都依次被分配了产品检测任务,则当检测到新的产品检测任务时,将产品检测任务缓存到任务队列中,同时监测A、B、C、D四条线程是否已执行完产品检测任务,假设A线程执行完了检测任务,则可将任务队列的队首所对应的产品检测任务取出,并将A线程分配给该取出的产品检测任务,从而无需再次新建新的检测任务,进而防止检测线程的无限增加而导致后台资源被大量占用致使产品检测速度下降,从而相对提升了产品检测的速度与效率。
参照图2,图2为本发明线程管理装置第一实施例的功能模块示意图。本实施例中,线程管理装置包括:
监测模块10,用于监测当前是否存在空闲的线程以及新的产品检测任务;
本实施例中,对于监测方式,既可以是实时监测,也可以是每隔预设时长进行一次监测,同时对于预设时长的设置不限,比如每隔1分钟、10分钟等。本实施例中,线程具体用于执行产品检测任务。
本实施例中,空闲的线程具体是指没有执行产品检测任务的线程,比如从一开始就没有执行产品检测任务的线程,或者在执行完产品检测任务后处于待分配状态的线程。此外,本实施例中对于检测空闲的线程的方式不限,比如根据线程的运行状态进行确定等。
本实施例中,产品检测任务具体是指对产品进行检测的工作任务,其中,产品检测任务既可以是针对整个产品检测而言的,也可以是只针对产品的某个检测环节而言的。同时,对于产品检测任务的具体内容及形式不限,比如为指令、为程序包等。此外,本实施例中对于监测产品检测任务的监测形式不限,比如监测是否存在任务指令。
休眠模块20,用于在当前存在空闲的线程且不存在新的产品检测任务时,休眠该空闲的线程;
本实施例中,当检测到空闲的线程时,由于当前不存在产品检测任务,因此,无需分配该空闲的检测线程,同时为避免线程开启而占用后台资源,因此,本实施例中,在不存在产品检测任务时,对空闲的线程进行休眠处理。本实施例中对于休眠线程的方式不限,具体根据实际需要进行设置。需要说明的是,休眠的线程可以在满足条件时而被唤醒。
判断模块30,用于在当前不存在空闲的线程且存在新的产品检测任务时,判断当前是否存在休眠的线程;
唤醒模块40,用于在当前存在休眠的线程时,唤醒当前休眠的线程;
分配模块50,用于将唤醒的线程分配给该新的产品检测任务。
本实施例中,当监测到新的产品检测任务时并不建立新的线程来执行该产品检测任务,而是进一步确定是否存在空闲的线程以及休眠的线程,如果当前不存在空闲的线程而存在休眠的线程,则可以唤醒处于休眠状态的线程,并将该唤醒后的线程分配给该新的产品检测任务,进而避免重新新建线程而对后台资源的占用,同时,在线程数量一定的情况下,既保证了后台资源的高效利用,同时也提升了线程的使用效率。
例如,有A、B、C、D四个线程,其中,在间隔时间点T处检测到线程A处于空闲状态,而线程B、C、D处于执行产品检测任务的工作状态,则休眠线程A,同时在线程A处于休眠期间,监测是否存在新的产品检测任务以及新的空闲线程(比如B、C、D任一个或多个),如果监测到新的产品检测任务,但同时不存在空闲的线程(也即B、C、D仍然处于工作状态),则将线程A唤醒,并将线程A分配给当前新的产品检测任务。
可选的,在本发明线程管理装置一实施例中,分配模块50具体还用于:若当前存在空闲的线程且存在新的产品检测任务,则将该空闲的线程分配给该新的产品检测任务。例如,在线程A处于休眠期间且未达到下一间隔时间点时,监测到新的产品检测任务,同时,存在空闲的线程B,则直接将线程B分配给该新的产品检测任务而无需唤醒线程A,进而进一步降低对后台资源的占用。
本实施例中,当产品检测任务较少时,休眠空闲的线程。而当产品检测任务较多时,若不存在空闲的线程而存在休眠的线程,则将之前休眠的线程唤醒并分配给当前的检测任务,进而可对线程的分配进行干预以防止线程的无限增加而导致后台资源被大量占用致使产品检测速度下降,从而相对提升了产品检测的速度与效率。
参照图3,图3为本发明线程管理装置第二实施例的功能模块示意图。本实施例中,线程管理装置进一步还包括:
线程模块60,用于建立固定数量的用于执行产品检测任务的线程。
本实施例中,在开始进行产品检测之前,预先建立固定数量的检测线程,同时所有线程都处于可分配状态。比如预先建立20条检测线程,同时开始每隔预设时长进行空闲线程的检测,例如,在间隔时长内若不存在空闲线程,则不进行休眠处理,而在间隔时长内若存在空闲的线程时,则休眠该空闲的线程。
本实施例中,通过预先建立固定数量的检测线程,从而避免线程无限次新建而导致后台资源被严重占用后使得产品检测速度下降的问题。
参照图4,图4为本发明线程管理装置第三实施例的功能模块示意图。本实施例中,线程管理装置进一步还包括:
缓存模块70,用于在当前不存在休眠的线程时,将当前新的产品检测任务缓存至预设任务队列中。
本实施例中,若当前正在执行产品检测任务的检测线程的总数达到预设建立的线程的固定数量,也即当前不存在空闲的线程以及休眠的线程时,此时若新建线程,则可能导致后台资源被大量占用而降低产品检测速度,因此,通过预先建立的任务队列来缓存当前产生的新的产品检测任务。需要说明的是,本实施例中对于任务队列的数据结构形式不限,比如单向链表结构、双向链表结构等。
例如,在进行产品检测之前,预先建立多个线程,比如预先建立20条检测线程,则每产生一条产品检测任务则对应分配一条线程,而若当前已建立的线程已经分配完毕,则将当前产生的新的产品检测任务缓存至任务队列中,从而等待线程空闲时再行分配。
本实施例中,通过预先建立固定数量的线程,从而避免线程无限次新建而导致后台资源被严重占用后使得产品检测速度下降的问题,同时,在固定数量的线程被全部占用时,通过任务队列以缓存其他新的产品检测任务,进而在减少产品检测任务处理量的同时,相对提升产品的检测速度。
进一步可选的,在本发明线程管理装置一实施例中,监测模块10还用于:监测当前是否存在已执行完产品检测任务的线程;分配模块50还用于:在当前存在已执行完产品检测任务的线程时,从任务队列中取出产品检测任务,并将该线程分配给该取出的产品检测任务。
本实施例中,在任务队列中缓存产品检测任务的同时,监测当前已分配的线程中是否存在已执行完产品检测任务的空闲线程,如果存在空闲的线程,也即存在可分配的线程时,从任务队列中取出产品检测任务,并将该空闲的检测线程分配给该取出的产品检测任务。
例如,预先建立了A、B、C、D四条线程,如果该四条线程都依次被分配了产品检测任务,则当检测到新的产品检测任务时,将产品检测任务缓存到任务队列中,同时监测A、B、C、D四条线程是否已执行完产品检测任务,假设A线程执行完了检测任务,则可将任务队列的队首所对应的产品检测任务取出,并将A线程分配给该取出的产品检测任务,从而无需再次新建新的检测任务,进而防止检测线程的无限增加而导致后台资源被大量占用致使产品检测速度下降,从而相对提升了产品检测的速度与效率。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。