CN117149414A - 一种任务处理方法、装置、电子设备及可读存储介质 - Google Patents
一种任务处理方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN117149414A CN117149414A CN202311031255.XA CN202311031255A CN117149414A CN 117149414 A CN117149414 A CN 117149414A CN 202311031255 A CN202311031255 A CN 202311031255A CN 117149414 A CN117149414 A CN 117149414A
- Authority
- CN
- China
- Prior art keywords
- thread
- subtasks
- threads
- thread pool
- memory
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 28
- 238000000034 method Methods 0.000 claims abstract description 45
- 238000012545 processing Methods 0.000 claims abstract description 36
- 238000012544 monitoring process Methods 0.000 claims description 28
- 230000008569 process Effects 0.000 claims description 20
- 238000004064 recycling Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 11
- 238000000354 decomposition reaction Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 22
- 230000001960 triggered effect Effects 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000013467 fragmentation Methods 0.000 description 3
- 238000006062 fragmentation reaction Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 230000006378 damage Effects 0.000 description 2
- 241000189662 Calla Species 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000149 penetrating effect Effects 0.000 description 1
- 238000002407 reforming Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/5061—Partitioning or combining of resources
-
- 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/5017—Task decomposition
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
本发明适用于计算机处理技术领域,提供了一种任务处理方法、装置、电子设备及可读存储介质,方法包括:获取各外部请求;将所述外部请求进行分解,得到多个子任务;将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;基于所述线程分配执行所述子任务所需的内存资源;通过所述内存资源,执行所述子任务。通过将外部请求进行分解得到多个子任务,并将多个子任务提交到预设的线程池中,利用预设的线程池分配线程执行子任务所需的内存资源,从而通过内存资源执行子任务,解决了在任务处理中容易出现Full GC,从而导致服务不可用,影响正常业务的问题。
Description
技术领域
本发明属于计算机处理技术领域,尤其涉及一种任务处理方法、装置、电子设备及可读存储介质。
背景技术
Full GC是HBaseJVM中的一种垃圾回收机制,当然也存储在于Hbase中,当HBase堆内存占用达到上限阈值时,而垃圾回收器可能无法短时间内回收足够的内存以满足应用程序的需求,将会导致Full GC的发生。当年轻代GC停留时长短不足以释放更多资源,从而容易导致占用资源过多,触发FullGC;当内存分配不均匀容易导致内存碎片化严重时,同样很容易触发FullGC,从而导致服务不可用,影响正常业务的问题。
发明内容
本发明实施例提供一种任务处理方法,旨在解决现有任务处理中容易出现FullGC,从而导致服务不可用,影响正常业务的问题。通过将外部请求进行分解得到多个子任务,并将多个子任务提交到预设的线程池中,利用预设的线程池分配线程执行子任务所需的内存资源,从而通过内存资源执行子任务,解决了在任务处理中容易出现Full GC,从而导致服务不可用,影响正常业务的问题。
本发明实施例是这样实现的,提供一种任务处理方法,包括以下步骤:
获取各外部请求;
将所述外部请求进行分解,得到多个子任务;
将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;
基于所述线程分配执行所述子任务所需的内存资源;
通过所述内存资源,执行所述子任务。
可选的,在所述将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程之前,所述方法还包括:
在服务启动时,创建线程池;
启动所述线程池以及线程监控服务,得到预设的线程池。
可选的,所述创建线程池,包括:
创建第一对象的线程;
创建第二对象的线程,所述第一对象所需的内存小于所述第二对象所述的内存。
可选的,所述通过预设的线程池分配线程,包括:
当线程池中有空闲的线程时,则将所述空闲的线程分配给所述子任务;
当线程池中没有空闲的线程时,则创建新的线程分配给所述子任务;
当线程池中的线程达到最大线程数时,则将所述子任务添加到队列中排队。
可选的,所述基于所述线程分配执行所述子任务所需的内存资源,包括:
在线程执行前,确定所述子任务在运行过程中需要的内存资源;
基于所述子任务在运行过程中需要的内存资源,对所述子任务对应的线程进行内存分配。
可选的,所述方法还包括:
当任务执行完成后,若监控到所述线程池中线程的使用率低于预设的阈值,则销毁所述线程池中的多余的空闲线程。
可选的,所述方法还包括:
当任务执行完成后,对内存进行统一回收。
本发明实施例还提供一种任务处理装置,包括:
获取模块,用于获取各外部请求;
分解模块,用于将所述外部请求进行分解,得到多个子任务;
第一分配模块,用于将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;
第二分配模块,用于基于所述线程分配执行所述子任务所需的内存资源;
执行模块,用于通过所述内存资源,执行所述子任务。
本发明实施例还提供一种电子设备,包括存储器、处理器以及存储在所述存储器中并能够在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如任一实施例中所述的一种任务处理方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如任一实施例中所述的一种任务处理方法。
本发明所达到的有益效果,本申请通过获取各外部请求;将所述外部请求进行分解,得到多个子任务;将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;基于所述线程分配执行所述子任务所需的内存资源;通过所述内存资源,执行所述子任务。通过将外部请求进行分解得到多个子任务,并将多个子任务提交到预设的线程池中,利用预设的线程池分配线程执行子任务所需的内存资源,从而通过内存资源执行子任务,解决了在任务处理中容易出现Full GC,从而导致服务不可用,影响正常业务的问题。
附图说明
图1为本申请实施例提供的一种任务处理方法的流程图;
图2为本申请实施例提供的另一种任务处理方法的示意图;
图3示出了本申请实施例提供的另一种任务处理方法的示意图;
图4为本申请实施例提供的另一种任务处理方法的示意图;
图5为本申请实施例提供的一种任务处理装置的结构示意图;
图6为本申请实施例提供的另一种任务处理装置的结构示意图;
图7为本申请实施例提供的创建模块的结构示意图;
图8为本申请实施例提供的第一分配模块的结构示意图;
图9为本申请实施例提供的第二分配模块的结构示意图;
图10为本申请实施例提供的另一种任务处理装置的结构示意图;
图11为本申请实施例提供的另一种任务处理装置的结构示意图;
图12为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例一
在本实施例中,图1示出了本申请实施例提供的一种任务处理方法的流程图。如图1所示,该方法包括步骤S101至S105。各个步骤的具体实现原理如下:
S101、获取外部请求。
在本发明实施例中,上述任务处理方法用于HBase***;HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储***。
上述外部可以理解为与HBase外部进行交互的应用程序或服务。
上述外部请求可以理解为一个任务,需要在HBase中执行的任务,比如数据写入或者查询API等操作。
需要说明的是,通过Hbase服务接收外部请求。
S102、将外部请求进行分解,得到多个子任务。
在本发明实施例中,可以将一个大的任务或请求分成多个小的任务或子任务,然后分别处理每个子任务。可以提高任务的处理效率和性能,因为每个子任务可以独立地运行,不会影响其他子任务的执行。同时,分解任务也有助于降低***的复杂度,使得***更易于管理和维护。
需要说明的是,外部请求可能扫描的数据范围广,或者批量提交又或者是批量Get请求,那么如果用一个任务执行,就会在短时间内占用非常多的内存,同时也容易产生大对象,大对象则可能直接击穿年轻代进入老年代。任务拆分则可以有效减少该问题出现的频率。
S103、将多个子任务提交到预设的线程池,并通过预设的线程池分配线程。
在本发明实施例中,上述每个线程对应一个子任务。上述线程是指操作***中的基本执行单元,是操作***进行运算调度的基本单位。
上述预设的线程池是一个预先设置好的线程池,线程池用于创建超线程、销毁线程以及调度线程。在本发明中,优选为可变线程池(newCachedThreadPool),可变线程池可根据实际业务需要进行扩容或者缩容,并且可变线程池可重复利用,当线程中没有可用线程时才会创建新线程。
上述线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个线程,但线程的数目永远不会超过最大值。超过最大值的线程可以排队,直到线程释放后有空闲的线程时再继续执行。
在本发明实施例中,通过预设的线程池分配线程,可以避免每个任务都创建一个新的线程,从而减少了***资源的消耗,提高了***的稳定性和可靠性。同时,线程池还可以通过调整线程数量来适应不同的任务负载,从而进一步提高***的性能和可扩展性。
需要说明的是,当提交任务时,线程池会根据当前线程池中的空闲线程数量,将任务分配给一个可用的线程来执行。这样可以提高任务的处理效率,因为每个线程都在执行独立的任务,不需要等待其他任务的完成。同时,预先设置好的线程池可以根据任务的需求自动调整线程数量,以达到最佳的性能。
S104、基于线程分配执行子任务所需的内存资源。
在本发明实施例中,当一个线程池接收到多个子任务时,线程池会预先创建一定数量的线程,这些线程会被预设好,以便执行多个子任务。
进一步的,每一个子任务都需要一定的内存资源来存储正在运行的程序和数据。每一个线程都需要一定的内存资源来存储自己的代码、数据和执行状态等信息。
需要说明的是,预设的线程池中的线程是预先创建好的,用于执行多个子任务的线程,这些线程分配执行任务所需的内存资源。这可以提高任务的处理效率,因为每个线程都在执行独立的任务,不需要等待其他任务的完成,同时也可以避免创建过多的线程导致***资源的浪费。
S105、通过内存资源,执行子任务。
在本发明实施例中,每一个子任务都需要一定的内存资源来存储正在运行的程序和数据。当多个子任务同时执行时,线程池会通过线程为每个任务分配一定的内存资源,以确保程序能够正常运行。
需要说明的是,执行子任务的过程包括读取子任务的代码和数据,并将其存储在内存资源中,然后执行子任务的代码并输出结果。执行子任务的线程会独立地执行任务,不需要等待其他任务的完成。
在本发明实施例,获取各外部请求;将所述外部请求进行分解,得到多个子任务;将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;基于所述线程分配执行所述子任务所需的内存资源;通过所述内存资源,执行所述子任务。通过将外部请求进行分解得到多个子任务,并将多个子任务提交到预设的线程池中,利用预设的线程池分配线程执行子任务所需的内存资源,从而通过内存资源执行子任务,解决了在任务处理中容易出现Full GC,从而导致服务不可用,影响正常业务的问题。
可选的,还包括:在服务启动时,创建线程池;启动线程池以及线程监控服务,得到预设的线程池。
在本发明实施例中,上述线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池用于创建超线程、销毁线程以及调度线程。在本发明中,优选为可变线程池(newCachedThreadPool),可变线程池可根据实际业务需要进行扩容或者缩容,并且可变线程池可重复利用,当线程中没有可用线程时才会创建新线程。
上述线程监控服务主要负责监控线程池的状态和性能,提供监控线程单池的方法和指标,如活动线程数、内存状况、任务队列长度、线程池使用率等。线程监控服务会周期性地采集线程池的状态信息,并提供接口供外部调用,用于实时监控线程池的运行情况。
可选的,创建线程池的步骤包括:创建第一对象的线程;创建第二对象的线程,第一对象所需的内存小于第二对象所需的内存。
在本发明实施例中,上述第一对象的线程可以理解为正常分配内存的线程。
上述第二对象的线程可以理解为固定大小的线程,主要是用于处理HBase中的大对象,大对象可以是海量的日志文件。
在本发明实施例中,创建第一个对象所需的内存小于创建第二个对象所需的内存。
在一种可能的实施例中,当HBase中的某个Region存储的大对象超过了JVM堆内存的限制时,就会触发Full GC,导致HBase服务停止响应。为了避免这种情况的发生,HBase引入了一种称为“穿透GVM新生代”的机制,即在JVM堆外分配一块固定大小的内存,用于存储击穿HBase新生代的HBase大对象。这样,即使HBase中的大对象超过了堆内存的限制,也可以通过这部分固定大小的内存进行存储和处理,而不会影响业务的正常运行。
需要说明的是,这部分固定大小的内存回收不会影响业务正常运行,因为这部分固定大小的内存只是用于存储击穿HBase新生代的HBase大对象,而不会对业务数据进行修改或访问。
可选的,通过预设的线程池分配线程的步骤包括:当线程池中有空闲的线程时,则将空闲的线程分配给子任务;当线程池中没有空闲的线程时,则创建新的线程分配给子任务;当线程池中的线程达到最大线程数时,则将子任务添加到队列中排队。
在本发明实施例中,上述最大线程数指一个进程或线程能够同时处理的最大任务数。
当线程池中有空闲的线程时,直接调用空闲的线程分配给子任务,用于执行子任务;当线程中没有空闲的线程时,则会创建新的线程执行子任务;当线程池中的线程达到最大线程数时,将子任务添加到队列中排队,直到线程释放后有空闲的线程是再继续执行子任务。
需要说明的是,每个子任务都会有一个单独的线程执行,当线程池中有空闲线程就不需要创建新线程,当没有空线程时才会创建新线程。
可选的,基于线程分配执行子任务所需的内存资源的步骤包括:在线程执行前,确定子任务在运行过程中需要的内存资源;基于子任务在运行过程中需要的内存资源,对子任务对应的线程进行内存分配。
在本发明实施例中,为了保证子任务在执行过程中能够获得足够的内存资源,需要在子任务开始执行之前确定子任务所需的内存资源。然后,根据子任务在运行过程中所需的内存资源,为子任务分配相应的内存空间。
需要说明的是,如果没有事先确定子任务所需的内存资源,就会导致线程池中线程在执行过程中频繁地进行内存分配和释放操作,从而影响程序的性能和稳定性。
可选的,还包括:当任务执行完成后,若监控到线程池中线程的使用率低于预设的阈值,则销毁线程池中多余的空闲线程。
在本发明实施例中,上述使用率指的是线程池中运行线程数占线程池中线程总数的比例。上述预设的阈值是预先设定好的阈值。
在任务执行完成后,当线程监控服务监控到线程池中线程的使用率低于预设的阈值,才会销毁多余的空闲线程,因为线程的销毁和创建所需的时间成本较高,也可能会影响到正常业务的执行。
需要说明的是,在任务执行完成后,线程池中的线程不一定会销毁,因为线程是可以重复利用的,只有当线程监控服务监控到线程池中线程的使用率低于预设阈值,才会销毁多余的空闲线程。
可选的,还包括:当任务执行完成后,对内存进行统一回收。
在本发明实施例中,在任务执行完成后,内存会被统一回收。为使内存回收和任务的生命周期保持一致,可以快速释放内存,这样可以降低Full GC的触发。HBase分配的固定内存块不会随任务的结束而回收,线程监控服务会定期检测固定内存块的使用率,达到预设的阈值时才会触发回收。
实施例二
在本实施例中,请参见图2,图2示出了本申请实施例提供的另一种任务处理方法的示意图。其中,该方法包括HBase请求模块、线程池管理模块、任务处理模块、立即回收模块以及监控模块。
上述HBase请求模块负责接收外部的HBase请求,例如读取或写入数据。HBase请求模块将请求封装成任务,并提交给线程池处理。通过任务分解方式,将大的请求拆分成多个小任务,以提高并发处理能力和***效率。
上述线程池管理模块负责管理线程池,包括线程的创建、销毁和调度。需要根据***的负载和性能需求来选择合适的线程池,并根据实际情况监控和调整线程池的运行状态。
上述任务处理模块负责定义任务接口和具体的任务实现。任务模块定义了任务的接口,如Runnable或Callable,并提供了任务的执行逻辑。实际的热舞逻辑可能由业务逻辑决定,可以根据具体需求编写适当的任务实现,并在任务中实现具体的业务逻辑。
上述垃圾回收模块负责任务处理后的垃圾回收。任务执行后会在内存中产生数据垃圾,当触发到内存回收机制,那么就由垃圾回收模块进行垃圾回收,包括内存变量、引用对象、实体对象等资源,同时进行内存碎片化重整,达到内存最大化复用。
上述监控模块负责监控线程池的状态和性能。提供监控线程池的方法和指标,比如活动线程数、任务队列长度、线程池使用率等。监控模周期性地采集线程池的状态信息,并提供接口供外部调用,用于实时监控线程池的运行状况。
在本发明实施例中,通过内存分配方式来解决Full GC的问题,也是通过内存池技术来解决Full GC的问题,内存池是一个专门用来分配内存的区域,采用预分配和回收复用技术,内存碎片化问题可以得到大大缓解。
实施例三
在本实施例中,请参见图3,图3示出了本申请实施例的另一种任务处理方法的示意图。其中,该方法包括:
S301、外部发送Hbase请求。
其中,上述外部可以理解为与HBase集群外部进行交互的应用程序或服务。程序外部向HBase集群发送请求,以查询或修改HBase中的数据。
S302、接收Hbase请求。
其中,接收HBase请求通常是由HBase Master节点接收的。HBase Master是HBase集群的主节点,负责协调和管理HBase集群中各个RegionServer的运行,接收来自客户端的请求并将请求路由到对应的RegionServer进行处理。当客户端向HBase集群发送请求时,请求会先被Master节点接收并处理。然后再将请求转发给对应的RegionServer进行处理。
S303、请求任务分解。
其中,将外部请求分解成多个小任务并打包提交到线程池,因为外部请求可能扫描的数据范围广,或者批量提交又或者是批量Get请求,那么如果用一个任务执行,就会在段时间内占用非常多的内存,同时也容易产生大对象,大对象则可能直接击穿年轻代进入老年代。任务拆分则可以有效减少该问题出现的频率。
S304、提交任务到线程池。
其中,任务提交到线程池后,每个子任务都会有一个单独的线程执行。当线程池中有空闲的线程时直接调用空闲的线程。若无线程时则会创建新的线程执行子任务。若线程池达到最大线程数,那么任务就会在队列中排队,直到线程释放后有空闲的线程时再继续执行。
S305、创建线程。
其中,若线程池中有空闲线程则无需创建新线程,若无空闲线程才会创建新线程。
S306、申请任务执行所需内存。
其中,在线程执行前,会对线程所执行的任务分配内存,用于线程存储运行中产生的对象数据或相关引用变量,可能初次分配的内存不够,那么就会扩容,若出现大对象,则直接进入HBase分配的固定大小的内存中。
S307、执行线程任务。
其中,执行各种任务,比如写入数据、查询数据等。同时,HBase内部会进行Region的压缩和转移操作,以优化存储和查询性能。
S308、销毁线程。
其中,在任务执行完成后,当监控服务监控到线程池中线程的使用率低于预设的阈值,才会销毁线程,因为现成的销毁和创建所需的时间成本较高,也可能会影响到正常业务的执行。
需要说明的是,在任务执行完成后,线程池中的线程不一定会销毁,因为线程是可以重复利用的,只有当监控服务监控到线程池中线程的使用率低于预设阈值,才会销毁线程。
S309、内存释放。
其中,在任务执行完成后,内存会被统一回收。为使内存回收和任务的生命周期保持一致,可以快速释放内存,这样可以降低Full GC的触发。HBase分配的固定内存块不会随任务的结束而回收,监控服务会定期检测固定内存块的使用率,达到预设的阈值时才会触发回收。
实施例四
在本实施例中,如图4所示,图4示出了本申请实施例的另一种任务处理方法的示意图。其中,该方法用于Hbase服务启动,步骤包括:
S401、启动Hbase Master服务。
其中,上述Hbase Masterr服务是指HBase集群的主节点,它负责管理HBase集群的元数据和分布式事务。
S402、启动RegionServer。
其中,上述RegionServer是Hadoop分布式文件***(HDFS)中的一个组件,它是一个独立的进程,用于管理文件***中的文件和目录。
S403、创建线程池。
其中,上述线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池用于创建超线程、销毁线程以及调度线程。
S404、启动监控服务。
其中,上述监控服务主要负责监控线程池的状态和性能。提供监控线程单池的方法和指标,如活动线程数、任务队列长度、线程池使用率以及固定内存块的使用率等。监控服务会周期性地采集线程池的状态信息,并提供接口供外部调用,用于实时监控线程池的运行情况。
S405、分配固定大小额外内存用于存储Hbase大对象。
其中,除了正常分配内存,还会额外分配一块固定大小的线程。主要用于存储击穿GVM新生代的HBase大对象,避免HBase的堆内存迅速增长出现Full GC的情况。后续该固定大小的内存回收不会影响业务正常运行。
S406、Hbase Region元数据效验并判断是否重新均衡。
其中,在Hbase中对Region元数据进行有效性检查,并根据检查结果判断是否需要进行重新均衡。
需要说明的是,当Region元数据发生变化时,Hbase会通过元数据服务(Master)和RegionServer进行元数据同步。元数据同步过程中,会对Region元数据进行效验,包括Region的名称、大小、偏移量等信息。如果元数据有误,则会返回错误信息,并停止元数据同步。
S407、启动完成,等待外部请求。
其中,Hbase服务已经启动完成,正在等待外部的请求或指令。
实施例五
对应于上述图1所示的一种任务处理方法,图5示出的是本申请实施例提供的一种任务处理装置的示意图,装置M50包括:
获取模块M501,用于获取外部请求;
分解模块M502,用于将所述外部请求进行分解,得到多个子任务;
第一分配模块M503,用于将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;
第二分配模块M504,用于基于所述线程分配执行所述子任务所需的内存资源;
执行模块M505,用于通过所述内存资源,执行所述子任务。
可选的,参考图6所示,图6为本申请实施例提供的另一种任务处理装置的结构示意图。装置M50还包括:
创建模块M506,用于在服务启动时,创建线程池;
启动模块M507,用于启动所述线程池以及线程监控服务,得到预设的线程池。
可选的,参考图7所示,图7为本申请实施例提供的创建模块的结构示意图。创建模块M506包括:
第一创建子模块M5061,用于创建第一对象的线程;
第二创建子模块M5062,用于创建第二对象的线程,所述第一对象所需的内存小于所述第二对象所需的内存。
可选的,参考图8所示,图8为本申请实施例提供的第一分配模块的结构示意图。第一分配模块M503包括:
第一分配子模块M5031,用于当线程池中有空闲的线程时,则将空闲的线程分配给所述子任务;
第二分配子模块M5032,用于当线程池中没有空闲的线程时,则创建新的线程分配给所述子任务;
添加子模块M5033,用于当线程池中的线程达到最大线程数时,则将子任务添加到队列中排队。
可选的,参考图9所示,图9为本申请实施例提供的第二分配模块的结构示意图。第二分配模块M504包括:
确定子模块M5041,用于在线程执行前,确定子任务在运行过程中需要的内存资源;
第三分配子模块M5042,用于基于所述子任务在运行过程中需要的内存资源,对所述子任务对应的线程进行内存分配。
可选的,请参考图10,图10为本申请实施例提供的另一种任务处理装置的结构示意图。装置M50还包括:
销毁模块M508,用于当任务执行完成后,若监控到线程池中线程的使用率低于预设的阈值,则销毁线程池中多余的空闲线程。
可选的,请参见图11,图11为本申请实施例提供的另一种任务处理装置的结构示意图。装置M50还包括:
回收模块M509,用于当任务执行完成后,对内存进行统一回收。
实施例六
图12为本申请实施例提供的一种电子设备的结构示意图。如图12所示,该实施例的电子设备D12包括:至少一个处理器D120(图12中仅示出一个)、存储器D121、网络接口D122,以及存储在存储器D121中并可在至少一个处理器D120上运行的计算机程序。其中,处理器D120用于调用存储器D121存储的计算机程序,并执行如下步骤:
获取各外部请求;
将所述外部请求进行分解,得到多个子任务;
将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;
基于所述线程分配执行所述子任务所需的内存资源;
通过所述内存资源,执行所述子任务。
可选的,在所述将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程之前,处理器D120执行的所述方法还包括:
在服务启动时,创建线程池;
启动所述线程池以及线程监控服务,得到预设的线程池。
可选的,处理器D120执行的所述创建线程池,包括:
创建第一对象的线程;
创建第二对象的线程,所述第一对象所需的内存小于所述第二对象所述的内存。
可选的,处理器D120执行的所述通过预设的线程池分配线程,包括:
当线程池中有空闲的线程时,则将所述空闲的线程分配给所述子任务;
当线程池中没有空闲的线程时,则创建新的线程分配给所述子任务;
当线程池中的线程达到最大线程数时,则将所述子任务添加到队列中排队。
可选的,所处理器D120执行的述基于所述线程分配执行所述子任务所需的内存资源,包括:
在线程执行前,确定所述子任务在运行过程中需要的内存资源;
基于所述子任务在运行过程中需要的内存资源,对所述子任务对应的线程进行内存分配。
可选的,处理器D120执行的所述方法还包括:
当任务执行完成后,若监控到所述线程池中线程的使用率低于预设的阈值,则销毁所述线程池中多余的空闲线程。
可选的,处理器D120执行的所述方法还包括:
当任务执行完成后,对内存进行统一回收。
本发明实施例提供的电子设备D12能够实现一种任务处理方法实施例中的各个实施方式,以及相应有益效果,为避免重复,这里不再赘述。
本发明实施例提供的电子设备能够实现上述方法实施例中任务处理方法实现的各个过程,且可以达到相同的有益效果。为避免重复,这里不再赘述。
本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器D120执行时实现本发明实施例提供的一种任务处理方法实施例的各个程,且能达到相同的技术效果,为避免重复,这里不再赘述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种任务处理方法,其特征在于,包括以下步骤:
获取各外部请求;
将所述外部请求进行分解,得到多个子任务;
将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;
基于所述线程分配执行所述子任务所需的内存资源;
通过所述内存资源,执行所述子任务。
2.如权利要求1所述的任务处理方法,其特征在于,在所述将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程之前,所述方法还包括:
在服务启动时,创建线程池;
启动所述线程池以及线程监控服务,得到预设的线程池。
3.如权利要求2所述的任务处理方法,其特征在于,所述创建线程池,包括:
创建第一对象的线程;
创建第二对象的线程,所述第一对象所需的内存小于所述第二对象所述的内存。
4.如权利要求3所述的任务处理方法,其特征在于,所述通过所述预设的线程池分配线程,包括:
当所述线程池中有空闲的线程时,则将所述空闲的线程分配给所述子任务;
当所述线程池中没有空闲的线程时,则创建新的线程分配给所述子任务;
当所述线程池中的线程达到最大线程数时,则将所述子任务添加到队列中排队。
5.如权利要求3所述的任务处理方法,其特征在于,所述基于所述线程分配执行所述子任务所需的内存资源,包括:
在线程执行前,确定所述子任务在运行过程中需要的内存资源;
基于所述子任务在运行过程中需要的内存资源,对所述子任务对应的线程进行内存分配。
6.如权利要求5所述的任务处理方法,其特征在于,所述方法还包括:
当任务执行完成后,若监控到所述线程池中线程的使用率低于预设的阈值,则销毁所述线程池中多余的空闲线程。
7.如权利要求6所述的任务处理方法,其特征在于,所述方法还包括:
当任务执行完成后,对内存进行统一回收。
8.一种任务处理装置,其特征在于,包括:
获取模块,用于获取各外部请求;
分解模块,用于将所述外部请求进行分解,得到多个子任务;
第一分配模块,用于将所述多个子任务提交到预设的线程池,并通过所述预设的线程池分配线程,每个所述线程对应一个所述子任务;
第二分配模块,用于基于所述线程分配执行所述子任务所需的内存资源;
执行模块,用于通过所述内存资源,执行所述子任务。
9.一种电子设备,包括存储器、处理器以及存储在所述存储器中并能够在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的一种任务处理方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的一种任务处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311031255.XA CN117149414A (zh) | 2023-08-15 | 2023-08-15 | 一种任务处理方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311031255.XA CN117149414A (zh) | 2023-08-15 | 2023-08-15 | 一种任务处理方法、装置、电子设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117149414A true CN117149414A (zh) | 2023-12-01 |
Family
ID=88905323
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311031255.XA Pending CN117149414A (zh) | 2023-08-15 | 2023-08-15 | 一种任务处理方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117149414A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117472593A (zh) * | 2023-12-27 | 2024-01-30 | 中诚华隆计算机技术有限公司 | 一种多线程间资源分配方法及*** |
CN117745254A (zh) * | 2023-12-06 | 2024-03-22 | 镁佳(北京)科技有限公司 | 课程的生成方法、装置、计算机设备及可读存储介质 |
-
2023
- 2023-08-15 CN CN202311031255.XA patent/CN117149414A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117745254A (zh) * | 2023-12-06 | 2024-03-22 | 镁佳(北京)科技有限公司 | 课程的生成方法、装置、计算机设备及可读存储介质 |
CN117472593A (zh) * | 2023-12-27 | 2024-01-30 | 中诚华隆计算机技术有限公司 | 一种多线程间资源分配方法及*** |
CN117472593B (zh) * | 2023-12-27 | 2024-03-22 | 中诚华隆计算机技术有限公司 | 一种多线程间资源分配方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112199194B (zh) | 基于容器集群的资源调度方法、装置、设备和存储介质 | |
CN117149414A (zh) | 一种任务处理方法、装置、电子设备及可读存储介质 | |
US6411982B2 (en) | Thread based governor for time scheduled process execution | |
WO2019223596A1 (zh) | 事件处理方法、装置、设备及存储介质 | |
CN108334396B (zh) | 一种数据处理方法和装置、资源组的创建方法和装置 | |
US20100269110A1 (en) | Executing tasks through multiple processors consistently with dynamic assignments | |
CN108595282A (zh) | 一种高并发消息队列的实现方法 | |
CN112286671B (zh) | 一种容器化批处理作业调度方法、装置和计算机设备 | |
CN109783255B (zh) | 数据解析分发装置及高并发数据处理方法 | |
JP2008152618A (ja) | ジョブ割当プログラム、方法及び装置 | |
CN113886089A (zh) | 一种任务处理方法、装置、***、设备及介质 | |
Reano et al. | Intra-node memory safe gpu co-scheduling | |
CN112035255A (zh) | 线程池资源管理任务处理方法、装置、设备及存储介质 | |
CN110659131A (zh) | 任务处理方法、电子装置、计算机设备及存储介质 | |
CN114625533A (zh) | 分布式任务调度方法、装置、电子设备及存储介质 | |
CN114461385A (zh) | 线程池调度方法、装置、设备以及可读存储介质 | |
US20090187614A1 (en) | Managing Dynamically Allocated Memory in a Computer System | |
CN114546587A (zh) | 一种在线图像识别服务的扩缩容方法及相关装置 | |
CN113094172A (zh) | 应用于分布式存储***的服务器管理方法和装置 | |
JP7122299B2 (ja) | 処理タスクを実行するための方法、装置、デバイス、および記憶媒体 | |
CN117056080A (zh) | 计算资源的分配方法、装置、计算机设备和存储介质 | |
CN112380030A (zh) | 主任务处理方法、装置、服务器和存储介质 | |
JP2006107197A (ja) | メモリ制御方法およびプログラムならびに端末装置 | |
CN116127494A (zh) | 用户并发访问的控制方法及相关装置 | |
CN115878910A (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 |