【技术实现步骤摘要】
一种基于自定义条件队列的多线程处理数据的方法及系统
[0001]本专利技术属于
,具体涉及一种基于自定义条件队列的多线程处理数据的方法及系统。
技术介绍
[0002]应用软件被要求有更高的处理性能。为了提升应用软件的处理性能,可以在程序设计时采用并行技术,或是从硬件层面配置更多的CPU和更多的内存,但硬件层面的提升往往需要投入更大的采购成本,而软件层面应用并行处理技术的提升,则相对更为廉价,往往是首选方案。
[0003]广义的并行,即要求一个程序在同一时刻同时处理多个任务。为了提升程序的处理性能,常常采用多进程或多线程这两种并行处理技术。多进程相对多线程而言,具有进程间资源相互隔离,编程简单且可靠性高的优势,但是也存在占用内存较多,CPU利用率较低的缺点。
[0004]因此,多进程技术适用于弱相关的多任务并行处理,并不适用于需要消耗很多CPU进行大量计算的应用场景。多线程技术因为数据共享简单、占用内存少、CPU利用率高等特点,广泛应用于数据处理领域。
[0005]但对于数据计算和数据分析业务,比如芯片测试行业中调制特性的计算或信令数据合成,如果利用传统的多线程处理技术,往往需要引入互斥锁、读写锁、自旋锁或信号量等来解决多线程间资源争抢或数据同步的问题,一不小心还可能引入死锁的bug。
[0006]另外,目前软件开发中大部分多线程处理数据的方法,局限于将一个大任务分解成若干个同质子任务进行并行处理,而对异质子任务的并行处理束手无策,即只能提升部分数据的处理性能。一旦各类子任务的数量 ...
【技术保护点】
【技术特征摘要】
1.一种基于自定义条件队列的多线程处理数据的方法,其特征在于,所述方法包括:创建数据处理类对象,对可创建的最大子线程数量进行初始化设置;根据所述可创建的最大子线程数量创建自定义双端条件队列;主线程调用所述数据处理类对象处理数据,逐一分解出待处理项;所述主线程封装待处理项后投递队列,并分配处理的子线程;所述子线程从双端条件队列获取一个元素;所述子线程根据元素的任务类型对元素内的数据进行处理。2.根据权利要求1所述的一种基于自定义条件队列的多线程处理数据的方法,其特征在于,所述“创建数据处理类对象,对可创建的最大子线程数量进行初始化设置”包括:创建所述数据处理类对象;获取系统的中央处理器核心数,根据所述中央处理器核心数,确定可创建子线程的最大值;根据所述可创建子线程的最大值,创建自定义双端条件队列数组。3.根据权利要求1所述的基于自定义条件队列的多线程处理数据的方法,其特征在于,所述“主线程调用所述数据处理类对象处理数据,逐一分解出待处理项”包括:所述主线程调用所述数据处理类对象处理数据;判断能否从所述数据中分解出一个待处理项;若能够从所述数据中分解出一个所述待处理项,将该待处理项封装为待处理子单元,投递所述待处理子单元,并分配处理的子线程;若不能从所述数据中分解出一个所述待处理项,判断是否需要等待所有所述队列元素处理完成;若需要等待所有所述队列元素处理完成,判断各个所述队列是否为空;若各个所述队列不为空,轮询均衡所述队列负载;若各个所述队列为空,判断各个所述队列的线程是否空闲;若各个所述队列的线程不为空闲,重复判断各个所述队列的线程是否空闲。4.根据权利要求3所述的基于自定义条件队列的多线程处理数据的方法,其特征在于,所述“所述主线程封装待处理项后投递队列,并分配处理的子线程”包括:设置用于遍历队列的队列编号为0;根据所述队列编号获取所述队列元素个数;判断所述队列元素个数是否大于0;若所述队列元素个数大于0,保存队列元素最少的所述队列编号;所述队列编号值加1;判断所述队列编号是否等于所述队列总数;若所述队列编号等于所述队列总数,将该待处理子单元压入元素最少的所述队列,若判断结果为否,重复所述“根据所述队列编号获取队列元素个数”的步骤。5.根据权利要求4所述的基于自定义条件队列的多线程处理数据的方法,其特征在于,还包括:若所述队列元素个数不大于0,判断线程池中是否有该队列编号的处理线程;若所述线程池中没有该队列编号的处理线程,为所述队列创建处理子线程,并为线程
处理函数指定所述队列编号,将所述队列的所述处理子线程纳入所述线程池,根据所述队列编号,将该待处理子单元压入对应的所述队列并唤醒处理线程;若所述线程池中有该队列编号的处理线程,判断所述队列处理线程是否空闲;若所述队列处理线程空闲,根据所述队列编号,将该待处理子单元压入对应的...
【专利技术属性】
技术研发人员:陈永,邬刚,
申请(专利权)人:杭州加速科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。