CN107450978A - 分布式***的线程管理方法和装置 - Google Patents
分布式***的线程管理方法和装置 Download PDFInfo
- Publication number
- CN107450978A CN107450978A CN201610377759.0A CN201610377759A CN107450978A CN 107450978 A CN107450978 A CN 107450978A CN 201610377759 A CN201610377759 A CN 201610377759A CN 107450978 A CN107450978 A CN 107450978A
- Authority
- CN
- China
- Prior art keywords
- thread
- identification
- pool
- thread identification
- thread pool
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread 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)
- Multi Processors (AREA)
Abstract
本申请公开了分布式***的线程管理方法和装置。所述方法的一具体实施方式包括:获取各个线程池申请线程标识的请求;选择预先设置的线程标识列表中状态为空闲的线程标识,其中,所述线程标识列表记录有线程标识以及线程标识的状态,所述状态包括空闲和非空闲;向所述线程池分配所选择的线程标识,使得所述线程池创建所分配的线程标识对应的线程;将线程标识列表中所述线程对应的线程标识的状态修改为非空闲。该实施方式实现了分布式***中多线程池的线程数量的控制。
Description
技术领域
本申请涉及计算机技术领域,具体涉及互联网技术领域,尤其涉及分布式***的线程管理方法和装置。
背景技术
分布式是指两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。线程是指进程内一个相对独立的、可调度的执行单元,是***独立调度和分派CPU的基本单位指运行中的程序的调度单位。
在Java应用开发中,多线程操作是比较常见的。这其中大多数都是单一进程的线程池模式。但是在使用线程池过程中,如果要控制分布式线程池线程总数量,例如有10个进程时,需要实现只运行一个线程的控制,此时只能人工操控进程线程的开关。并且需要随时关注进程的运行情况,如宕机时需要手动重启,配置相对复杂。因此在开发、测试等实际工作中,需要发明一种实现分布式线程池的管理方法,以简化及控制多线程池的线程数量。
发明内容
本申请的目的在于提出一种改进的分布式***的线程管理方法和装置,来解决以上背景技术部分提到的技术问题。
第一方面,本申请提供了一种分布式***的线程管理方法,所述分布式***包括至少一个服务器以及运行于所述至少一个服务器上的至少两个进程,每个进程都对应有一个线程池,其特征在于,所述方法包括:获取各个线程池申请线程标识的请求;选择预先设置的线程标识列表中状态为空闲的线程标识,其中,所述线程标识列表记录有线程标识以及线程标识的状态,所述状态包括空闲和非空闲;向所述线程池分配所选择的线程标识,使得所述线程池创建所分配的线程标识对应的线程;将线程标识列表中所述线程对应的线程标识的状态修改为非空闲。
在一些实施例中,所述选择预先设置的线程标识列表中状态为空闲的线程标识,包括:判断预先设置的线程标识列表中状态为空闲的线程标识的数量是否大于所述线程池所需线程标识的数目,其中,所述线程池所需线程标识的数目是根据所述线程标识列表中包括的线程标识的总数以及所述线程池的数量确定的;如果是,则选择所述线程池所需线程标识的数目的预先设置的线程标识列表中状态为空闲的线程标识;如果否,则选择预先设置的线程标识列表中所有状态为空闲的线程标识。
在一些实施例中,所述方法还包括:按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目;比较所述各个线程池中线程标识的数目与所述线程池所需线程标识的数目;如果所述线程池中线程标识的数目大于所述线程池所需线程标识的数目,则回收所述线程池的线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池销毁所回收的线程标识对应的线程;如果所述线程池中线程标识的数目小于所述线程池所需线程标识的数目,则向所述线程池分配线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池创建所分配的线程标识对应的线程。
在一些实施例中,所述方法还包括:按照预先设置的第二时间周期,定时获取各个线程池中线程的执行信息,以判断是否存在因执行时间超过预定时间而被销毁的线程;如果是,则将所述线程标识列表中被销毁的线程的线程标识的状态修改为空闲。
在一些实施例中,所述方法还包括;响应于监测到服务器出现宕机的情况,将所述线程标识列表中运行于所述服务器上的进程对应的线程池中线程的线程标识的状态修改为空闲状态;响应于监测到进程的关闭,将所述进程对应的线程池中线程的线程标识的状态修改为空闲状态。
第二方面,本申请提供了一种分布式***的线程管理装置,所述分布式***包括至少一个服务器以及运行于所述至少一个服务器上的至少两个进程,每个进程都对应有一个线程池,其特征在于,所述装置包括:
请求获取单元,配置用于获取各个线程池申请线程标识的请求;选择单元,配置用于选择预先设置的线程标识列表中状态为空闲的线程标识,其中,所述线程标识列表记录有线程标识以及线程标识的状态,所述状态包括空闲和非空闲;分配单元,配置用于向所述线程池分配所选择的线程标识,使得所述线程池创建所分配的线程标识对应的线程;修改单元,配置用于将线程标识列表中所述线程对应的线程标识的状态修改为非空闲。
在一些实施例中,所述选择单元进一步配置用于:判断预先设置的线程标识列表中状态为空闲的线程标识的数量是否大于所述线程池所需线程标识的数目,其中,所述线程池所需线程标识的数目是根据所述线程标识列表中包括的线程标识的总数以及所述线程池的数量确定的;如果是,则选择所述线程池所需线程标识的数目的预先设置的线程标识列表中状态为空闲的线程标识;如果否,则选择预先设置的线程标识列表中所有状态为空闲的线程标识。
在一些实施例中,所述装置还包括:数目获取单元,配置用于按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目;比较单元,配置用于比较所述各个线程池中线程标识的数目与所述线程池所需线程标识的数目;如果所述线程池中线程标识的数目大于所述线程池所需线程标识的数目,则回收所述线程池的线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池销毁所回收的线程标识对应的线程;如果所述线程池中线程标识的数目小于所述线程池所需线程标识的数目,则向所述线程池分配线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池创建所分配的线程标识对应的线程。
在一些实施例中,所述装置还包括:执行信息获取单元,配置用于按照预先设置的第二时间周期,定时获取各个线程池中线程的执行信息,以判断是否存在因执行时间超过预定时间而被销毁的线程;如果是,则将所述线程标识列表中被销毁的线程的线程标识的状态修改为空闲。
在一些实施例中,所述装置还包括:服务器宕机监测单元,配置用于响应于监测到服务器出现宕机的情况,将所述线程标识列表中运行于所述服务器上的进程对应的线程池中线程的线程标识的状态修改为空闲状态;进程关闭监测单元,配置用于响应于监测到进程的关闭,将所述进程对应的线程池中线程的线程标识的状态修改为空闲状态。
本申请提供的分布式***的线程管理方法和装置,通过获取各个线程池申请线程标识的请求,而后选择预先设置的线程标识列表中状态为空闲的线程标识,并向所述线程池分配所选择的线程标识,使得所述线程池创建所分配的线程标识对应的线程,最后将线程标识列表中所述线程对应的线程标识的状态修改为非空闲,实现了分布式***中多线程池的线程数量的控制。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性***架构图;
图2是根据本申请的分布式***的线程管理方法的一个实施例的流程图;
图3是根据本申请的分布式***的线程管理方法的一个应用场景的示意图;
图4是根据本申请的分布式***的线程管理方法的又一个实施例的流程图;
图5是根据本申请的分布式***的线程管理装置的一个实施例的结构示意图;
图6是适于用来实现本申请实施例的服务器的计算机***的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的分布式***的线程管理方法或分布式***的线程管理装置的实施例的示例性***架构100。
如图1所示,***架构100可以包括服务器101、102、103,网络104和服务器105。网络104用以在服务器101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
服务器105通过网络104与服务器101、102、103交互,以接收或发送信息等。服务器101、102、103上可部署一个或多个Web应用实例,相应的服务器101、102、103上可以运行一个或多个进程。
服务器101、102、103可以是提供各种服务的服务器。例如对Web应用程序提供支持的服务器。
服务器105可以是分布式***的线程管理服务器,可以获取服务器101、102、103发送的申请线程标识的请求,选择并向服务器101、102、103分配线程标识,使得服务器101、102、103上运行的进程的线程池创建所分配的线程标识对应的线程。
需要说明的是,本申请实施例所提供的分布式***的线程管理方法一般由服务器105执行,相应地,分布式***的线程管理装置一般设置于服务器105中。
应该理解,图1中的网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的网络和服务器。在只有一个服务器时,上述服务器可以部署有两个以上的Web应用实例,同时运行分布式***的线程管理程序。
继续参考图2,其示出了根据本申请的分布式***的线程管理方法的一个实施例的流程200。所述的分布式***的线程管理方法,包括以下步骤:
步骤201,获取各个线程池申请线程标识的请求。
在本实施例中,分布式***的线程管理方法运行于其上的电子设备(例如图1所示的服务器105)可以通过有线连接方式或者无线连接方式获取各个线程池申请线程标识的请求。其中,上述分布式***包括至少一个服务器以及运行于上述至少一个服务器上的至少两个进程,每个进程都对应有一个线程池。需要指出的是,上述无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、WiMAX连接、Zigbee连接、UWB(ultra wideband)连接、以及其他现在已知或将来开发的无线连接方式。
在本实施例中,线程池申请线程标识的请求中还可以包括线程池的标识信息,上述标识信息可以包括以下至少一项:线程池对应的进程名、线程池对应的Web应用实例的名称、线程池对应的Web应用实例的IP地址、线程池对应的Web应用实例的编号,其中,上述编号可以用于表示Web应用实例接入线程管理***的顺序。
步骤202,选择预先设置的线程标识列表中状态为空闲的线程标识。
在本实施例中,根据步骤201中获取的各个线程池申请线程标识的请求,上述电子设备(例如图1所示的服务器105)可以选择预先设置的线程标识列表中状态为空闲的线程标识。上述线程标识列表记录有线程标识以及线程标识的状态,上述状态包括空闲和非空闲。线程标识又可称为线程ID,用于唯一标识一个线程。线程标识列表中线程标识的总数量即为上述分布式***中线程的最大数量。线程标识的总数量可以根据处理器的情况设置,例如线程标识的总数量的设置规则可以是每个可用处理器对应25个线程。
在本实施例的一些可选的实现方式中,选择预先设置的线程标识列表中状态为空闲的线程标识的数量,可以是由线程标识列表中线程标识的总数量和当前线程池的数量计算得出的,例如线程标识列表中线程标识的总数量为100个,分布式***的线程池的数量为5个,那么可以用100除以5,得到每个线程池对应的线程标识的数量为20个,当获取到某个线程池申请线程标识的请求时,选择20个状态为空闲的线程标识。
在本实施例的一些可选的实现方式中,选择预先设置的线程标识列表中状态为空闲的线程标识的数量也可以是预先设置的,例如可以根据进程的具体运行情况对不同进程的线程池设置不同的分配线程标识的数量。
步骤203,向上述线程池分配所选择的线程标识,使得上述线程池创建所分配的线程标识对应的线程。
在本实施例中,上述电子设备(例如图1所示的服务器105)可以将步骤202中选择的状态为空闲的线程标识分配给线程池,使得上述线程池创建所分配的线程标识对应的线程。上述线程池只有在被分配到线程标识时才能创建对应的线程,以此实现了对每个线程池中线程数量的控制。
在本实施例的一些可选的实现方式中,在使用Java编程语言编写程序时,上述线程池可以使用Java软件开发工具包(SoftwareDevelopment Kit,SDK)中自带的线程池。同样,其他程序语言例如C语言也可以实现线程池。
在本实施例的一些可选的实现方式中,上述选择预先设置的线程标识列表中状态为空闲的线程标识,包括:判断预先设置的线程标识列表中状态为空闲的线程标识的数量是否大于上述线程池所需线程标识的数目,其中,上述线程池所需线程标识的数目是根据上述线程标识列表中包括的线程标识的总数以及上述线程池的数量确定的;如果是,则选择上述线程池所需线程标识的数目的预先设置的线程标识列表中状态为空闲的线程标识;如果否,则选择预先设置的线程标识列表中所有状态为空闲的线程标识。
步骤204,将线程标识列表中上述线程对应的线程标识的状态修改为非空闲。
在本实施例中,上述电子设备(例如图1所示的服务器105)在步骤203向上述线程池分配所选择的线程标识,使得上述线程池创建所分配的线程标识对应的线程后,将线程标识列表中上述线程对应的线程标识的状态修改为非空闲。以此避免了将同一个线程标识分配给多个线程池导致的无法控制***中线程的总数量。
在本实施例的一些可选的实现方式中,上述方法还包括:按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目;比较上述各个线程池中线程标识的数目与上述线程池所需线程标识的数目;如果上述线程池中线程标识的数目大于上述线程池所需线程标识的数目,则回收上述线程池的线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池销毁所回收的线程标识对应的线程;如果上述线程池中线程标识的数目小于上述线程池所需线程标识的数目,则向上述线程池分配线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池创建所分配的线程标识对应的线程。
在本实施例的一些可选的实现方式中,上述方法还包括:按照预先设置的第二时间周期,定时获取各个线程池中线程的执行信息,以判断是否存在因执行时间超过预定时间而被销毁的线程;如果是,则将上述线程标识列表中被销毁的线程的线程标识的状态修改为空闲。
在本实施例的一些可选的实现方式中,上述方法还包括;响应于监测到服务器出现宕机的情况,将上述线程标识列表中运行于上述服务器上的进程对应的线程池中线程的线程标识的状态修改为空闲状态;响应于监测到进程的关闭,将上述进程对应的线程池中线程的线程标识的状态修改为空闲状态。
继续参见图3,图3是根据本实施例的分布式***的线程管理方法的应用场景的一个示意图。在图3的应用场景中,服务器101、服务器102、服务器103上分别部署了Web应用1、Web应用2、Web应用3和Web应用4,一个Web应用实例对应一个进程,每个进程都对应有一个线程池。首先,部署线程池中间件,并设置相关接入配置,例如线程标识列表的配置、线程池1、线程池2、线程池3和线程池4分配线程标识规则的配置、线程超时时间的配置、检测是否有服务器宕机或实例崩溃发生的时间周期。其次,启动Web应用实例,应用实例启动后,启动线程池,并向线程池中间件申请对应的线程标识。最后,线程池获取到线程标识后创建对应线程。以此,线程池下所有线程的创建和销毁都根据中间件的线程标识分配及状态。线程的超时检测,在服务器宕机或实例崩溃的情况下,可以及时回收并分配给运行中的实例,保证所有实例线程运行总数不受影响。同时定时计算分配规则,可以均衡控制每个实例的线程运行数。考虑到安全问题,中间件可部署在实例能访问到的内网环境,并根据预先配置的IP地址列表过滤接入的实例。需要说明的是,分布式***的线程管理方法的实现也可以脱离中间件,依靠已有的数据库或其他方式实现。
本申请的上述实施例提供的方法通过获取各个线程池申请线程标识的请求,而后选择预先设置的线程标识列表中状态为空闲的线程标识,并向所述线程池分配所选择的线程标识,使得所述线程池创建所分配的线程标识对应的线程,最后将线程标识列表中所述线程对应的线程标识的状态修改为非空闲,实现了分布式***中多线程池的线程数量的控制。
进一步参考图4,其示出了分布式***的线程管理方法的又一个实施例的流程400。该分布式***的线程管理方法的流程400,包括以下步骤:
步骤401,获取各个线程池申请线程标识的请求。
在本实施例中,分布式***的线程管理方法运行于其上的电子设备(例如图1所示的服务器105)可以通过有线连接方式或者无线连接方式获取各个线程池申请线程标识的请求。其中,上述分布式***包括至少一个服务器以及运行于上述至少一个服务器上的至少两个进程,每个进程都对应有一个线程池。
步骤402,选择预先设置的线程标识列表中状态为空闲的线程标识。
在本实施例中,根据步骤401中获取的各个线程池申请线程标识的请求,上述电子设备(例如图1所示的服务器105)可以选择预先设置的线程标识列表中状态为空闲的线程标识。上述线程标识列表记录有线程标识以及线程标识的状态,上述状态包括空闲和非空闲。线程标识又可称为线程ID,用于唯一标识一个线程。
步骤403,向上述线程池分配所选择的线程标识,使得上述线程池创建所分配的线程标识对应的线程。
在本实施例中,上述电子设备(例如图1所示的服务器105)可以将步骤402中选择的状态为空闲的线程标识分配给线程池,使得上述线程池创建所分配的线程标识对应的线程。上述线程池只有在被分配到线程标识时才能创建对应的线程,以此实现了对每个线程池中线程数量的控制。
步骤404,将线程标识列表中上述线程对应的线程标识的状态修改为非空闲。
在本实施例中,上述电子设备(例如图1所示的服务器105)在步骤403向上述线程池分配所选择的线程标识,使得上述线程池创建所分配的线程标识对应的线程后,将线程标识列表中上述线程对应的线程标识的状态修改为非空闲。以此避免了将同一个线程标识分配给多个线程池导致的无法控制***中线程的总数量。
步骤405,按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目。
在本实施例中,上述电子设备(例如图1所示的服务器105)可以按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目。例如可以5分钟获取一次各个线程池中线程标识的数目。由于线程池中线程执行超时等原因,线程池中线程标识可能被回收。所以需要定时获取线程标识的数目。
步骤406,判断各个线程池中线程标识的数目是否大于上述线程池所需线程标识的数目,如果是,则进入步骤408,如果否,则进入步骤407。
在本实施例中,由于分布式***中可能会接入新的实例,也可能出现服务器宕机或实例崩溃的情况,所以***中进程的数量是变化的,相应的,线程池的数量也是变化的。线程池数量的变化可能会导致线程池所需线程标识的数目的变化,因为,线程池所需线程标识的数目是根据预先设置的分配规则确定的。例如,预先设置的分配规则可以是将线程标识列表中的线程标识平均分配给每个线程池,如果线程标识列表中一共有100个线程标识,当前***中有4个线程池,每个线程池有25个线程标识,一段时间后,新接入了一个线程池,那么每个线程池所需的线程标识为20个,这样,各个线程池中线程标识的数目大于上述线程池所需线程标识的数目,需要调整。
在本实施例的一些可选的实现方式中,也可以响应于新的实例的接入,按照预先设置的分配规则调整各个线程池中线程标识的数目。
步骤407,判断各个线程池中线程标识的数目是否小于上述线程池所需线程标识的数目,如果是,则进入步骤409。
在本实施例中,由于线程池中线程标识被回收,线程池为后接入的线程池,以及其他线程池对应进程崩溃都可能导致线程池中线程标识的数目小于上述线程池所需线程标识的数目。
步骤408,回收上述线程池的线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池销毁所回收的线程标识对应的线程。
在本实施例中,如果线程池中线程标识的数目大于上述线程池所需线程标识的数目,可以在线程池同步运行时,回收上述线程池的线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池销毁所回收的线程标识对应的线程。
步骤409,向上述线程池分配线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池创建所分配的线程标识对应的线程。
在本实施例中,如果线程池中线程标识的数目小于上述线程池所需线程标识的数目,可以在线程池同步运行时,向上述线程池分配线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池创建所分配的线程标识对应的线程。
在本实施例的一些可选的实现方式中,可通过加锁操作避免对于同一线程标识有可能被不同实例获取的情况。例如,回收的线程标识被分配到其他实例时,原实例还未停止上述线程标识对应的线程,此时可以等到原实例明确回复线程已停止或线程超时后再进行分配。
从图4中可以看出,与图2对应的实施例相比,本实施例中的分布式***的线程管理方法的流程400多出了各个线程池中线程标识的数目是否大于上述线程池所需线程标识的数目,以分配或回收线程标识的步骤405、步骤406、步骤407、步骤408、步骤409。由此,本实施例描述的方案可以及时回收及分配线程标识,保证所有实例线程运行总数一定。
进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种分布式***的线程管理装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图5所示,本实施例所述的分布式***的线程管理装置500包括:请求获取单元501、选择单元502、分配单元503和修改单元504。其中,请求获取单元501,配置用于获取各个线程池申请线程标识的请求;选择单元502,配置用于选择预先设置的线程标识列表中状态为空闲的线程标识,其中,上述线程标识列表记录有线程标识以及线程标识的状态,上述状态包括空闲和非空闲;分配单元503,配置用于向上述线程池分配所选择的线程标识,使得上述线程池创建所分配的线程标识对应的线程;修改单元504,配置用于将线程标识列表中上述线程对应的线程标识的状态修改为非空闲。
在本实施例中,分布式***的线程管理装置500中请求获取单元501、选择单元502、分配单元503和修改单元504的具体处理可参看图2对应实施例中的步骤201、步骤202、步骤203和步骤204的实现方式的相关描述,在此不再赘述。
在本实施例的一些可选的实现方式中,上述选择单元502进一步配置用于:判断预先设置的线程标识列表中状态为空闲的线程标识的数量是否大于上述线程池所需线程标识的数目,其中,上述线程池所需线程标识的数目是根据上述线程标识列表中包括的线程标识的总数以及上述线程池的数量确定的;如果是,则选择上述线程池所需线程标识的数目的预先设置的线程标识列表中状态为空闲的线程标识;如果否,则选择预先设置的线程标识列表中所有状态为空闲的线程标识。选择单元502的具体处理可参看图2对应实施例中的步骤202的实现方式的相关描述,在此不再赘述。
在本实施例的一些可选的实现方式中,分布式***的线程管理装置500还可以包括:数目获取单元(图中未示出),配置用于按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目;比较单元(图中未示出),配置用于比较上述各个线程池中线程标识的数目与上述线程池所需线程标识的数目;如果上述线程池中线程标识的数目大于上述线程池所需线程标识的数目,则回收上述线程池的线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池销毁所回收的线程标识对应的线程;如果上述线程池中线程标识的数目小于上述线程池所需线程标识的数目,则向上述线程池分配线程标识,使得上述线程池中线程标识的数目与上述线程池所需线程标识的数目相等,并且使得上述线程池创建所分配的线程标识对应的线程。
在本实施例的一些可选的实现方式中,分布式***的线程管理装置500还可以包括:执行信息获取单元(图中未示出),配置用于按照预先设置的第二时间周期,定时获取各个线程池中线程的执行信息,以判断是否存在因执行时间超过预定时间而被销毁的线程;如果是,则将上述线程标识列表中被销毁的线程的线程标识的状态修改为空闲。
在本实施例的一些可选的实现方式中,分布式***的线程管理装置500还可以包括:服务器宕机监测单元(图中未示出),配置用于响应于监测到服务器出现宕机的情况,将上述线程标识列表中运行于上述服务器上的进程对应的线程池中线程的线程标识的状态修改为空闲状态;进程关闭监测单元(图中未示出),配置用于响应于监测到进程的关闭,将上述进程对应的线程池中线程的线程标识的状态修改为空闲状态。
下面参考图6,其示出了适于用来实现本申请实施例的服务器的计算机***600的结构示意图。
如图5所示,计算机***600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分606加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有***600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括硬盘等的存储部分606;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分607。通信部分607经由诸如因特网的网络执行通信处理。驱动器608也根据需要连接至I/O接口605。可拆卸介质609,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器608上,以便于从其上读出的计算机程序根据需要被安装入存储部分606。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分607从网络上被下载和安装,和/或从可拆卸介质609被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的方法中限定的上述功能。附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括请求获取单元、选择单元、分配单元和修改单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,请求获取单元还可以被描述为“获取各个线程池申请线程标识的请求的单元”。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:获取各个线程池申请线程标识的请求;选择预先设置的线程标识列表中状态为空闲的线程标识,其中,上述线程标识列表记录有线程标识以及线程标识的状态,上述状态包括空闲和非空闲;向线程池分配所选择的线程标识,使得上述线程池创建所分配的线程标识对应的线程;将线程标识列表中上述线程对应的线程标识的状态修改为非空闲。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (10)
1.一种分布式***的线程管理方法,所述分布式***包括至少一个服务器以及运行于所述至少一个服务器上的至少两个进程,每个进程都对应有一个线程池,其特征在于,所述方法包括:
获取各个线程池申请线程标识的请求;
选择预先设置的线程标识列表中状态为空闲的线程标识,其中,所述线程标识列表记录有线程标识以及线程标识的状态,所述状态包括空闲和非空闲;
向所述线程池分配所选择的线程标识,使得所述线程池创建所分配的线程标识对应的线程;
将线程标识列表中所述线程对应的线程标识的状态修改为非空闲。
2.根据权利要求1所述的方法,其特征在于,所述选择预先设置的线程标识列表中状态为空闲的线程标识,包括:
判断预先设置的线程标识列表中状态为空闲的线程标识的数量是否大于所述线程池所需线程标识的数目,其中,所述线程池所需线程标识的数目是根据所述线程标识列表中包括的线程标识的总数以及所述线程池的数量确定的;
如果是,则选择所述线程池所需线程标识的数目的预先设置的线程标识列表中状态为空闲的线程标识;
如果否,则选择预先设置的线程标识列表中所有状态为空闲的线程标识。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目;
比较所述各个线程池中线程标识的数目与所述线程池所需线程标识的数目;
如果所述线程池中线程标识的数目大于所述线程池所需线程标识的数目,则回收所述线程池的线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池销毁所回收的线程标识对应的线程;
如果所述线程池中线程标识的数目小于所述线程池所需线程标识的数目,则向所述线程池分配线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池创建所分配的线程标识对应的线程。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
按照预先设置的第二时间周期,定时获取各个线程池中线程的执行信息,以判断是否存在因执行时间超过预定时间而被销毁的线程;
如果是,则将所述线程标识列表中被销毁的线程的线程标识的状态修改为空闲。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括;
响应于监测到服务器出现宕机的情况,将所述线程标识列表中运行于所述服务器上的进程对应的线程池中线程的线程标识的状态修改为空闲状态;
响应于监测到进程的关闭,将所述进程对应的线程池中线程的线程标识的状态修改为空闲状态。
6.一种分布式***的线程管理装置,所述分布式***包括至少一个服务器以及运行于所述至少一个服务器上的至少两个进程,每个进程都对应有一个线程池,其特征在于,所述装置包括:
请求获取单元,配置用于获取各个线程池申请线程标识的请求;
选择单元,配置用于选择预先设置的线程标识列表中状态为空闲的线程标识,其中,所述线程标识列表记录有线程标识以及线程标识的状态,所述状态包括空闲和非空闲;
分配单元,配置用于向所述线程池分配所选择的线程标识,使得所述线程池创建所分配的线程标识对应的线程;
修改单元,配置用于将线程标识列表中所述线程对应的线程标识的状态修改为非空闲。
7.根据权利要求6所述的装置,其特征在于,所述选择单元进一步配置用于:
判断预先设置的线程标识列表中状态为空闲的线程标识的数量是否大于所述线程池所需线程标识的数目,其中,所述线程池所需线程标识的数目是根据所述线程标识列表中包括的线程标识的总数以及所述线程池的数量确定的;
如果是,则选择所述线程池所需线程标识的数目的预先设置的线程标识列表中状态为空闲的线程标识;
如果否,则选择预先设置的线程标识列表中所有状态为空闲的线程标识。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
数目获取单元,配置用于按照预先设置的第一时间周期,定时获取各个线程池中线程标识的数目;
比较单元,配置用于比较所述各个线程池中线程标识的数目与所述线程池所需线程标识的数目;如果所述线程池中线程标识的数目大于所述线程池所需线程标识的数目,则回收所述线程池的线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池销毁所回收的线程标识对应的线程;如果所述线程池中线程标识的数目小于所述线程池所需线程标识的数目,则向所述线程池分配线程标识,使得所述线程池中线程标识的数目与所述线程池所需线程标识的数目相等,并且使得所述线程池创建所分配的线程标识对应的线程。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括:
执行信息获取单元,配置用于按照预先设置的第二时间周期,定时获取各个线程池中线程的执行信息,以判断是否存在因执行时间超过预定时间而被销毁的线程;如果是,则将所述线程标识列表中被销毁的线程的线程标识的状态修改为空闲。
10.根据权利要求6所述的装置,其特征在于,所述装置还包括:
服务器宕机监测单元,配置用于响应于监测到服务器出现宕机的情况,将所述线程标识列表中运行于所述服务器上的进程对应的线程池中线程的线程标识的状态修改为空闲状态;
进程关闭监测单元,配置用于响应于监测到进程的关闭,将所述进程对应的线程池中线程的线程标识的状态修改为空闲状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610377759.0A CN107450978A (zh) | 2016-05-31 | 2016-05-31 | 分布式***的线程管理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610377759.0A CN107450978A (zh) | 2016-05-31 | 2016-05-31 | 分布式***的线程管理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107450978A true CN107450978A (zh) | 2017-12-08 |
Family
ID=60485029
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610377759.0A Pending CN107450978A (zh) | 2016-05-31 | 2016-05-31 | 分布式***的线程管理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107450978A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108345499A (zh) * | 2018-02-01 | 2018-07-31 | 平安科技(深圳)有限公司 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
CN110109739A (zh) * | 2019-04-25 | 2019-08-09 | 北京奇艺世纪科技有限公司 | 一种多线程应用程序的关闭方法及装置 |
CN111221535A (zh) * | 2019-12-31 | 2020-06-02 | 深圳市九洲电器有限公司 | 线程分配方法、服务器及计算机可读存储介质 |
CN111338577A (zh) * | 2020-02-21 | 2020-06-26 | 苏州浪潮智能科技有限公司 | 一种存储***的多核心线程迁移方法、***及相关组件 |
CN111338803A (zh) * | 2020-03-16 | 2020-06-26 | 北京达佳互联信息技术有限公司 | 一种线程处理方法和装置 |
CN112764912A (zh) * | 2021-02-27 | 2021-05-07 | 中电万维信息技术有限责任公司 | 一种用于数据集成的轻量级分布式调度方法及*** |
US20220121493A1 (en) * | 2020-10-15 | 2022-04-21 | Nxp Usa, Inc. | Method and system for accelerator thread management |
WO2022104924A1 (zh) * | 2020-11-18 | 2022-05-27 | 捷开通讯(深圳)有限公司 | 进程通信方法、装置、存储介质及移动终端 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6604125B1 (en) * | 1999-09-24 | 2003-08-05 | Sun Microsystems, Inc. | Mechanism for enabling a thread unaware or non thread safe application to be executed safely in a multi-threaded environment |
US20090183167A1 (en) * | 2008-01-15 | 2009-07-16 | Mark Gary Kupferschmidt | Two-Tiered Dynamic Load Balancing Using Sets of Distributed Thread Pools |
CN101777008A (zh) * | 2009-12-31 | 2010-07-14 | 中兴通讯股份有限公司 | 移动终端***线程池实现方法及装置 |
CN102053859A (zh) * | 2009-11-09 | 2011-05-11 | ***通信集团甘肃有限公司 | 批量数据处理的方法与装置 |
CN102099789A (zh) * | 2008-06-06 | 2011-06-15 | 苹果公司 | 多处理器的多维线程分组 |
CN102710452A (zh) * | 2012-06-26 | 2012-10-03 | 深圳市华力特电气股份有限公司 | 一种管理多客户端访问的方法和装置 |
-
2016
- 2016-05-31 CN CN201610377759.0A patent/CN107450978A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6604125B1 (en) * | 1999-09-24 | 2003-08-05 | Sun Microsystems, Inc. | Mechanism for enabling a thread unaware or non thread safe application to be executed safely in a multi-threaded environment |
US20090183167A1 (en) * | 2008-01-15 | 2009-07-16 | Mark Gary Kupferschmidt | Two-Tiered Dynamic Load Balancing Using Sets of Distributed Thread Pools |
CN102099789A (zh) * | 2008-06-06 | 2011-06-15 | 苹果公司 | 多处理器的多维线程分组 |
CN102053859A (zh) * | 2009-11-09 | 2011-05-11 | ***通信集团甘肃有限公司 | 批量数据处理的方法与装置 |
CN101777008A (zh) * | 2009-12-31 | 2010-07-14 | 中兴通讯股份有限公司 | 移动终端***线程池实现方法及装置 |
CN102710452A (zh) * | 2012-06-26 | 2012-10-03 | 深圳市华力特电气股份有限公司 | 一种管理多客户端访问的方法和装置 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108345499A (zh) * | 2018-02-01 | 2018-07-31 | 平安科技(深圳)有限公司 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
CN108345499B (zh) * | 2018-02-01 | 2019-05-17 | 平安科技(深圳)有限公司 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
CN110109739A (zh) * | 2019-04-25 | 2019-08-09 | 北京奇艺世纪科技有限公司 | 一种多线程应用程序的关闭方法及装置 |
CN111221535A (zh) * | 2019-12-31 | 2020-06-02 | 深圳市九洲电器有限公司 | 线程分配方法、服务器及计算机可读存储介质 |
CN111338577A (zh) * | 2020-02-21 | 2020-06-26 | 苏州浪潮智能科技有限公司 | 一种存储***的多核心线程迁移方法、***及相关组件 |
CN111338803A (zh) * | 2020-03-16 | 2020-06-26 | 北京达佳互联信息技术有限公司 | 一种线程处理方法和装置 |
CN111338803B (zh) * | 2020-03-16 | 2024-01-09 | 北京达佳互联信息技术有限公司 | 一种线程处理方法和装置 |
US20220121493A1 (en) * | 2020-10-15 | 2022-04-21 | Nxp Usa, Inc. | Method and system for accelerator thread management |
US11861403B2 (en) * | 2020-10-15 | 2024-01-02 | Nxp Usa, Inc. | Method and system for accelerator thread management |
WO2022104924A1 (zh) * | 2020-11-18 | 2022-05-27 | 捷开通讯(深圳)有限公司 | 进程通信方法、装置、存储介质及移动终端 |
CN112764912A (zh) * | 2021-02-27 | 2021-05-07 | 中电万维信息技术有限责任公司 | 一种用于数据集成的轻量级分布式调度方法及*** |
CN112764912B (zh) * | 2021-02-27 | 2022-09-30 | 中电万维信息技术有限责任公司 | 一种用于数据集成的轻量级分布式调度方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107450978A (zh) | 分布式***的线程管理方法和装置 | |
CN109814879B (zh) | 自动化ci/cd项目部署方法、存储介质 | |
CN106033373B (zh) | 一种云计算平台中虚拟机资源调度方法和调度*** | |
CN105373428B (zh) | 一种任务调度方法和*** | |
CN107341051A (zh) | 集群任务协调方法、***和装置 | |
CN106331150A (zh) | 用于调度云服务器的方法和装置 | |
US20150163288A1 (en) | Cloud application deployment | |
CN110377520B (zh) | 交易场景的测试方法及装置、电子设备和可读存储介质 | |
CN108432208A (zh) | 一种业务编排方法、装置及服务器 | |
CN106708597A (zh) | 一种基于Openstack创建集群环境的方法、装置及*** | |
CN104750528B (zh) | 一种Android程序中的组件管理方法和装置 | |
CN103530231A (zh) | 一种基于业务流程控制的应用程序测试方法及*** | |
CN109002295A (zh) | 一种静态代码扫描方法、***、服务器及存储介质 | |
CN106371881A (zh) | 一种用于服务器内程序版本更新的方法和*** | |
CN103064717A (zh) | 一种集群***并行安装软件的装置和方法 | |
CN106131055A (zh) | 用于分配操作权限的方法和装置 | |
US11429268B2 (en) | User interface for management of a dynamic video signal processing platform | |
CN110347494A (zh) | 上下文信息管理方法、装置、***及计算机可读存储介质 | |
US10929279B2 (en) | Systems and method for automated testing framework for service portal catalog | |
CN104967532B (zh) | Toc技术运维***及应用方法 | |
CN115860451A (zh) | 一种流程运行方法、装置、电子设备及存储介质 | |
CN110109684B (zh) | 区块链节点管理代理服务安装方法、电子装置及存储介质 | |
CN106874047A (zh) | 分布式***调度方法、装置及分布式*** | |
CN106294037A (zh) | 拷机测试方法及装置 | |
CN109976883A (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 |
Application publication date: 20171208 |
|
RJ01 | Rejection of invention patent application after publication |