CN114579323A - 一种线程处理方法、装置、设备及介质 - Google Patents

一种线程处理方法、装置、设备及介质 Download PDF

Info

Publication number
CN114579323A
CN114579323A CN202210223201.2A CN202210223201A CN114579323A CN 114579323 A CN114579323 A CN 114579323A CN 202210223201 A CN202210223201 A CN 202210223201A CN 114579323 A CN114579323 A CN 114579323A
Authority
CN
China
Prior art keywords
thread
idle
threads
processed
task
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
CN202210223201.2A
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.)
Shanghai Dameng Database Co Ltd
Original Assignee
Shanghai Dameng Database 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 Shanghai Dameng Database Co Ltd filed Critical Shanghai Dameng Database Co Ltd
Priority to CN202210223201.2A priority Critical patent/CN114579323A/zh
Publication of CN114579323A publication Critical patent/CN114579323A/zh
Pending legal-status Critical Current

Links

Images

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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

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

一种线程处理方法、装置、设备及介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种线程处理方法、装置、设备及介质。
背景技术
由于数据库存在线程模型和进程模型。在进程模型中,一个连接使用一个进程。在线程模型中,一个连接使用一个线程。随着连接数的上升,由于进程相对于线程而言,拥有更多的环境变量并且消耗更多的存储空间,进程切换需要切换安全的上下文环境,存储空间变量,文件和网络句柄列表以及其他的一些进程上下文,这些都是在线程切换时不需要的,因此线程模型的优势更加明显。
然而,在“一个连接使用一个线程”的线程模型中,如果并发连接数过多,会造成线程数创建数过多,内存占用开销大,CPU调度开销大,线程上下文切换成本过高,因为大量并发问题的存在,数据库的性能就会下降。因此,“一个连接使用一个线程”的线程模型急需改进,现有技术中,常规的解决办法是使用线程池,在系统启动时创建一个线程池,一个线程池包含固定数量的线程,线程池统一管理这些线程,这种方式虽然对线程数量起到了限制作用,数量不会膨胀,然而,当待处理任务庞大时,线程数过多,且线程容易产生堵塞,甚至出现全部线程都处于阻塞、等待状态,以及线程出现死锁的极端情况,无法正常工作,使得线程处理效率低下,从而导致系统性能下降,由此急需一种方案解决线程出现的各类问题。
公开内容
有鉴于此,本发明提供一种线程处理方法、装置、设备及介质,能够解决了线程数量可任意增长、线程容易产生阻塞以及线程出现死锁等问题,提升了线程处理的效率,从而提升了系统的性能。
根据本发明的一方面,本发明实施例提供了一种线程处理方法,该方法包括:
创建线程池,其中,所述线程池中至少包含任务队列、普通线程和后备线程;
分配待处理任务到所述普通线程和所述后备线程;
根据所述线程池的空闲情况创建强制线程,以处理所述任务队列中的待处理任务。
根据本发明的另一方面,本发明实施例还提供了一种线程处理方法装置,该装置包括:
创建模块,用于创建线程池,其中,所述线程池中至少包含任务队列、普通线程和后备线程;
线程分配模块,用于分配待处理任务到所述普通线程和所述后备线程;
任务处理模块,用于根据所述线程池的空闲情况创建强制线程,以处理所述任务队列中的待处理任务。
根据本发明的另一方面,本发明实施例还提供了一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的线程处理方法。
根据本发明的另一方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的线程处理方法。
本发明实施例的技术方案,通过创建线程池,其中,线程池中至少包含任务队列、普通线程和后备线程;分配待处理任务到普通线程和后备线程;根据线程池的空闲情况创建强制线程,以处理任务队列中的待处理任务。本发明实施例,通过在线程池中设置后备线程,保证执行任务的数量,降低待处理任务阻塞概率;根据线程池的空闲情况创建强制线程,以处理任务队列中的待处理任务,解决了线程容易产生阻塞以及出现死锁等问题,提升了线程处理任务的效率,从而提升了系统的性能。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种线程处理方法的流程图;
图2为本发明实施例二提供的一种线程处理方法的流程图;
图3为本发明实施例三提供的一种线程处理方法的流程图;
图4为本发明实施例四提供的一种线程处理方法的流程图;
图5是本发明实施例五提供的一种线程处理装置的结构框图;
图6示出了可以用来实施本发明的实施例的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”,“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例一
在一实施例中,图1为本发明实施例一提供的一种线程处理方法的流程图,本实施例可适用于对线程处理任务的的情况,该方法可以由线程处理装置来执行,该线程处理装置可以采用硬件和/或软件的形式实现,该线程处理装置可配置于电子设备中。如图1所示,该方法包括:
S110、创建线程池,其中,线程池中至少包含任务队列、普通线程和后备线程。
其中,线程池可以理解为程序的初始化阶段,预先创建一批线程。线程池包含至少两种结构:一是一定数量的线程,可以为一定数量的普通线程和一定数量的后备线程,二是任务队列。
需要说明的是,客户端出现新的待处理任务后,待处理任务可以先进入任务队列,从任务队列中摘取待处理任务再进行分配至普通线程或后备线程;也可以在普通线程和后备线程充足的情况下,直接进行待处理任务的分配,在普通线程和后备线程不充足的情况下,将其放入任务队列中,等待处理完当前待处理事务,再进行处理任务队列中等待的待处理任务。本实施例对此不做限制。
在本实施例中,系统可以向任务队列里添加任务,且线程池里面的线程从任务队列取出任务来执行。其中,任务可以理解为一个事务或一个请求,一个线程对应一个任务,不同线程的任务并行执行。
在本实施例中,初始化所创建的线程池中不限于普通线程和后备线程两种线程。客户端出现待处理任务时,优先获取普通线程以处理待处理事务,只有在普通线程数均被占用的情况下,才会使用后备线程处理待处理任务。
在本实施例,普通线程也可以称为一般线程,在待处理任务需要线程时优先使用,即便是没有待处理任务的情况下,普通线程也不会释放。后备线程与普通线程一起创建,当客户端出现新的待处理任务后,需要请求线程以处理待处理事务,若在获取不到请求线程数时,也即获取不到普通线程时,开始使用后备线程。需要说明的是,线程池中的相关线程具有一定的优先级,示例性的,普通线程的优先级高于后备线程,当然,在同类线程中线程也可能会有一定的优先级,示例性的,普通线程的同类线程中可能具有一定的优先级,后备线程的同类线程中也可能具有一定的优先级,可以根据相关硬件架构进行判别相应的优先级。
在一实施例中,所述普通线程和所述后备线程分别按照硬件内存架构划分为至少两类优先级差别线程。
在本实施例中,普通线程和后备线程的同类线程中,可以分别按照硬件内存架构判别个同类线程是否存在相应的优先级,并将存在同类优先级的线程划分为至少两类优先级差别线程。其中,硬件内存架构可以分为均匀存储器存取模型以及非均匀存储器存取模型。
S120、分配待处理任务到普通线程和后备线程。
其中,待处理任务可以理解为等待线程进行处理的相关事务或请求任务。
在本实施例中,客户端在出现等待线程进行处理的相关事务或请求任务时,服务器可以根据相应的规则,将出现等待线程进行处理的相关事务或请求任务,按照优先级的高低分配给普通线程或后备线程。
具体的,在普通线程存在的情况下,优先将待处理事务分配至普通线程中执行相应的任务,在普通线程不存在的情况下,可以选用后备线程以处理待处理任务。需要说明的是,在分配待处理事务时,同类线程和非同类线程均有优先级的顺序,优先将待处理任务分配至优先级高的线程中。
S130、根据线程池的空闲情况创建强制线程,以处理任务队列中的待处理任务。
在本实施例中,强制线程不在初始化时创建,是临时进行创建的,强制线程可以根据线程池中的普通线程、后备线程以及待处理任务的任务队列的相关情况进行创建。示例性,强制线程可以在普通线程使用不足的情况下,开始使用后备线后,系统在检查到此时的线程使用比例超出阈值的情况下进行创建;也可以在待处理任务出现阻塞等待数高于系统预设阈值的情况下进行创建;本实施例在此不做限制。
在本实施例中,可以根据线程池的空闲情况来创建强制线程,处理任务队列中的待处理任务。具体的,可以在普通线程使用不足的情况下,开始使用后备线,获取此时的普通线程和后备线程的线程使用比例,在线程使用比例高于比例阈值时,开始创建强制线程,以处理任务队列中的待处理任务;也可以在阻塞等待线程比例高于系统预设比例时,开始创建强制线程,以处理任务队列中的待处理任务;本实施例在此不做限制。
本发明实施例的技术方案,通过创建线程池,其中,线程池中至少包含任务队列、普通线程和后备线程;分配待处理任务到普通线程和后备线程;根据线程池的空闲情况创建强制线程,以处理任务队列中的待处理任务。本发明实施例,通过在线程池中设置任务队列以及后备线程,保证执行任务的数量,降低待处理任务阻塞概率;根据线程池的空闲情况创建强制线程,以处理任务队列中的待处理任务,解决了线程产生阻塞以及出现死锁等问题,提升了线程处理任务的效率,从而提升了系统的性能。
在一实施例中,线程处理方法,还包括:
在强制线程执行完成待处理任务后销毁释放强制线程。
在本实施例中,在强制线程执行完成待处理任务后,强制线程自动销毁释放,使得线程数处于一个动态平衡的状态。相应的,如果不是强制线程,则在等待任务队列中查找是否存在待处理的事务,存在则摘取一个待处理事务并处理,否则设置为空闲状态,进入普通线程和后备线程队列中。
实施例二
在一实施例中,图2为本发明实施例二提供的一种线程处理方法的流程图,本实施例在上述各实施例地基础上,对分配待处理任务到普通线程和后备线程,以及根据线程池的空闲情况创建强制线程进行了进一步的细化,如图2所示,本实施例中的线程处理方法具体可以包含如下步骤:
S210、创建线程池,其中,线程池中至少包含任务队列、普通线程和后备线程。
S220、判断线程池内是否存在普通线程处于空闲,若是,则执行S230,若否,则执行S240;
在本实施例中,数据库等待连接客户端的请求,出现待处理事务后,由于线程优先级的存在,首先需要判断线程池中的普通线程是否处于空闲状态,若存在普通线程处于空闲状态,则分配待处理任务到空闲的普通线程执行;若不存在普通线程处于空闲状态,则此时需要判断线程池内是否存在后备线程处于空闲状态。
S230、分配待处理任务到空闲的普通线程执行。
在本实施例中,在判断线程池内是否存在普通线程处于空闲状态之后,若存在普通线程处于空闲状态,则分配待处理任务到空闲的普通线程执行
S240、判断线程池内是否存在后备线程处于空闲,若是,则执行S250,若否,则执行S260。
在本实施例中,在判断线程池内是否存在普通线程处于空闲状态之后,若不存在普通线程处于空闲状态,则此时需要判断线程池内是否存在后备线程处于空闲状态,若存在后备线程处于空闲状态,则分配待处理任务到空闲的后备线程执行,若此时不存在后备线程处于空闲状态,则发送待处理任务到任务队列,等待出现普通线程和后备线程空闲状态时,再进行相应的处理。
S250、分配待处理任务到空闲的后备线程执行。
在本实施例中,判断线程池内是否存在后备线程处于空闲状态,若存在后备线程处于空闲状态,则分配待处理任务到空闲的后备线程执行。
S260、发送待处理任务到任务队列,等待出现普通线程和后备线程空闲。
在本实施例中,判断线程池内是否存在后备线程处于空闲状态,若此时不存在后备线程处于空闲状态,则发送待处理任务到任务队列,等待出现空闲线程时,再进行相应的处理。示例性的,将待处理任务加入任务队列中,则在出现空闲线程时,在任务队列中摘取一个待处理任务进行处理。
S270、获取当前普通线程和后备线程的线程使用比例。
其中,线程使用比例可以理解为已使用线程数与总线程的比例,在普通线程使用不足时,按照优先级使用后备线程,在开始使用后备线程数后,系统将会定期检查线程使用比例的情况,若线程使用比例低于阈值比例,则继续进行定期检测,若线程使用比例高于阈值比例,则开始创建强制线程。
S280、在线程使用比例大于第一阈值比例时,确定线程池繁忙,则创建强制线程。
其中,第一阈值比例可以理解为系统预设的线程使用比例的阈值比例。线程池繁忙可以理解为线程使用比例大于第一阈值比例时的线程池的状况。
在本实施例中,在线程使用比例高于阈值比例时,确定线程池繁忙,系统开始创建强制线程,强制线程开始处理任务队列中等待处理的任务,需要说明的是,此时创建的强制线程不在初始化时创建,仅在系统发现线程使用比例高于阈值比例时,从而强制处理等待队列中任务时使用,强制线程在使用时创建,在使用完成后就会做销毁释放。
S290、获取当前普通线程和后备线程的阻塞等待线程比例。
其中,阻塞等待线程比例可以由普通线程和后备线程的阻碍等待线程数和总线程数进行确定。在待处理任务执行的过程中,可能会出现任务阻塞等待的情况,此时线程任务暂停,线程处于阻塞等待中,在极端的情况下,会有大量线程暂停,互相阻塞等待导致系统任务推进变慢,所以每当线程中待处理任务出现阻塞等待时,系统记录并检查当前阻塞等待线程数,在阻塞等待线程比例高于阈值比例时,确定线程池阻塞,此时会创建强制线程,以处理任务队列中的待处理任务。
S2910、在阻塞等待线程比例高于第二阈值比例时,确定线程池阻塞,则创建强制线程。
其中,第二阈值比例可以理解系统预设的阻塞等待线程阈值比例。第二阈值比例可以根据任务量的实际情况进行调整,本实施例在此不做限定。
在本实施例中,当线程中待处理事务出现阻塞等待时,系统记录并检查当前阻塞等待线程数,如果不能保证阻塞等待线程比例小于第二阈值比例时,即非等待状态的线程太少,那么系统可能陷入死等状态,此时必须调用空闲线程来工作以尝试打破死锁状态,若此时没有足够的空闲线程,则需要强制创建一个强制线程,以处理任务队列中的待处理任务。
需要说明的是,S270与S280以及S290与S2910为两种创建强制线程的不同情况,S270与S280以及S290与S2910的执行顺序不分先后,可以在执行S260后,执行S270与S280;也可以在执行S260后,执行S290与S2910;还可以在执行S260之后,先执行S270与S280,再执行S290与S2910;本实施例在此不做限制。
本发明实施例的上述技术方案,通过判断线程池内是否存在普通线程处于空闲;若存在普通线程处于空闲,则分配待处理任务到空闲的普通线程执行;若不存在普通线程处于空闲,则判断线程池内是否存在后备线程处于空闲;若存在后备线程处于空闲,则分配待处理任务到空闲的后备线程执行,若不存在后备线程处于空闲,则发送待处理任务到任务队列,等待出现普通线程和后备线程空闲,进一步任务数据持续增长的问题,保证执行任务的数量,降低待处理任务阻塞概率;通过获取当前普通线程和后备线程的线程使用比例;在线程使用比例大于第一阈值比例时,确定线程池繁忙,则创建强制线程,获取当前普通线程和后备线程的阻塞等待线程比例;在阻塞等待线程比例高于第二阈值比例时,确定线程池阻塞,则创建强制线程,进一步解决线程产生阻塞以及出现死锁的相关问题,提升线程处理任务的效率,从而提升了系统的性能。
实施例三
在一实施例中,为便于更好的理解线程处理方法,图3为本发明实施例三提供的一种线程处理方法的流程图,其中,空闲线程包括:普通线程和后备线程,具体步骤如下:
S310、数据库初始化线程池。
其中,线程池可以称为程序的初始化阶段,就预先创建一批线程。线程池包含两种结构:一是一定数量的线程;二是任务队列。一方面,系统可以向任务队列里添加任务;另一方面,线程池里面的线程从任务队列取出任务来执行。
在本实施例中,数据库初始化一个线程池,其中,线程池中包含一定数量的处理事务的线程,这些线程被分为普通线程,也可以称为一般线程,在需要线程时优先使用,即便没有任务也不会释放;后备线程,需要说明的是,后备线程与同普通线程一起创建,在普通线程不足时使用。使用后备线程后,系统将会检查线程使用比例X的情况,X=等待线程数/总线程数,在比例超出阈值比例即本发明实施例中的第一阈值比例时,系统开始创建强制线程,强制线程开始处理任务队列中等待处理的任务,强制线程不在初始化时创建,在系统发现X过高从而强制处理等待队列中任务时使用,使用时创建,使用完成后就会做销毁释放。
S320、数据库等待连接客户端的请求。
S330、分配待处理任务到普通线程和后备线程。
在本实施例中,客户端出现新的事务后,服务器根据预设规则将其分配给一个空闲线程,其中,空闲线程包含:普通线程或后备线程。可以将空闲线程命名为线程A,选择线程的优先级普通线程大于后备线程,此时不会通过强制创建线程来处理。同种类线程可以根据硬件内存架构(均匀存储器存取或非均匀存储器存取)决定同种类线程分配时是否存在优先级差别。
S340、分配过程遇到再无空闲线程可用时,系统将事务添加到等待任务队列,等待出现可用线程后再处理,其中,可用线程包括空闲线程和强制线程。
在本实施例中,分配过程遇到再无空闲线程可用时,系统将事务添加到等待任务队列,等待出现可用线程后再处理。
S350、在阻塞等待线程比例高于系统预设的阈值比例时,确定线程池阻塞,创建强制线程,以处理任务队列中的待处理任务。
在本实施例中,系统预设的阈值比例即为本发明实施例中的第二阈值比例,在此情况下,事务执行过程中可能出现事务阻塞等待问题,此时线程任务暂停,线程处于阻塞等待中。极端情况下,会有大量线程暂停,互相阻塞等待导致系统任务推进变慢,所以每当线程中事务出现阻塞等待时,系统记录并检查当前阻塞等待线程数,如果不能保证最低比例Y低于系统预设的红线,即非等待状态的线程太少,那么系统可能陷入死等状态。其中,Y表示阻塞等待的线程比例,即为阻塞等待的线程数与总线程数的比值,此时必须调用空闲线程来工作以尝试打破死锁状态,若没有足够的空闲线程,则需要强制创建一个强制线程,将创建的强制线程命名为线程B。其中,最低比例Y的系统红线可以根据任务量的实际情况进行调整,此处不做限定。
S360、在强制线程执行完成待处理任务后,销毁释放强制线程。
在本实施例中,线程事务执行完毕后,线程进行下一个任务。如果是线程B,生命周期到此结束,则直接销毁。
S370、在空闲线程执行完成待处理任务后,等待任务队列中查找是否存在待处理的事务,若是,则摘取一个待处理事务并处理,否则设置为空闲状态,进入空闲线程队列中。
在本实施例中,如果是线程A,则在等待任务队列中查找是否存在待处理的事务,存在则摘取一个待处理事务并处理,否则设置自己为空闲状态,进入空闲线程队列中。
需要说明的是,当承载事务的会话被释放时,将释放会话的动作也在形式上作为一个普通事务来处理。
在本实施例中,在服务器启动后,根据配置参数,初始化出一个线程池(一些处理事务的线程),每当一个新事务来到,分配一个空闲线程来进行处理。相较于常规的线程池模型,本发明对线程池中的所有线程进行了分级,不同等级的线程创建时机及功能均不一致,通过这样的处理方式,在获取常规线程池所具备的优势同时,又能避免由于常规线程中存在的阻塞操作导致线程池出现饿死现象。如共有三个线程,分别执行任务A,B,C,任务A等待任务B完成,任务B等待任务C完成,任务C等待任务队列中的任务D完成,而此时所有线程被占用且全部等待,任务D无法获取线程,系统任务推进停止。
需要说明的是,本实施例使用两种模式绑定:一种为线程和事务绑定,另一种为线程和请求绑定。对于事务模式,线程和事务绑定,直到事务完成,数据库始终维持一定数量的线程,这些线程分别执行各自负责的事务,事务结束后线程则继续执行新事务。通过本发明的处理,使系统中只要存在任务(事务/请求),总能保证固定数量的线程在执行任务,这样就可以在保证连接的同时,提供同等意义上的限流功能(由于总线程数量固定,且每个线程仅能同时执行一个事务,所以整个数据库同时执行的事务数量得到限制,也就起到一定的限流作用),解决了线程数可任意增长,线程数过多导致系统性能下降的问题。
在本实施例中,对于事务出现堵塞等待的问题,系统临时创建一个强制线程,辅助常规线程一起处理等待的事务,待处理完毕,强制线程自动销毁。系统中的线程数处于一个动态的平衡状态,解决了死锁的问题。
在本实施例中,对于请求模式,线程与请求绑定,直到请求所做任务结束,相较于事务模式,单个线程执行时间更短,线程中任务切换更频繁,因为其处理除切换任务的标志不同,其余与事务模式基本一致,所以后续不再单独介绍。
在本实施例中,由于这两种模式下总有可控数量的线程在运行,也就减少了常规方式的大量的频繁地创建销毁线程带来的资源损耗,从而保证有限的线程都能充分的利用机器性能。另外,由于线程的始终维持存活状态,也减少了线程频繁创建退出的消耗。而常规的线程池的使用存在一定的风险,死锁,并发性能等,而本实施例通过为线程池中的线程进行分级处理,各线程不再完全相同,而是拥有不同的等级、功能以及各种线程各司其职,通过合适的配合来避免出现风险,同时享受线程池带来的便利。
实施例四
在一实施例中,图4为本发明实施例四提供的一种线程处理方法的流程图,具体步骤如下:
S401、创建线程池。
S402、等待用户连接。
S403、产生事务。
S404、是否存在空闲线程,若是,则执行S405,若否,则执行S406,其中,空闲线程包括:普通线程和后备线程。
S405、为当前事务分配线程,之后执行407。
S406、将事务加入任务队列,之后执行S413。
S407、当前事务是否因为阻塞而需要等待其他事务执行完毕,若是,则执行S408,若否,则执行S409。
S408、是否有足够的线程来执行其他事务,若是,则执行S410,若否,则执行S411。
S409、事务执行完毕后,线程进行下一个任务。如果是线程B,生命周期到此结束,则直接销毁。如果是线程A进入S413。
其中,线程A表示空闲线程,包括:普通线程和后备线程。线程B表示强制线程。
在本实施例中,当步骤S412中的线程A和线程B去任务队列中摘取一个待处理事务时,S409中可能会出现线程A和B的情况,此时,在事务执行完毕后,线程开始进行下一个任务:如果是线程B,生命周期到此结束,直接销毁;如果是线程A进入S413。
S410、其他事务处理完毕,当前事务等待结束,线程开始处理当前事务。事务处理完成之后执行S409。
S411、一方面,当前事务继续等待其他事务执行完成;另一方面,系统强制创建一个强制线程。
需要说明的是,在强制线程执行完成待处理任务后销毁释放强制线程。
S412、线程A或线程B去任务队列中摘取一个待处理事务。
其中,空闲线程命名为线程A,强制线程命名为线程B。在本实施例中,线程A来自于S413,线程B来自于S411。
S413、任务队列是否存在待处理事务,若是,则执行S412,若否,则执行S414。
S414、线程A进入空闲线程队列。
实施例五
在一实施例中,图5是本发明实施例五提供的一种线程处理装置的结构框图,该装置适用于对线程进行处理任务的情况,该装置可以由硬件/软件实现。可配置于电子设备中来实现本发明实施例中的一种线程处理方法。如图5所示,该装置包括:创建模块510、线程分配模块520以及任务处理模块530。
其中,创建模块510,用于创建线程池,其中,所述线程池中至少包含任务队列、普通线程和后备线程。
线程分配模块520,用于分配待处理任务到所述普通线程和所述后备线程。
任务处理模块530,用于根据所述线程池的空闲情况创建强制线程,以处理所述任务队列中的待处理任务。
本发明实施例的技术方案,创建模块,通过创建线程池,其中,线程池中至少包含任务队列、普通线程和后备线程;线程分配模块,分配待处理任务到普通线程和后备线程,保证执行任务的数量,降低待处理任务阻塞概率;任务处理模块,根据线程池的空闲情况创建强制线程,以处理任务队列中的待处理任务,解决了线程容易产生阻塞以及出现死锁等问题,提升了线程处理任务的效率,从而提升了系统的性能。
在一实施例中,线程分配模块520,包括:
第一判断单元,用于判断所述线程池内是否存在所述普通线程处于空闲。
第一执行单元,用于若存在所述普通线程处于空闲,则分配所述待处理任务到空闲的所述普通线程执行。
第二判断单元,用于若不存在所述普通线程处于空闲,则判断所述线程池内是否存在所述后备线程处于空闲。
第二执行单元,用于若存在所述后备线程处于空闲,则分配所述待处理任务到空闲的所述后备线程执行,若不存在所述后备线程处于空闲,则发送所述待处理任务到所述任务队列,等待出现所述普通线程和所述后备线程空闲。
在一实施例中,任务处理模块530,包括:
第一比例获取模块,用于获取当前所述普通线程和所述后备线程的线程使用比例。
第一强制线程创建单元,用于在所述线程使用比例大于第一阈值比例时,确定所述线程池繁忙,则创建所述强制线程。
在一实施例中,任务处理模块530,包括:
第二比例获取单元,用于获取当前所述普通线程和所述后备线程的阻塞等待线程比例。
第二强制线程创建单元,在所述阻塞等待线程比例高于第二阈值比例时,确定所述线程池阻塞,则创建所述强制线程。
在一实施例中,所述线程处理装置,还包括:
销毁模块,用于在所述强制线程执行完成所述待处理任务后销毁释放所述强制线程。
在一实施例中,所述普通线程和所述后备线程分别按照硬件内存架构划分为至少两类优先级差别线程。
本发明实施例所提供的线程处理装置可执行本发明任意实施例所提供的线程处理方法,具备执行方法相应的功能模块和有益效果。
在一实施例中,图6示出了可以用来实施本发明的实施例的电子设备的结构示意图。电子设备10旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图6所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如线程处理方法。
在一些实施例中,线程处理方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的线程处理方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行线程处理方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种线程处理方法,其特征在于,包括:
创建线程池,其中,所述线程池中至少包含任务队列、普通线程和后备线程;
分配待处理任务到所述普通线程和所述后备线程;
根据所述线程池的空闲情况创建强制线程,以处理所述任务队列中的待处理任务。
2.根据权利要求1所述的方法,其特征在于,所述分配待处理任务到所述普通线程和所述后备线程,包括:
判断所述线程池内是否存在所述普通线程处于空闲;
若存在所述普通线程处于空闲,则分配所述待处理任务到空闲的所述普通线程执行;
若不存在所述普通线程处于空闲,则判断所述线程池内是否存在所述后备线程处于空闲;
若存在所述后备线程处于空闲,则分配所述待处理任务到空闲的所述后备线程执行,若不存在所述后备线程处于空闲,则发送所述待处理任务到所述任务队列,等待出现所述普通线程和所述后备线程空闲。
3.根据权利要求1所述的方法,其特征在于,所述根据所述线程池的空闲情况创建强制线程,包括:
获取当前所述普通线程和所述后备线程的线程使用比例;
在所述线程使用比例大于第一阈值比例时,确定所述线程池繁忙,则创建所述强制线程。
4.根据权利要求1所述的方法,其特征在于,所述根据所述线程池的空闲情况创建强制线程,包括:
获取当前所述普通线程和所述后备线程的阻塞等待线程比例;
在所述阻塞等待线程比例高于第二阈值比例时,确定所述线程池阻塞,则创建所述强制线程。
5.根据权利要求1所述的方法,其特征在于,还包括:
在所述强制线程执行完成所述待处理任务后销毁释放所述强制线程。
6.根据权利要求1所述的方法,其特征在于,所述普通线程和所述后备线程分别按照硬件内存架构划分为至少两类优先级差别线程。
7.一种线程处理装置,其特征在于,包括:
创建模块,用于创建线程池,其中,所述线程池中至少包含任务队列、普通线程和后备线程;
线程分配模块,用于分配待处理任务到所述普通线程和所述后备线程;
任务处理模块,用于根据所述线程池的空闲情况创建强制线程,以处理所述任务队列中的待处理任务。
8.根据权利要求7所述的装置,所述线程分配模块,包括:
第一判断单元,用于判断所述线程池内是否存在所述普通线程处于空闲。
第一执行单元,用于若存在所述普通线程处于空闲,则分配所述待处理任务到空闲的所述普通线程执行。
第二判断单元,用于若不存在所述普通线程处于空闲,则判断所述线程池内是否存在所述后备线程处于空闲。
第二执行单元,用于若存在所述后备线程处于空闲,则分配所述待处理任务到空闲的所述后备线程执行,若不存在所述后备线程处于空闲,则发送所述待处理任务到所述任务队列,等待出现所述普通线程和所述后备线程空闲。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-6中任一项所述的线程处理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-6中任一项所述的线程处理方法。
CN202210223201.2A 2022-03-09 2022-03-09 一种线程处理方法、装置、设备及介质 Pending CN114579323A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210223201.2A CN114579323A (zh) 2022-03-09 2022-03-09 一种线程处理方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210223201.2A CN114579323A (zh) 2022-03-09 2022-03-09 一种线程处理方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN114579323A true CN114579323A (zh) 2022-06-03

Family

ID=81777763

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210223201.2A Pending CN114579323A (zh) 2022-03-09 2022-03-09 一种线程处理方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN114579323A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115080247A (zh) * 2022-08-15 2022-09-20 科来网络技术股份有限公司 一种高可用线程池切换方法及装置
CN115391020A (zh) * 2022-10-27 2022-11-25 广州市玄武无线科技股份有限公司 基于线程池的优先队列调度方法、系统、设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115080247A (zh) * 2022-08-15 2022-09-20 科来网络技术股份有限公司 一种高可用线程池切换方法及装置
CN115080247B (zh) * 2022-08-15 2022-11-04 科来网络技术股份有限公司 一种高可用线程池切换方法及装置
CN115391020A (zh) * 2022-10-27 2022-11-25 广州市玄武无线科技股份有限公司 基于线程池的优先队列调度方法、系统、设备及存储介质
CN115391020B (zh) * 2022-10-27 2023-03-07 广州市玄武无线科技股份有限公司 基于线程池的优先队列调度方法、系统、设备及存储介质

Similar Documents

Publication Publication Date Title
CN112783659B (zh) 一种资源分配方法、装置、计算机设备及存储介质
WO2022247105A1 (zh) 一种任务调度方法、装置、计算机设备和存储介质
CN114579323A (zh) 一种线程处理方法、装置、设备及介质
JP2015146154A (ja) ジョブスケジューリング装置、ジョブスケジューリング方法、およびジョブスケジューリングプログラム
CN109840149B (zh) 任务调度方法、装置、设备及存储介质
CN113835887B (zh) 显存的分配方法、装置、电子设备及可读存储介质
CN106528288A (zh) 一种资源管理方法、装置和系统
CN111338785A (zh) 资源调度方法及装置、电子设备、存储介质
CN114461668A (zh) 一种基于线程池的mysql数据库查询方法及装置
CN114968567A (zh) 用于分配计算节点的计算资源的方法、装置和介质
CN115168040A (zh) 一种作业抢占调度方法、装置、设备和存储介质
CN112860401B (zh) 任务调度方法、装置、电子设备和存储介质
CN117112222A (zh) 一种请求处理方法、装置、电子设备及存储介质
CN116881003A (zh) 资源分配方法、装置、服务设备及存储介质
CN113032092B (zh) 分布式计算方法、装置及平台
CN115562840A (zh) 一种任务处理方法、装置及介质
CN115964166A (zh) 一种资源分配方法、装置、设备及存储介质
CN115098269A (zh) 一种资源分配方法、装置、电子设备及存储介质
JP2008225641A (ja) コンピュータシステム、割り込み制御方法及びプログラム
CN115390992A (zh) 一种虚拟机创建方法、装置、设备和存储介质
CN114691376A (zh) 一种线程执行方法、装置、电子设备和存储介质
CN114090234A (zh) 请求的调度方法、装置、电子设备和存储介质
CN116893893B (zh) 一种虚拟机调度方法、装置、电子设备及存储介质
CN117519940A (zh) 进程调度方法、装置、电子设备及存储介质
CN115168057B (zh) 基于k8s集群的资源调度方法及装置

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