[发明专利]一种基于多线程编程及消息队列的多线程并行处理方法有效
申请号: | 201210316211.7 | 申请日: | 2012-08-31 |
公开(公告)号: | CN102902512A | 公开(公告)日: | 2013-01-30 |
发明(设计)人: | 吴庆;张清;赵开勇 | 申请(专利权)人: | 浪潮电子信息产业股份有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 250014 山东*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 多线程 编程 消息 队列 并行 处理 方法 | ||
技术领域
本发明涉及计算机应用技术领域, 具体地说是一种基于多线程编程及消息队列的多线程并行处理方法。
背景技术
硬件系统在新技术的推动下进行着快速演进,表现出更好的性能、更低的价格,如传统CPU从单核向多核直至众核发展。但随着计算设备体系结构的多样化,多核化,软件系统仅仅依靠硬件的更新从而获得性能提升的方式已经不符合现有硬件的发展趋势,例如传统的单线程串行程序在多核计算设备下不能表现出更好的性能。硬件发展的最终目的是推动应用软件的表现,进而推进整个计算系统的性能。因此软件系统不能仅仅依靠硬件性能的发展,而应该同时针对硬件系统的发展进行软件系统的再次开发和更新。这也是目前计算架构下我们遇到的最大挑战,而软件系统的再次开发和改造则显得极为必要。目前国内外针对CPU多核体系结构的应用开发在CPU多核发展之初就如火如荼地展开了,并陆续开发或改造出相当数量的应用。随着多核体系结构处理器的普及,应用软件多线程并行处理方式将逐渐成为主流。
发明内容
本发明的目的是提供一种基于多线程编程及消息队列的多线程并行处理方法。
本发明的目的是按以下方式实现的,在单节点内,创建三类pthread线程,分别为读、计算、写线程,并且各类线程数目灵活可配置,开辟多缓存,创建四个队列,用于线程间通信,调配计算任务及管理缓存空间资源,具体步骤如下:
1.基于多缓冲和消息队列建立任务分发机制,包括:
1)计算任务的划分:任务划分的基本单位总的计算任务数是TOTAL_JOB,它可以被划分成多个子任务,定义每个子任务大小为JOB_SIZE,定义灵活的任务划分策略,软件有自动配置模式和用户手动配置模式;
2)任务分发、执行策略,包括:
(1)子任务实际由读线程来生成;读线程定义每个子任务的信息tmp_msg,包括:job_begin,job_size,buf_id;
其中:job_begin是该任务计数编号,通过它可以确定该任务的起始LINE号和CMP号;
job_size定义了该任务的大小,其上限是预先已经定义好的JOB_SIZE;
buf_id指明了该任务所在的BUF编号;
(2)任务信息tmp_msg的类型实际上就是消息队列成员的类型,被加入到各个队列中;
3)子任务执行所需资源的竞争策略完成一个子任务,需要如下几个步骤:
a) 读线程根据当前读取进度CURRENT_READ_STEP及总作业大TOTAL_STEP,确定当前任务的起始job_begin,任务大小job_size,并且从空SR_BUF队列SR_BUF_EMPTY_QUEUE中获取一个空的SR_BUF_ID,将数据读入SR_BUF_ID对应的SR_BUF中,即SR_BUF[SR_BUF_ID],然后将新生成的任务信息保存至tmp_msg中,并将tmp_msg加入新计算任务队列SR_BUF_FULL_QUEUE中;
b) 计算线程需先从新计算任务队列SR_BUF_FULL_QUEUE中获取一个新计算任务,然后再从空闲目标缓冲队列DR_BUF_EMPTY_QUEUE中获取一个空闲DR_BUF_ID,之后才进行计算,计算源数据为SR_BUF[SR_ BUF_ID],计算结果存放于DR_BUF[DR_BUF_ID]中,计算结束后,释放SR_BUF_ID对应的源数据缓存,即将SR_BUF_ID加入SR_BUF_EMPTY_QUEUE队列中,并告知写线程进行输出,即将tmp_msg加入到待输出队列DR_BUF_FULL_QUEUE中;
c) 写线程从待输出任务队列DR_BUF_FULL_QUEUE中获取一个写任务信息tmp_msg,该任务信息定义了数据存放的DR_BUF_ID以及该写任务需要写到的位置信息,即job_begin,以及写任务的规模job_size,写线程完成该输出任务后,需要告知计算线程DR_BUF[DR_BUF_ID]中的数据已经输出完毕,可重新用于存放计算结果, 即将DR_BUF_ID加入DR_BUF_EMPTY_QUEUE队列中;
2.多缓冲设计
设计多个源数据缓冲SR_BUF和目标数据缓冲DR_BUF,缓冲的数目灵活可调,为了以最少的缓冲达到最高的效能,缓冲的个数有一个临限值,理论上,源缓冲与目标缓冲的数目至少为计算线程数的2倍,即:
SR_BUF_NUM>=2*COMPUTE_THREAD_NUM,DR_BUF_NUM>= 2*COMPUTE_THREAD_NUM
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮电子信息产业股份有限公司,未经浪潮电子信息产业股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210316211.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:珠形饰品钉砂机
- 下一篇:异构水龙头的自定心夹具