线程调度方法、装置、设备及存储介质.pdf
《线程调度方法、装置、设备及存储介质.pdf》由会员分享,可在线阅读,更多相关《线程调度方法、装置、设备及存储介质.pdf(15页完成版)》请在专利查询网上搜索。
1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010171658.4 (22)申请日 2020.03.12 (71)申请人 苏州浪潮智能科技有限公司 地址 215100 江苏省苏州市吴中区吴中经 济开发区郭巷街道官浦路1号9幢 (72)发明人 董世江 (74)专利代理机构 北京集佳知识产权代理有限 公司 11227 代理人 薛娇 (51)Int.Cl. G06F 9/50(2006.01) (54)发明名称 一种线程调度方法、 装置、 设备及存储介质 (57)摘要 本发明公开了一种线程调度方法、 装置、 设 备及存储介。
2、质, 该方法包括: 获取目的任务, 所述 目的任务为当前接收的任一待处理任务; 判断预 先设置的包含多个工作线程的线程池中, 是否存 在与所述目的任务对应的工作线程, 如果是, 则 确定该与所述目的任务对应的工作线程为目的 线程, 如果否, 则选取所述线程池中空闲的工作 线程为目的线程; 确定与所述目的线程对应的任 务队列为目的队列, 并将所述目的任务分发到所 述目的队列中, 以供所述目的线程获取及处理; 其中, 所述线程池中包含的工作线程与任务队列 一一对应。 从而不会因为同步互斥导致一个线程 卡死、 其他线程只能等待的情况发生, 有效提高 了任务执行效率。 权利要求书2页 说明书10页 附。
3、图2页 CN 111367675 A 2020.07.03 CN 111367675 A 1.一种线程调度方法, 其特征在于, 包括: 获取目的任务, 所述目的任务为当前接收的任一待处理任务; 判断预先设置的包含多个工作线程的线程池中, 是否存在与所述目的任务对应的工作 线程, 如果是, 则确定该与所述目的任务对应的工作线程为目的线程, 如果否, 则选取所述 线程池中空闲的工作线程为目的线程; 确定与所述目的线程对应的任务队列为目的队列, 并将所述目的任务分发到所述目的 队列中, 以供所述目的线程获取及处理; 其中, 所述线程池中包含的工作线程与任务队列一 一对应。 2.根据权利要求1所述的方。
4、法, 其特征在于, 判断出所述线程池中不存在与所述目的任 务对应的工作线程之后, 还包括: 如果所述线程池中不存在空闲的工作线程, 则确定对应任务队列中包含的待处理任务 的数量最少的工作线程为目的线程, 执行确定与所述目的线程对应的任务队列为目的队列 的步骤。 3.根据权利要求2所述的方法, 其特征在于, 确定对应任务队列中包含的待处理任务的 数量最少的工作线程为目的线程之前, 还包括: 判断所述线程池中各工作线程对应任务队列中包含的待处理任务的数量是否均达到 数量阈值, 如果是, 则检测CPU使用率, 在所述CPU使用率低于最低阈值时, 在所述线程池中 创建新的工作线程为目的线程, 执行确定。
5、与所述目的线程对应的任务队列为目的队列的步 骤, 如果否, 则执行确定对应任务队列中包含的待处理任务的数量最少的工作线程为目的 线程的步骤。 4.根据权利要求3所述的方法, 其特征在于, 还包括: 定时或者实时检测CPU使用率, 如果所述CPU使用率高于最高阈值, 则减少所述线程池 中包含的工作线程的数量。 5.根据权利要求1所述的方法, 其特征在于, 还包括: 接收所述线程池中各工作线程发送的心跳信号, 并在连续预设次接收任一工作线程的 心跳信号超时时, 确定该任一工作线程处于卡死状态。 6.根据权利要求5所述的方法, 其特征在于, 确定任一工作线程处于卡死状态之后, 还 包括: 在所述线程。
6、池中创建新的工作线程, 并利用该新的工作线程替换处于卡死状态的工作 线程。 7.根据权利要求1所述的方法, 其特征在于, 设置所述线程池, 包括: 读取CPU核数, 并设置包含有N个工作线程的线程池; 其中, N为所述CPU核数减去除所述 工作线程之外的其他预设线程的数量后得到的数值。 8.一种线程调度装置, 其特征在于, 包括: 获取模块, 用于: 获取目的任务, 所述目的任务为当前接收的任一待处理任务; 判断模块, 用于: 判断预先设置的包含多个工作线程的线程池中, 是否存在与所述目的 任务对应的工作线程, 如果是, 则确定该与所述目的任务对应的工作线程为目的线程, 如果 否, 则选取所述。
7、线程池中空闲的工作线程为目的线程; 调度模块, 用于: 确定与所述目的线程对应的任务队列为目的队列, 并将所述目的任务 权利要求书 1/2 页 2 CN 111367675 A 2 分发到所述目的队列中, 以供所述目的线程获取及处理; 其中, 所述线程池中包含的工作线 程与任务队列一一对应。 9.一种线程调度设备, 其特征在于, 包括: 存储器, 用于存储计算机程序; 处理器, 用于执行所述计算机程序时实现如权利要求1至7任一项所述线程调度方法的 步骤。 10.一种计算机可读存储介质, 其特征在于, 所述计算机可读存储介质上存储有计算机 程序, 所述计算机程序被处理器执行时实现如权利要求1至7。
8、任一项所述线程调度方法的步 骤。 权利要求书 2/2 页 3 CN 111367675 A 3 一种线程调度方法、 装置、 设备及存储介质 技术领域 0001 本发明涉及线程池技术领域, 更具体地说, 涉及一种线程调度方法、 装置、 设备及 存储介质。 背景技术 0002 随着网络技术的发展,为处理大量短小并发任务,线程池技术已经越来越多地被 应用到服务器中,并在一定程度上缓解了系统的压力。 但伴随着数据量和并发访问量的增 加,并发控制与性能已成为需要考虑的一个紧迫问题。 0003 传统的线程池用到了任务队列和工作队列,利用阻塞原理协调请求和处理之间的 速度,在一定程度上缓解了服务器端的压力,。
9、提升了系统的性能。 但是现有的方案中, 线程 池中的线程在实现任务处理时, 需要互相等待制约, 因为这种制约可能会导致一个线程卡 死、 其他线程只能等待等情况的发生, 进而降低任务执行效率。 发明内容 0004 本发明的目的是提供一种线程调度方法、 装置、 设备及存储介质, 能够有效提高任 务执行效率。 0005 为了实现上述目的, 本发明提供如下技术方案: 0006 一种线程调度方法, 包括: 0007 获取目的任务, 所述目的任务为当前接收的任一待处理任务; 0008 判断预先设置的包含多个工作线程的线程池中, 是否存在与所述目的任务对应的 工作线程, 如果是, 则确定该与所述目的任务对应。
10、的工作线程为目的线程, 如果否, 则选取 所述线程池中空闲的工作线程为目的线程; 0009 确定与所述目的线程对应的任务队列为目的队列, 并将所述目的任务分发到所述 目的队列中, 以供所述目的线程获取及处理; 其中, 所述线程池中包含的工作线程与任务队 列一一对应。 0010 优选的, 判断出所述线程池中不存在与所述目的任务对应的工作线程之后, 还包 括: 0011 如果所述线程池中不存在空闲的工作线程, 则确定对应任务队列中包含的待处理 任务的数量最少的工作线程为目的线程, 执行确定与所述目的线程对应的任务队列为目的 队列的步骤。 0012 优选的, 确定对应任务队列中包含的待处理任务的数量。
11、最少的工作线程为目的线 程之前, 还包括: 0013 判断所述线程池中各工作线程对应任务队列中包含的待处理任务的数量是否均 达到数量阈值, 如果是, 则检测CPU使用率, 在所述CPU使用率低于最低阈值时, 在所述线程 池中创建新的工作线程为目的线程, 执行确定与所述目的线程对应的任务队列为目的队列 的步骤, 如果否, 则执行确定对应任务队列中包含的待处理任务的数量最少的工作线程为 说明书 1/10 页 4 CN 111367675 A 4 目的线程的步骤。 0014 优选的, 还包括: 0015 定时或者实时检测CPU使用率, 如果所述CPU使用率高于最高阈值, 则减少所述线 程池中包含的工。
12、作线程的数量。 0016 优选的, 还包括: 0017 接收所述线程池中各工作线程发送的心跳信号, 并在连续预设次接收任一工作线 程的心跳信号超时时, 确定该任一工作线程处于卡死状态。 0018 优选的, 确定任一工作线程处于卡死状态之后, 还包括: 0019 在所述线程池中创建新的工作线程, 并利用该新的工作线程替换处于卡死状态的 工作线程。 0020 优选的, 设置所述线程池, 包括: 0021 读取CPU核数, 并设置包含有N个工作线程的线程池; 其中, N为所述CPU核数减去除 所述工作线程之外的其他预设线程的数量后得到的数值。 0022 一种线程调度装置, 包括: 0023 获取模块。
13、, 用于: 获取目的任务, 所述目的任务为当前接收的任一待处理任务; 0024 判断模块, 用于: 判断预先设置的包含多个工作线程的线程池中, 是否存在与所述 目的任务对应的工作线程, 如果是, 则确定该与所述目的任务对应的工作线程为目的线程, 如果否, 则选取所述线程池中空闲的工作线程为目的线程; 0025 调度模块, 用于: 确定与所述目的线程对应的任务队列为目的队列, 并将所述目的 任务分发到所述目的队列中, 以供所述目的线程获取及处理; 其中, 所述线程池中包含的工 作线程与任务队列一一对应。 0026 一种线程调度设备, 包括: 0027 存储器, 用于存储计算机程序; 0028 处。
14、理器, 用于执行所述计算机程序时实现如上任一项所述线程调度方法的步骤。 0029 一种计算机可读存储介质, 所述计算机可读存储介质上存储有计算机程序, 所述 计算机程序被处理器执行时实现如上任一项所述线程调度方法的步骤。 0030 本发明提供了一种线程调度方法、 装置、 设备及存储介质, 该方法包括: 获取目的 任务, 所述目的任务为当前接收的任一待处理任务; 判断预先设置的包含多个工作线程的 线程池中, 是否存在与所述目的任务对应的工作线程, 如果是, 则确定该与所述目的任务对 应的工作线程为目的线程, 如果否, 则选取所述线程池中空闲的工作线程为目的线程; 确定 与所述目的线程对应的任务队。
15、列为目的队列, 并将所述目的任务分发到所述目的队列中, 以供所述目的线程获取及处理; 其中, 所述线程池中包含的工作线程与任务队列一一对应。 本申请公开的技术特征中, 在接收到待处理任务时, 如果线程池中存在与待处理任务对应 的工作线程, 则将待处理任务分发到对应工作线程的任务队列中, 以等待工作线程进行获 取及处理; 如果线程池中不存在与待处理任务对应的工作线程, 则选取线程池中空闲的工 作线程作为与待处理任务对应的工作线程, 进而实现待处理任务的分发; 其中, 线程池包含 多个工作线程, 且工作线程与任务队列一一对应; 可见, 本申请在对待处理任务进行处理 时, 先确定出对应的工作线程, 。
16、然后将待处理任务分发到对应工作线程的任务队列中等待 处理, 由于每个工作线程仅需处理对应的工作线程中的待处理任务, 因此工作线程间是无 说明书 2/10 页 5 CN 111367675 A 5 锁状态, 不会因为同步互斥导致一个线程卡死、 其他线程只能等待的情况发生, 从而有效提 高了任务执行效率。 附图说明 0031 为了更清楚地说明本发明实施例或现有技术中的技术方案, 下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是本 发明的实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下, 还可以根据 提供的附图获得其他的附图。 0。
17、032 图1为本发明实施例提供的一种线程调度方法的流程图; 0033 图2为本发明实施例提供的一种线程调度方法的实现示意图; 0034 图3为本发明实施例提供的一种线程调度装置的结构示意图。 具体实施方式 0035 下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例仅仅是本发明一部分实施例, 而不是全部的实施例。 基于 本发明中的实施例, 本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例, 都属于本发明保护的范围。 0036 请参阅图1, 其示出了本发明实施例提供的一种线程调度方法的流程图, 可以包 括: 0037。
18、 S11: 获取目的任务, 目的任务为当前接收的任一待处理任务。 0038 本发明实施例提供的一种线程调度方法的执行主体可以为线程调度装置; 其中, 待处理任务为需要使用工作线程进行处理的任务, 接收到任一待处理任务时, 可以确定该 任一待处理任务为目的任务, 进而调用工作线程实现对目的任务的处理。 0039 另外, 在接收到待处理任务时, 可以将待处理任务进行预处理, 生成预先设定的统 一的数据格式, 方便后续对待处理任务进行处理; 具体可以是由预先设定的预处理模块实 现上述预处理过程的, 也即在待处理任务到来时, 将待处理任务转发给预处理模块, 由预处 理模块对待处理任务进行数据标准化(预。
19、处理的过程), 然后将待处理任务存储到全局任务 队列中, 从全局任务队列中按照先进先出原则取出待处理任务进行处理, 并且在由全局任 务队列中取出待处理任务的过程需要同步互斥。 0040 S12: 判断预先设置的包含多个工作线程的线程池中, 是否存在与目的任务对应的 工作线程, 如果是, 则确定该与目的任务对应的工作线程为目的线程, 如果否, 则选取线程 池中空闲的工作线程为目的线程。 0041 可以预先设置有线程池, 线程池中包含多个工作线程, 每个工作线程均用于实现 对待处理任务的处理。 其中, 为线程池中每个工作线程均设置相应的任务队列, 使得线程池 中的工作线程与任务队列一一对应, 而任。
20、务队列则用于存储需要由与任务队列对应的工作 线程进行处理的待处理任务; 具体来说, 在确定与任一待处理任务对应的任务队列时, 可以 是先确定该任一待处理任务的任务标识, 进而确定与该任一待处理任务的任务标识对应的 工作线程为该任一待处理任务对应的线程, 以将该任一待处理任务放置到相应的任务队列 中, 等待工作线程对该任一待处理任务进行获取及处理, 此时对应同一工作线程的待处理 说明书 3/10 页 6 CN 111367675 A 6 任务具有相同的任务标识; 如果不存在与该任一待处理线程对应的工作线程, 则可以选取 线程池中空闲的工作线程为与该任一待处理任务对应的工作线程, 进而实现该任一待。
21、处理 任务的分发及处理等; 其中, 工作线程可以包括三种状态, 分别为空闲、 繁忙及假死, 空闲则 为工作线程对应任务队列中不存在待处理任务, 即工作线程当前无需处理任何待处理任 务, 繁忙则为工作线程对应任务队列中存在待处理任务, 即工作线程当前需要处理相应的 待处理任务, 假死则为工作线程当前无法正常实现对待处理任务的处理。 本实施例中在线 程池中不存在与任一待处理任务对应的工作线程时, 选取线程池中空闲的工作线程实现对 该任一待处理任务的处理, 从而能够使得尽快对该任一待处理任务实现处理的同时, 避免 对其他待处理任务的处理造成不良影响。 0042 另外, 在工作线程处理对应任务队列中的。
22、待处理任务时, 采用先进先出的原则由 对应任务队列中获取待处理任务进行相应的处理。 0043 S13: 确定与目的线程对应的任务队列为目的队列, 并将目的任务分发到目的队列 中, 以供目的线程获取及处理; 其中, 线程池中包含的工作线程与任务队列一一对应。 0044 本申请公开的技术特征中, 在接收到待处理任务时, 如果线程池中存在与待处理 任务对应的工作线程, 则将待处理任务分发到对应工作线程的任务队列中, 以等待工作线 程进行获取及处理; 如果线程池中不存在与待处理任务对应的工作线程, 则选取线程池中 空闲的工作线程作为与待处理任务对应的工作线程, 进而实现待处理任务的分发; 其中, 线 。
23、程池包含多个工作线程, 且工作线程与任务队列一一对应; 可见, 本申请在对待处理任务进 行处理时, 先确定出对应的工作线程, 然后将待处理任务分发到对应工作线程的任务队列 中等待处理, 由于每个工作线程仅需处理对应的工作线程中的待处理任务, 因此工作线程 间是无锁状态, 不会因为同步互斥导致一个线程卡死、 其他线程只能等待的情况发生, 从而 有效提高了任务执行效率。 0045 需要说明的是, 本实施例中可以维护有三个表格, 分别为线程索引表、 任务队列索 引表及线程信息索引表, 具体来说, 线程索引表以map形式进行存储, 将用于识别待处理任 务的任务标识和用于识别工作线程的线程标识一一映射,。
24、 但是同一个线程标识可能对应不 同的任务标识, 而同一个任务标识只能对应同一个线程标识, 需要由同一工作线程进行处 理的待处理任务具有相同的任务标识, 而不同的工作线程具有不同的线程标识; 任务队列 索引表以map形式进行存储, 将线程标识和任务队列一一映射; 线程信息索引表以map形式 进行存储, 将线程标识与线程信息进行一一映射, 而线程信息可以包括对应的工作线程的 线程标识、 线程pid、 线程状态、 当前待处理任务的数量, 线程状态可以分为空闲、 繁忙、 假死 三种状态; 从而通过查询线程信息索引表则可以获得相应的工作线程的线程信息。 0046 本申请在确定与待处理任务对应的工作线程进。
25、而实现待处理任务的分发时, 可以 先确定待处理任务的任务标识, 由线程索引表中确定与该任务标识对应的线程标识, 进而 确定该线程标识对应的工作线程则为与待处理任务对应的工作线程, 并且由任务队列索引 表中可以确定出与该线程标识对应的队列标识(用于识别任务队列的标识, 不同任务队列 具有不同的队列标识), 该队列标识对应的任务队列则为待处理任务需要分发至的任务队 列; 进而将待处理任务分发至对应的任务队列中, 以供对应的工作线程进行获取及处理。 在 确定线程池中不存在与待处理任务对应的工作线程时, 可以基于线程信息索引表确定各工 作线程的线程信息, 并确定当前待处理任务的数量为0的工作线程为与待。
26、处理任务对应的 说明书 4/10 页 7 CN 111367675 A 7 工作线程, 进而按照上述方式实现对待处理任务的分发。 0047 本发明实施例提供的一种线程调度方法, 判断出线程池中不存在与目的任务对应 的工作线程之后, 还可以包括: 0048 如果线程池中不存在空闲的工作线程, 则确定对应任务队列中包含的待处理任务 的数量最少的工作线程为目的线程, 执行确定与目的线程对应的任务队列为目的队列的步 骤。 0049 需要说明的是, 在线程池中不存在与待处理任务对应的工作线程时, 优先选取线 程池中空闲的工作线程处理该待处理任务, 如果线程池中也不存在空闲的工作线程, 则可 以确定出线程。
27、池中各工作线程对应任务队列中待处理任务的数量, 也即各工作线程需要处 理的任务的数量, 从中选取该数量最少的工作线程处理该待处理任务, 从而保证各工作线 程之间的负载均衡, 以一定程度上保证任务执行的效率。 其中, 在确定线程池中各工作线程 需要处理的任务的数量时, 可以是通过查询线程信息索引表中获取的, 也即线程信息索引 表中包含的待处理任务的数量即为需要处理的任务的数量。 0050 本发明实施例提供的一种线程调度方法, 确定对应任务队列中包含的待处理任务 的数量最少的工作线程为目的线程之前, 还可以包括: 0051 判断线程池中各工作线程对应任务队列中包含的待处理任务的数量是否均达到 数量。
28、阈值, 如果是, 则检测CPU使用率, 在CPU使用率低于最低阈值时, 在线程池中创建新的 工作线程为目的线程, 执行确定与目的线程对应的任务队列为目的队列的步骤, 如果否, 则 执行确定对应任务队列中包含的待处理任务的数量最少的工作线程为目的线程的步骤。 0052 为了避免工作线程对应任务队列中待处理任务的数量过多, 进而导致出现任务阻 塞等情况, 本实施例中在确定需要处理的任务的数量最少的工作线程之前, 还可以判断线 程池中各工作线程需要处理的任务的数量是否均达到数量阈值(数量阈值为根据实际需要 设定的), 如果均达到数量阈值, 则说明各工作线程需要处理的任务的数量足够多, 因此, 需 要。
29、为线程池增加用来处理工作线程, 以利用增加的工作线程来实现对待分配工作线程的待 处理任务的处理, 如果并未全部达到数量阈值, 则可以选取需要处理的任务的数量最少的 工作线程, 用于处理待分配工作线程的待处理任务。 0053 需要说明的是, 在增加工作线程之前, 为了避免线程池所属系统的CPU使用率过 高, 进而造成对其他业务的不良影响, 本实施例中还会计算CPU使用率, 在CPU使用率低于最 低阈值(根据实际需要进行设定, 如30)时才允许增加工作线程, 否则, 拒绝增加工作线 程, 此时可以输出相应的提示(如输出至终端或者显示在系统屏幕等, 本申请实施例中的系 统均为线程池所属系统)以告知外。
30、界当前无法确定与待处理任务对应的工作线程的情况。 0054 另外, 在计算CPU使用率时可以按照以下方式实现: 某进程cpu使用率该进程cpu 时间/总cpu时间。 其中, 某进程即为包含本申请线程池中全部工作线程的进程, 因此某进程 CPU使用率也即为线程池中全部工作线程的CPU使用率, 以linux系统为例对上述计算方式 进行具体说明: 每隔period秒读取/proc/pid/stat, 解析其中的utime和stime, 将其和 (utime+stime)减去上一次采样时这两项的和(lastutime+laststime), 这就是period秒内 该进程占用CPU的时间, 单位为cl。
31、ock tick, 总的CPU时间为period*sysconf(_SC_CLK_ TCK), 单位也为clock tick, 则某进程cpu使用率(utime+stime)-(lastutime+ laststime)/(period*sysconf(_SC_CLK_TCK); 其中, utime是指执行用户代码态占用的 说明书 5/10 页 8 CN 111367675 A 8 时间, stime是指执行内核态代码占用的时间, period是指采样的时间间隔, sysconf(_SC_ CLK_TCK)是指系统时钟(每秒中跑过的运算速率)。 0055 本发明实施例提供的一种线程调度方法, 。
32、还可以包括: 0056 定时或者实时检测CPU使用率, 如果CPU使用率高于最高阈值, 则减少线程池中包 含的工作线程的数量。 0057 为了使得CPU使用率维持在一个比较合理的范围内, 进而保证业务的顺利处理, 本 实施例中可以定时或者实时检测CPU使用率, 如果CPU使用率高于最高阈值(根据实际需要 设定, 如70), 则减少线程池中包含的工作线程的数量, 如果CPU使用率低于最低阈值, 还 可以增加工作线程, 以在需要时可以直接使用; 也即CPU使用率低于最低阈值(如30)时可 以增加工作线程的数量, 在最低阈值及最高阈值之间(3070, 包括端点值)则认为正 常状态, 高于最高阈值(7。
33、0)时减少工作线程的数量。 针对传统的线程池当其中的线程数 增加到某个值的时候,增加线程数会导致请求的处理时间线性增长,系统的吞吐量不但不 能提高,反而会不断降低; 本实施例通过对CPU使用率的检测及线程数的控制, 能够避免这 种问题的发生。 0058 另外, 减少线程池中包含的工作线程的数量具体可以包括: 如果线程池中存在空 闲的工作线程, 则销毁该空闲的工作线程, 如果线程池中不存在空闲的工作线程, 则选择对 应任务队列中包含的待处理任务的数量最少的工作线程为待销毁线程, 禁止为待销毁线程 分发新的待处理任务, 并在待销毁线程处理完成对应任务队列中的待处理任务后, 销毁待 销毁线程; 并且。
34、, 需要按照上述方式销毁工作线程直至CPU使用率不高于最高阈值为止。 从 而通过这种方式减少工作线程的数量能够减少销毁工作线程时对于任务执行的影响。 0059 并且, 在存在相应表格时, 增加或者减少工作线程之后, 可以将相应的信息同步至 线程索引表、 线程信息索引表及任务队列索引表中, 从而保证各表格包含信息的有效性。 0060 本发明实施例提供的一种线程调度方法, 还可以包括: 0061 接收线程池中各工作线程发送的心跳信号, 并在连续预设次接收任一工作线程的 心跳信号超时时, 确定该任一工作线程处于卡死状态。 0062 本申请实施例在判断工作线程是否处于卡死状态时, 可以通过循环检测各工。
35、作线 程的工作状态并对工作线程假死状态进行多级判断, 从而避免误判情况的发生; 具体来说, 可以通过心跳机制接收每个工作线程发送过来的信号(心跳信号), 如果接收某个工作线程 的信号超时, 那么自动将该工作线程的假死状态设置为低等级, 如果接收该工作线程的信 号再次超时, 那么将该工作线程的假死状态设置为中等级, 如果接收该工作线程的信号又 一次超时, 那么将该工作线程的假死状态设置为高等级, 也即确定该工作线程处于卡死状 态; 如果在该工作线程第一次或者前两次超时之后, 如果接收该工作线程的信号没有超时, 则假死状态恢复为无。 上次实现方式中预设次次为三次, 当然也可以根据实际需要进行设 定。
36、, 均在本发明的保护范围之内。 0063 并且, 确定任一工作线程处于卡死状态之后, 还可以包括: 0064 在线程池中创建新的工作线程, 并利用该新的工作线程替换处于卡死状态的工作 线程。 0065 另外, 还可以接收异常信号, 如果某个工作线程在运行过程中发生异常退出的情 况, 则负责监控各工作线程的监控线程则发出相应的异常信号, 从而基于该异常信号确定 说明书 6/10 页 9 CN 111367675 A 9 相应的工作线程发生异常。 本实施例中工作线程出现卡死或者发生异常的处理方式相同, 均为在线程池中创建新的工作线程, 进而利用新的工作线程替换处于卡死状态或者出现异 常的工作线程;。
37、 并且, 在创建新的工作线程之后, 需要销毁(kill)掉处于卡死状态或者出现 异常的工作线程, 以利用创建的新的工作线程替换上述无法正常工作的工作线程; 在包含 对应表格的情况下, 还需要更新线程索引表、 线程信息索引表及线程信息索引表, 以保证各 表格中信息的有效性。 0066 本发明实施例提供的一种线程调度方法, 设置线程池, 可以包括: 0067 读取CPU核数, 并设置包含有N个工作线程的线程池; 其中, N为CPU核数减去除工作 线程之外的其他预设线程的数量后得到的数值。 0068 其中, CPU核数为线程池所属系统包含的CPU的总核数, 由于系统中还可能包含其 他的线程, 如实现。
38、对各工作线程进行监控的监控线程、 实现任务接收的任务接收线程及将 任务分发到对应任务队列的调度线程, 因此可以设置线程池中工作线程的总数量可以设置 为CPU核数与上述其他线程的数量的差值, 从而使得工作线程的数量符合系统性能参数, 根 据系统性能自动设置线程池大小, 这样即可以节省人力成本也可以将系统性能调到最优的 状态。 如果系统为windows系统, 则可以通过GetSystemInfo接口得到SYSTEM_INFO结构体, 结构体成员dwNumberOfProcessors就是CPU核数, 如果系统为Linux系统, 则可以通过 sysconf(_SC_NPROCESSORS_ONLN)。
39、或者get_nprocs()来获取可以使用的CPU核数, 得到系 统核数后创建相应数量个工作线程(包括调度线程、 监控线程及工作线程等)。 另外, 在控制 CPU使用率时可以是控制工作线程的数量在(M, 2M)之间, M为CPU核数。 0069 在一种具体应用场景中, 本申请实施例公开的上述线程调度方法的实现示意图可 以如图2所示, 具体可以包括: 0070 1、 初始化 0071 初始化主要包括获取系统性能参数、 创建线程索引表、 创建任务队列索引表、 创建 全局任务队列及创建线程信息索引表, 具体方式如下: 0072 1)获取系统性能参数并创建工作线程 0073 主要是获取系统CPU核数,。
40、 windows系统中可以通过GetSystemInfo接口得到 SYSTEM_INFO结构体, 结构体成员dwNumberOfProcessors就是CPU核数; Linux系统中可以通 过sysconf(_SC_NPROCESSORS_ONLN)或者get_nprocs()来获取可以使用的CPU核数, 得到 系统核数M后创建线程M个线程(包括调度线程、 监控线程及工作线程等)。 0074 2)创建线程索引表 0075 线程索引表以map的形式进行存储, 将任务标识和线程标识一一映射; 但是同一个 线程标识可能对应不同的任务标识, 同一个任务标识只能对应同一个线程标识。 0076 3)创建任。
41、务队列索引表 0077 任务队列索引表以map形式进行存储, 将线程标识和任务队列一一映射。 0078 4)创建全局任务队列 0079 全局任务队列用于接收待处理的任务, 每个任务是经过预处理模块后标准化的数 据。 0080 5)创建线程信息索引表 0081 线程信息索引表以map形式进行存储, 将线程标识与线程信息进行一一映射; 线程 说明书 7/10 页 10 CN 111367675 A 10 信息包括线程标识、 线程pid、 线程状态及当前待处理任务的数量等; 线程状态分为空闲、 繁 忙、 假死三种状态。 0082 2、 线程调度 0083 1)调度算法 0084 考虑到工作线程处理任。
42、务的速度不同, 本申请采用同一任务标识的由同一工作线 程处理, 并且是先进先出原则。 0085 具体实现方式: 接收待处理任务, 得到对应的任务标识, 从线程索引表中查找该任 务标识是否存在, 如果存在, 则联合任务队列索引表找到对应的任务队列, 将待处理任务分 发到该任务队列中; 如果不存在则查找空闲状态的工作线程, 将此待处理任务分配给该工 作线程, 如果没有空闲状态的工作线程则查找待处理任务数量最少的一个, 将待处理任务 分配给该工作线程。 0086 2)在1)的过程中, 线程索引表中找不到该任务标识时, 要检查当前CPU利用率, CPU 使用率低于30时可以增加工作线程实现该待处理任务。
43、的处理。 0087 2、 调度流程 0088 该执行步骤如下: 0089 步骤1: 待处理任务到来时将待处理任务转发给预处理模块, 将数据标准化, 将待 处理任务存储到全局任务队列中; 0090 步骤2: 从全局任务队列中按照先进先出原则取出待处理任务, 该过程中需要互斥 同步; 0091 步骤3: 根据步骤2取出的待处理任务, 从线程索引表中找到对应的工作线程, 再根 据任务队列索引表找到对应的任务队列, 将待处理任务分发出去; 0092 步骤4: 在步骤3的执行过程中要检查线程信息索引表, 优先将任务分发到空闲的 线程中; 如果没有空闲状态的线程, 则根据各线程任务队列中任务的数量的多少分。
44、配, 优先 给任务数量少的线程。 0093 步骤5: 实时计算当前CPU利用率, 根据得到的CPU使用率进行工作线程数量的调 整, 包括增加和减少工作线程数量, 并在增加或者减少后将相应信息同步到线程索引表、 线 程信息索引表及任务队列索引表, 本实施例中工作线程的数量控制在(M, 2M)之间, M为CPU 核数; 具体可以是CPU使用率低于30时可以增加线程数, 在3070则认为正常状态, 高于70时减少线程数。 0094 3、 异常处理 0095 通过心跳机制接收每个工作线程发送的信号, 如果接收某个工作线程的信号超 时, 那么自动将该工作线程的假死状态设置为低等级, 如果接收该工作线程的。
45、信号再次超 时, 那么将该工作线程的假死状态设置为中等级, 如果此时接收信号没有超时, 则假死状态 恢复为无; 当某个工作线程假死状态等级为高等级时即可判定为该工作线程卡死; 0096 接收异常信号, 某个工作线程在运行过程中可能会有异常退出的情况, 那么该情 况与线程卡死的情况处理方式是一样的; 0097 当工作线程出现卡死或者异常退出时, 创建新的工作线程, 并更新工作线程索引 表、 任务队列索引表及工作线程信息索引表, 将原来的工作线程替换为新创建的工作线程 并kill掉原有的工作线程; 当然, 在创建新的工作线程前也可以按照上述方式判断CPU使用 说明书 8/10 页 11 CN 11。
46、1367675 A 11 率是否低于最低阈值, 进而确定是否能够创建新的工作线程。 0098 本发明可以充分利用CPU的性能, 进行任务分发, 也就是线程池的动态扩展; 具有 较高的容错率, 大大减少对线程假死状态的误判率, 因为线程假死可能是由于任务处理时 间不一样导致的, 本发明对假死状态进行了分级处理, 可以有效的避免误判; 再次将业务进 行预处理, 生成统一的数据格式, 然后经过调度算法将任务队列与工作线程进行映射, 工作 线程间是无锁状态, 每个工作线程只需关心对应的任务队列即可, 也即工作线程间是无锁 状态, 不会因为同步互斥等问题导致一个线程卡死, 其他线程只能等待的情况。 00。
47、99 本发明实施例还提供了一种线程调度装置, 如图3所示, 可以包括: 0100 获取模块11, 用于: 获取目的任务, 目的任务为当前接收的任一待处理任务; 0101 判断模块12, 用于: 判断预先设置的包含多个工作线程的线程池中, 是否存在与目 的任务对应的工作线程, 如果是, 则确定该与目的任务对应的工作线程为目的线程, 如果 否, 则选取线程池中空闲的工作线程为目的线程; 0102 调度模块13, 用于: 确定与目的线程对应的任务队列为目的队列, 并将目的任务分 发到目的队列中, 以供目的线程获取及处理; 其中, 线程池中包含的工作线程与任务队列一 一对应。 0103 本发明实施例提。
48、供的一种线程调度装置, 还可以包括: 0104 第一确定模块, 用于: 判断出线程池中不存在与目的任务对应的工作线程之后, 如 果线程池中不存在空闲的工作线程, 则确定对应任务队列中包含的待处理任务的数量最少 的工作线程为目的线程, 执行确定与目的线程对应的任务队列为目的队列的步骤。 0105 本发明实施例提供的一种线程调度装置, 还可以包括: 0106 第二确定模块, 用于: 确定对应任务队列中包含的待处理任务的数量最少的工作 线程为目的线程之前, 判断线程池中各工作线程对应任务队列中包含的待处理任务的数量 是否均达到数量阈值, 如果是, 则检测CPU使用率, 在CPU使用率低于最低阈值时,。
49、 在线程池 中创建新的工作线程为目的线程, 执行确定与目的线程对应的任务队列为目的队列的步 骤, 如果否, 则执行确定对应任务队列中包含的待处理任务的数量最少的工作线程为目的 线程的步骤。 0107 本发明实施例提供的一种线程调度装置, 还可以包括: 0108 调整模块, 用于: 定时或者实时检测CPU使用率, 如果CPU使用率高于最高阈值, 则 减少线程池中包含的工作线程的数量。 0109 本发明实施例提供的一种线程调度装置, 还可以包括: 0110 判定模块, 用于: 接收线程池中各工作线程发送的心跳信号, 并在连续预设次接收 任一工作线程的心跳信号超时时, 确定该任一工作线程处于卡死状态。
50、。 0111 本发明实施例提供的一种线程调度装置, 还可以包括: 0112 创建模块, 用于: 确定任一工作线程处于卡死状态之后, 在线程池中创建新的工作 线程, 并利用该新的工作线程替换处于卡死状态的工作线程。 0113 本发明实施例提供的一种线程调度装置, 还可以包括: 0114 设置模块, 用于: 读取CPU核数, 并设置包含有N个工作线程的线程池; 其中, N为CPU 核数减去除工作线程之外的其他预设线程的数量后得到的数值。 0115 本发明实施例还提供了一种线程调度设备, 可以包括: 说明书 9/10 页 12 CN 111367675 A 12 0116 存储器, 用于存储计算机程。
- 内容关键字: 线程 调度 方法 装置 设备 存储 介质
新能源汽车电池放置管理架.pdf
可自动定时模拟光照的土柱蒸发入渗系统.pdf
起重机用的稳定型起升机构.pdf
氛围灯一体仪表台.pdf
茶叶包装用封口装置.pdf
固体磷酸催化剂生产捏合设备.pdf
公路用整平机.pdf
电力线缆安装牵引装置.pdf
压力管道连接结构.pdf
雷达角反射器.pdf
旋转砖装置.pdf
钢渣转运吸尘装置.pdf
非甲烷总烃进样加热装置.pdf
会计票据粉碎装置.pdf
半导体散热装置.pdf
游乐设施安全检测装置.pdf
弯曲机的防摆动机构及弯曲机.pdf
斜顶多方向抽芯机构及注塑模具.pdf
手持式超声波成像设备.pdf
动态电压频率调节方法、控制器、装置、设备及存储介质.pdf
基于AI大语言模型的数据大屏生成方法及系统.pdf
消防轨道机器人.pdf
带有除沫器的气液分离罐.pdf
动物采血器.pdf
质检用金属探伤装置.pdf
用于巡检机器人的充电装置.pdf
基于扩散生成先验的人脸图像复原方法、装置及可读介质.pdf
单视图的三维重建方法、系统、设备及存储介质.pdf
微服务系统根因定位方法、设备及存储介质.pdf
纯化碳棒的制备方法及其制成的纯化碳棒.pdf
触点控制电路、控制方法、电子设备及存储介质.pdf
钻头水口冷压模具和成型装置及使用方法.pdf
一种升降式旋转室外消火栓.pdf
框架结构T型连接柱.pdf
防静电地板吸板器.pdf
一种建筑用箱体或井口预留孔洞活动模具.pdf
速成拉建房屋.pdf
预制桥面板精轧螺纹钢筋弧形连接构造.pdf
一种内固定式伸缩门滑行导轨及伸缩门.pdf
多用途封井器.pdf
一种新型圆弧建筑模板紧固件.pdf
一种超实木防水组合踢脚线.pdf
电气柜前门板门锁装置.pdf
双人正杆器.pdf
一种纳米铝塑复合板.pdf
强磁打捞器.pdf
一种基于无刷直流电机的环卫车电动扫盘系统.pdf
一种可调节型门铰链.pdf
一种用于基桩竖向抗压静载试验的船筏式试验装置.pdf
免贴墙砖.pdf
一种聚氨酯仿石材防火保温装饰复合板.pdf