CN104899099A - 一种基于线程池的任务分配方法 - Google Patents
一种基于线程池的任务分配方法 Download PDFInfo
- Publication number
- CN104899099A CN104899099A CN201510274987.0A CN201510274987A CN104899099A CN 104899099 A CN104899099 A CN 104899099A CN 201510274987 A CN201510274987 A CN 201510274987A CN 104899099 A CN104899099 A CN 104899099A
- Authority
- CN
- China
- Prior art keywords
- pool
- thread
- task
- thread pool
- allocating tasks
- 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
Landscapes
- Advance Control (AREA)
Abstract
本发明提供一种基于线程池的任务分配方法,其包括:步骤一,创建线程池和任务池;步骤二,预先确定一数量值n,初始化n个线程并将所述线程顺序存储至所述线程池列队中;步骤三,接收任务后遍历所述线程池,若所述线程池中有空闲线程时,则从所述线程池中顺序调取所述空闲线程并执行所述任务;若所述线程池中无空闲线程时,则将所述任务顺次存储至所述任务池的列队中。本发明提供一种能够充分利用现有硬件资源,实现软件多任务并行执行,且对每个任务执行者可重复使用的多线程任务分配方法,解决软件运行的性能、易用性等问题,并且避免了线程的创建调用和切换所带来的资源浪费问题。
Description
技术领域
本发明属于多线程和队列领域,特别涉及一种基于线程池的任务分配方法。
背景技术
随着信息技术和软件行业的不断发展,与之同时所承载的硬件资源也在飞速发展,但人们对软件或应用的使用也在不断提出更高的要求,比如:性能、易用性等等,只有满足了人们的使用需求,产品才能更具市场竞争力,企业才能走的更远。
目前,对于线程任务的分配,一般是采用随意或不限制地创建线程的方式。但是,由于每台计算机或终端的中央处理器(CPU)核心芯片是固定的,处理任务的线程数据也是固定,过多或太少都不能发挥它的最大性能,这种方式必然会造成计算机或终端任务不饱和或负载过重,以影响软件运行效率。因此,只有根据硬件的情况创建线程才能发挥中央处理器的最大效能。
发明内容
本发明的一个目的是解决至少上述问题或缺陷,并提供至少后面将说明的优点。
本发明另一个目的是提供一种基于线程池的任务分配方法,以充分利用硬件资源实现多任务并行执行,且对每个线程可重复使用的多线程任务分配方法,避免线程的创建调用,以及创建调用线程所产生的资源浪费问题。
本发明还有一个目的是根据计算机或终端当前CPU配置情况,自动创建合适的线程数量,且线程的数量既能满足多任务并行执行的需求,也不会占用过多的处理器的空间,充分提高线程的使用效率。
为了实现根据本发明的这些目的和其它优点,提供了一种基于线程池的任务分配方法,包括:
步骤一,创建线程池和任务池;
步骤二,预先确定一数量值n,初始化n个线程并将所述线程顺序存储至所述线程池列队中;
步骤三,接收任务后遍历所述线程池,若所述线程池中有空闲线程时,则从所述线程池中顺序调取所述空闲线程并执行所述任务;若所述线程池中无空闲线程时,则将所述任务顺次存储至所述任务池的列队中。
预先初始化n个线程存储至线程池,当接收到任务后即从线程池中调取空闲线程,充分利用现有硬件资源实现多任务并行执行,且对每个任务执行者可重复使用,以解决软件运行的性能、易用性等问题,并且避免了线程的创建调用和切换所带来的资源浪费问题。
同时,当接收任务后先查找空闲线程,如果有空闲线程,则直接去执行任务,如果没有空闲线程,再把任务放进任务池,等待空闲线程来执行。当存在空闲线程时,可以将任务直接快速地分配至空闲线程,提高任务处理的速度和效率。
优选的是,所述的基于线程池的任务分配方法中,根据处理器芯片的核数i确定所述数值n;
所述数量值n的计算公式为:n=i*2+2;
其中,i表示处理器(CPU)芯片的核数;n表示初始化线程的个数。
根据计算机或终端当前CPU配置情况,自动创建合适数量的线程,将这些线程存放至线程池中,并且不对线程池中空闲线程进行删除。这些数量的线程既可以满足多任务并行执行的要求,又不占用处理器的空间和资源,还可以避免再次创建线程所带来的资源消耗。
优选的是,所述的基于线程池的任务分配方法中,步骤三中接收任务后,还包括顺序锁定所述线程池和所述任务池。线程运行属于异步运行,在高并发的情况下,两个或多个线程同时去执行同一个任务是存在的。为了避免这种情况的发生,当接收任务后,对线程池和任务池执行顺序锁定的操作。
优选的是,所述的基于线程池的任务分配方法中,所述顺序锁定所述线程池和所述任务池具体指:
锁定所述线程池;
锁定所述任务池;
存在空闲线程时,当所述任务分配至所述空闲线程,将所述线程池和所述任务池解锁;不存在空闲线程时,则将所述线程池和所述任务池解锁。
为了避免死锁现象的出现,先锁定线程池,再锁定任务池。并且当任务分配至空闲线程后,线程通过接口去执行该任务,或者当线程池中没有空闲线程时,将任务池和线程池解锁,这样既可以避免两个或多个线程同时去执行同一个任务的情况,有可以避免死锁现象的发生。
优选的是,所述的基于线程池的任务分配方法中,所述线程执行完任务后,还包括:
遍历所述任务池;
若所述任务池队列中有任务时,则从所述任务池队列中顺序调取所述任务并将该任务分配至所述线程;所述线程执行该任务;
若所述任务池中没有任务时,则所述线程返回至所述线程池队列中。当线程执行完任务后,首先查找任务池中是否有未完成的任务,当有任务时,则该线程直接去执行任务。实现线程的反复多次利用,提高线程的利用率。
优选的是,所述的基于线程池的任务分配方法中,所述任务池每次只能容纳一个所述线程。每次任务池只能有一个线程领取任务,以避免两个或多个线程领取同一个任务的现象。
优选的是,所述的基于线程池的任务分配方法中,所述线程进入所述任务池时,包括:
锁定所述线程池;
锁定所述任务池;
所述任务池中存在任务时,当所述任务分配至所述线程后,解锁所述线程池和所述任务池;
所述任务池中不存在任务时,解锁所述线程池和所述任务池。通过先锁定线程池,再锁定任务池,以避免两个或多个线程同时领取同一个任务的情况的发送。当任务分配完毕或任务池中没有未执行的任务时,才对任务池和线程池进行解锁。
优选的是,所述的基于线程池的任务分配方法中,当所述线程池中只有一个线程时;
接收任务后,直接从所述线程池中调取所述线程执行该任务。将任务直接分配至线程池中唯一的1个线程,提高任务执行的效率。
本发明的有益效果如下:
1、所述的基于线程池的任务分配方法中,充分利用线程资源,初始化预定数量的线程用来实现多任务并行执行,并且每个线程可重复使用,避免线程的创建和调用,以及创建调用线程所产生的资源浪费的问题。
2、所述的基于线程池的任务分配方法中,根据中央处理器(CPU)的核数自动生成合适数量的线程,这些线程既能满足多任务并行执行的数量需求,又不会占用过多的处理器的空间,充分提高线程的使用效率。
3、所述的基于线程池的任务分配方法中,接收任务后,任务直接在线程池调取空闲线程,若线程池中没有空闲线程时,该任务才存储至任务池的列队中等待,这样快速、直接地进行任务分配,提高任务执行的效率。
4、所述的基于线程池的任务分配方法中,在任务调取线程池中的空闲线程或线程完成任务后,在任务池中领取任务,都顺序锁定线程池和任务池,以避免出现死锁现象。
附图说明
图1为本发明所述的基于线程池的任务分配方法的流程图;
图2为本发明其中一个实施例中所述的基于线程池的任务分配方法的创建任务池和线程池的过程图;
图3为本发明其中一个实施例中所述的基于线程池的任务分配方法的线程池初始化的过程图
图4为本发明其中一个实施例中所述的基于线程池的任务分配方法的任务分配的过程图;
图5为本发明其中一个实施例中所述的基于线程池的任务分配方法的线程执行完任务后领取任务的过程图。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
本发明公开了一种基于线程池的任务分配方法,如图1所示,该方法至少包括:
步骤一,创建线程池和任务池;这两个池在软件关闭前下不会自动释放,以避免线程创建和切换带来的资源浪费,线程池中的线程全部处在等待状态。创建线程池和任务池的具体实例如图2所示。
步骤二,根据处理器芯片的核数i确定所述数值n;初始化n个线程并将所述线程顺序存储至所述线程池列队中;
所述数量值n的计算公式为:n=i*2+2; (1)
其中,i表示处理器(CPU)芯片的核数;n表示初始化线程的个数。
初始化n个线程的具体实例如图3所示。
步骤三,接收任务后,顺序锁定所述线程池和所述任务池,先锁定所述线程池;在锁定所述任务池;遍历所述线程池,若所述线程池中有空闲线程时,则从所述线程池中顺序调取所述空闲线程并执行所述任务,并对所述线程池和所述任务池进行解锁;若所述线程池中无空闲线程时,则将所述任务顺次存储至所述任务池的列队中,并将所述线程池和所述任务池解锁。具体实例如图4所示。
所述基于线程池的任务分配方法中,还包括,当所述线程执行完任务后,还包括:
所述线程进入所述任务池时,同时,先锁定所述线程池;再锁定所述任务池;
遍历所述任务池;
若所述任务池队列中有任务时,则从所述任务池队列中顺序调取所述任务并将该任务分配至所述线程,并对所述线程池和所述任务池执行解锁的操作;若所述任务池中没有任务时,对所述线程池和所述任务池执行解锁的操作,并将所述线程返回至所述线程池队列中。线程执行完任务后,其具体实例如图5所示。
此外,如以实例Poolpool=newPool()为例,其具体过程如下:
所述的基于线程池的任务分配方法中,所述任务池每次只能容纳一个所述线程。
所述的基于线程池的任务分配方法中,当所述线程池中只有一个线程时;
接收任务后,直接从所述线程池中调取所述线程执行该任务。
尽管本发明的实施例已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节。
Claims (8)
1.一种基于线程池的任务分配方法,其特征在于,包括:
步骤一,创建线程池和任务池;
步骤二,预先确定一数量值n,初始化n个线程并将所述线程顺序存储至所述线程池列队中;
步骤三,接收任务后遍历所述线程池,若所述线程池中有空闲线程时,则从所述线程池中顺序调取所述空闲线程并执行所述任务;若所述线程池中无空闲线程时,则将所述任务顺次存储至所述任务池的列队中。
2.如权利要求1所述的基于线程池的任务分配方法,其特征在于,根据处理器芯片的核数i确定所述数值n;
所述数量值n的计算公式为:n=i*2+2;
其中,i表示处理器(CPU)芯片的核数;n表示初始化线程的个数。
3.如权利要求2所述的基于线程池的任务分配方法,其特征在于,步骤三中接收任务后,还包括顺序锁定所述线程池和所述任务池。
4.如权利要求3所述的基于线程池的任务分配方法,其特征在于,所述顺序锁定所述线程池和所述任务池具体指:
锁定所述线程池;
锁定所述任务池;
存在空闲线程时,当所述任务分配至所述空闲线程,将所述线程池和所述任务池解锁;不存在空闲线程时,则将所述线程池和所述任务池解锁。
5.如权利要求4所述的基于线程池的任务分配方法,其特征在于,所述线程执行完任务后,还包括:
遍历所述任务池;
若所述任务池队列中有任务时,则从所述任务池队列中顺序调取所述任务并将该任务分配至所述线程;所述线程执行该任务;
若所述任务池中没有任务时,则所述线程返回至所述线程池队列中。
6.如权利要求5所述的基于线程池的任务分配方法,其特征在于,所述任务池每次只能容纳一个所述线程。
7.如权利要求6所述的基于线程池的任务分配方法,其特征在于,所述线程进入所述任务池时,包括:
锁定所述线程池;
锁定所述任务池;
所述任务池中存在任务时,当所述任务分配至所述线程后,解锁所述线程池和所述任务池;
所述任务池中不存在任务时,解锁所述线程池和所述任务池。
8.如权利要求7所述的基于线程池的任务分配方法,其特征在于,当所述线程池中只有一个线程时;
接收任务后,直接从所述线程池中调取所述线程执行该任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510274987.0A CN104899099A (zh) | 2015-05-26 | 2015-05-26 | 一种基于线程池的任务分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510274987.0A CN104899099A (zh) | 2015-05-26 | 2015-05-26 | 一种基于线程池的任务分配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104899099A true CN104899099A (zh) | 2015-09-09 |
Family
ID=54031776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510274987.0A Pending CN104899099A (zh) | 2015-05-26 | 2015-05-26 | 一种基于线程池的任务分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104899099A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550028A (zh) * | 2015-12-25 | 2016-05-04 | Tcl集团股份有限公司 | 一种基于缓存锁的多任务时序执行方法及系统 |
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN106155796A (zh) * | 2016-07-25 | 2016-11-23 | 浪潮(北京)电子信息产业有限公司 | 一种基于队列的线程调度方法及装置 |
CN106648646A (zh) * | 2016-12-13 | 2017-05-10 | 深圳市元征软件开发有限公司 | 线程管理方法及装置 |
CN107562538A (zh) * | 2017-08-22 | 2018-01-09 | 中国铁道科学研究院电子计算技术研究所 | 铁路运输统计中的数据抽取多任务管理方法和系统 |
CN107766137A (zh) * | 2017-10-16 | 2018-03-06 | 北京京东尚科信息技术有限公司 | 一种任务处理方法和装置 |
CN109388485A (zh) * | 2018-09-26 | 2019-02-26 | 广州虎牙信息科技有限公司 | 一种任务执行线程的处理方法、装置、设备及存储介质 |
CN110457126A (zh) * | 2019-08-13 | 2019-11-15 | 杭州有赞科技有限公司 | 一种异步调用方法及系统 |
CN112446697A (zh) * | 2020-11-12 | 2021-03-05 | 深圳海付移通科技有限公司 | 对账方法、装置、计算机设备和存储介质 |
CN113391887A (zh) * | 2020-03-11 | 2021-09-14 | 北京国电智深控制技术有限公司 | 一种处理工业数据的方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101262367A (zh) * | 2008-03-07 | 2008-09-10 | 中兴通讯股份有限公司 | 性能数据的采集方法和装置 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
CN103218174A (zh) * | 2013-03-29 | 2013-07-24 | 航天恒星科技有限公司 | 一种用于遥感图像的io双缓存交互多核处理方法 |
-
2015
- 2015-05-26 CN CN201510274987.0A patent/CN104899099A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101262367A (zh) * | 2008-03-07 | 2008-09-10 | 中兴通讯股份有限公司 | 性能数据的采集方法和装置 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
CN103218174A (zh) * | 2013-03-29 | 2013-07-24 | 航天恒星科技有限公司 | 一种用于遥感图像的io双缓存交互多核处理方法 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550028A (zh) * | 2015-12-25 | 2016-05-04 | Tcl集团股份有限公司 | 一种基于缓存锁的多任务时序执行方法及系统 |
CN105550028B (zh) * | 2015-12-25 | 2019-08-06 | Tcl集团股份有限公司 | 一种基于缓存锁的多任务时序执行方法及系统 |
CN105893126B (zh) * | 2016-03-29 | 2019-06-11 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
US10891158B2 (en) | 2016-03-29 | 2021-01-12 | Huawei Technologies Co., Ltd. | Task scheduling method and apparatus |
CN106155796A (zh) * | 2016-07-25 | 2016-11-23 | 浪潮(北京)电子信息产业有限公司 | 一种基于队列的线程调度方法及装置 |
CN106648646A (zh) * | 2016-12-13 | 2017-05-10 | 深圳市元征软件开发有限公司 | 线程管理方法及装置 |
CN107562538A (zh) * | 2017-08-22 | 2018-01-09 | 中国铁道科学研究院电子计算技术研究所 | 铁路运输统计中的数据抽取多任务管理方法和系统 |
CN107562538B (zh) * | 2017-08-22 | 2020-01-07 | 中国铁道科学研究院电子计算技术研究所 | 铁路运输统计中的数据抽取多任务管理方法和系统 |
CN107766137A (zh) * | 2017-10-16 | 2018-03-06 | 北京京东尚科信息技术有限公司 | 一种任务处理方法和装置 |
CN109388485A (zh) * | 2018-09-26 | 2019-02-26 | 广州虎牙信息科技有限公司 | 一种任务执行线程的处理方法、装置、设备及存储介质 |
CN109388485B (zh) * | 2018-09-26 | 2021-01-22 | 广州虎牙信息科技有限公司 | 一种任务执行线程的处理方法、装置、设备及存储介质 |
CN110457126A (zh) * | 2019-08-13 | 2019-11-15 | 杭州有赞科技有限公司 | 一种异步调用方法及系统 |
CN113391887A (zh) * | 2020-03-11 | 2021-09-14 | 北京国电智深控制技术有限公司 | 一种处理工业数据的方法及系统 |
CN113391887B (zh) * | 2020-03-11 | 2024-03-12 | 北京国电智深控制技术有限公司 | 一种处理工业数据的方法及系统 |
CN112446697A (zh) * | 2020-11-12 | 2021-03-05 | 深圳海付移通科技有限公司 | 对账方法、装置、计算机设备和存储介质 |
CN112446697B (zh) * | 2020-11-12 | 2024-05-28 | 深圳海付移通科技有限公司 | 对账方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104899099A (zh) | 一种基于线程池的任务分配方法 | |
CN105893126B (zh) | 一种任务调度方法及装置 | |
Willhalm et al. | Putting intel® threading building blocks to work | |
CN102541653B (zh) | 一种多任务线程池调度方法和系统 | |
Hölzle | Brawny cores still beat wimpy cores, most of the time | |
US20070150895A1 (en) | Methods and apparatus for multi-core processing with dedicated thread management | |
CN110597606B (zh) | 一种高速缓存友好的用户级线程调度方法 | |
CN105045658A (zh) | 一种利用多核嵌入式dsp实现动态任务调度分发的方法 | |
CN103279445A (zh) | 运算任务的计算方法及超算系统 | |
CN101963922B (zh) | 任务处理方法和装置 | |
JP2011507112A5 (zh) | ||
CN102147722A (zh) | 实现中央处理器和图形处理器功能的多线程处理器及方法 | |
CN1276888A (zh) | 在多线程处理器中选择线程切换事件的方法和装置 | |
CN105204933A (zh) | 基于单进程的多任务切换执行方法、系统及处理器 | |
CN110297661A (zh) | 基于amp构架dsp操作系统的并行计算方法、系统及介质 | |
CN109660569A (zh) | 一种多任务并发执行方法、存储介质、设备及系统 | |
CN104615445B (zh) | 一种基于原子操作的设备io队列方法 | |
KR20140004654A (ko) | 처리 디바이스의 동기 동작을 위한 방법 및 시스템 | |
CN107391248B (zh) | 用于stm32系统的多级反馈队列调度方法 | |
CN112346835B (zh) | 一种基于协程的调度处理方法及系统 | |
Garcia et al. | Dynamic Percolation: A case of study on the shortcomings of traditional optimization in Many-core Architectures | |
CN108345505B (zh) | 一种多线程资源管理方法和系统 | |
CN101603884A (zh) | 一种采用单mcu实现多通道异步化测试的方法 | |
Prell et al. | Go's Concurrency Constructs on the SCC | |
CN102279731A (zh) | 一种实现单步执行的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150909 |
|
RJ01 | Rejection of invention patent application after publication |