G06F3/06 G06F12/08 G06F17/30
1.一种数据读写方法,其特征在于,包括:
申请m个读数据线程和n个写数据线程,其中,m和n是大于或等于1的整数;
当m>n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓 存队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配 给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数 据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形 排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
当m<n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓 存队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配 给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述 环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线 程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
2.根据权利要求1所述的方法,其特征在于,
所述从m个数据缓存队列中选取n个不同的初始队列分别分配给每个写数 据线程,包括:
从m个数据缓存队列中为每个写数据线程选取一个不同的初始队列,其 中,基于所述环形排列:
若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;
若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1;
所述从n个数据缓存队列中选取m个不同的初始队列分别分配给每个读数 据线程,包括:
从n个数据缓存队列中为每个读数据线程选取一个不同的初始队列,其 中,基于所述环形排列:
若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;
若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1。
3.根据权利要求1所述的方法,其特征在于,
所述利用所述写数据线程,从对应的初始队列开始,按所述环形排列依 次从每个数据缓存队列中取出数据,包括:
从所述写数据线程对应的初始队列开始,按所述环形排列依次遍历每个 数据缓存队列;
若所述写数据线程有错误,则使所述写数据线程结束;
若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当 前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列中取出数据;
若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当 前遍历的数据缓存队列为空时,遍历下一数据缓存队列;
若所述写数据线程无错误且连续遍历到m个空的数据缓存队列,则判断m 个读数据线程是否全部结束,若是,则使所述写数据线程结束,若否,则在 等待第一设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍 历每个数据缓存队列;
所述利用所述读数据线程,从对应的初始队列开始,按所述环形排列依 次将读到的数据压入对应的数据缓存队列中,包括:
从所述读数据线程对应的初始队列开始,按所述环形排列依次遍历每个 数据缓存队列;
若所述读数据线程有错误,则使所述读数据线程结束;
若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当 前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的数据缓存队列 中;
若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当 前遍历的数据缓存队列满时,遍历下一数据缓存队列;
若所述读数据线程无错误且连续遍历到m个满的数据缓存队列,则在等待 第二设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每 个数据缓存队列。
4.根据权利要求3所述的方法,其特征在于,每个数据缓存队列分别与 一个索引号一一对应;所述按所述环形排列依次遍历每个数据缓存队列,包 括:
根据每个数据缓存队列对应的索引号,按所述环形排列依次遍历每个数 据缓存队列。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述方法还包括:
当m=n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存 队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配给 每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据 缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排 列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
或者,
当m=n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓存 队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配给 每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环 形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程, 从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源;
或者,
当m=n时,申请m个数据缓存队列;将m个数据缓存队列分别分配给每个读 数据线程,并将m个数据缓存队列分别分配给每个写数据线程;利用所述读数 据线程,将读到的数据压入对应的数据缓存队列中;利用所述写数据线程, 从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
6.一种数据读写装置,其特征在于,包括:
线程申请单元,用于申请m个读数据线程和n个写数据线程,其中,m和n 是大于或等于1的整数;
第一缓存申请单元,用于当m>n时,为所述线程申请单元申请的m个读数 据线程分别申请一个数据缓存队列;
第一环形排列单元,用于将所述第一缓存申请单元申请的m个数据缓存队 列按环形排列;
第一队列分配单元,用于从所述第一缓存申请单元申请的m个数据缓存队 列中选取n个不同的初始队列分别分配给每个写数据线程;
第一读数据单元,用于利用所述线程申请单元申请的读数据线程,将读 到的数据依次压入所述第一缓存申请单元申请的与该读数据线程对应的数据 缓存队列中;
第一写数据单元,用于利用所述线程申请单元申请的写数据线程,从所 述第一队列分配单元分配的与该写数据线程对应的初始队列开始,按所述第 一环形排列单元所做的环形排列依次从每个数据缓存队列中取出数据,并将 取出的数据写入目标数据源;
第二缓存申请单元,用于当m<n时,为所述线程申请单元申请的n个写数 据线程分别申请一个数据缓存队列;
第二环形排列单元,用于将所述第二缓存申请单元申请的n个数据缓存队 列按环形排列;
第二队列分配单元,用于从所述第二缓存申请单元申请的n个数据缓存队 列中选取m个不同的初始队列分别分配给每个读数据线程;
第二读数据单元,用于利用所述线程申请单元申请的读数据线程,从所 述第二队列分配单元分配的与该读数据线程对应的初始队列开始,按所述第 二环形排列单元所做的环形排列依次将读到的数据压入对应的数据缓存队列 中;
第二写数据单元,用于利用所述线程申请单元申请的写数据线程,从所 述第二缓存申请单元申请的与该写数据线程对应的数据缓存队列中取出数 据,并将取出的数据写入目标数据源。
7.根据权利要求6所述的装置,其特征在于,
所述第一队列分配单元,具体用于从m个数据缓存队列中为每个写数据线 程选取一个不同的初始队列,其中,基于所述环形排列:
若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数 为b-1;
所述第二队列分配单元,具体用于从n个数据缓存队列中为每个读数据线 程选取一个不同的初始队列,其中,基于所述环形排列:
若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数 为b-1。
8.根据权利要求6所述的装置,其特征在于,
所述第一写数据单元,包括:
第一遍历子单元,用于从所述写数据线程对应的初始队列开始,按所述 环形排列依次遍历每个数据缓存队列;
写数据子单元,用于若所述写数据线程有错误,则使所述写数据线程结 束;若所述写数据线程无错误且所述第一遍历子单元未连续遍历到m个空的数 据缓存队列,则当当前遍历的数据缓存队列不为空时,从当前遍历的数据缓 存队列中取出数据;若所述写数据线程无错误且所述第一遍历子单元未连续 遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列为空时,使所述 第一遍历子单元遍历下一数据缓存队列;若所述写数据线程无错误且所述第 一遍历子单元连续遍历到m个空的数据缓存队列,则判断m个读数据线程是否 全部结束,若是,则使所述写数据线程结束,若否,则在等待第一设定时间 段后,从下一数据缓存队列开始,使所述第一遍历子单元按所述环形排列依 次遍历每个数据缓存队列;
所述第二读数据单元,包括:
第二遍历子单元,用于从所述读数据线程对应的初始队列开始,按所述 环形排列依次遍历每个数据缓存队列;
读数据子单元,用于若所述读数据线程有错误,则使所述读数据线程结 束;若所述读数据线程无错误且所述第二遍历子单元未连续遍历到m个满的数 据缓存队列,则当当前遍历的数据缓存队列不满时,将读到的数据压入当前 遍历的数据缓存队列中;若所述读数据线程无错误且所述第二遍历子单元未 连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列满时,使所 述第二遍历子单元遍历下一数据缓存队列;若所述读数据线程无错误且所述 第二遍历子单元连续遍历到m个满的数据缓存队列,则在等待第二设定时间段 后,从下一数据缓存队列开始,使所述第二遍历子单元按所述环形排列依次 遍历每个数据缓存队列。
9.根据权利要求8所述的装置,其特征在于,每个数据缓存队列分别与 一个索引号一一对应;
所述第一遍历子单元,具体用于根据每个数据缓存队列对应的索引号, 按所述环形排列依次遍历每个数据缓存队列;
所述第二遍历子单元,具体用于根据每个数据缓存队列对应的索引号, 按所述环形排列依次遍历每个数据缓存队列。
10.根据权利要求6至9任一项所述的装置,其特征在于,所述装置还包 括:
第三缓存申请单元,用于当m=n时,为m个读数据线程分别申请一个数据 缓存队列;
第三环形排列单元,用于将m个数据缓存队列按环形排列;
第三队列分配单元,用于从m个数据缓存队列中选取n个不同的初始队列 分别分配给每个写数据线程;
第三读数据单元,用于利用所述读数据线程,将读到的数据依次压入对 应的数据缓存队列中;
第三写数据单元,用于利用所述写数据线程,从对应的初始队列开始, 按所述环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入 目标数据源;
或者,
所述第三缓存申请单元,用于当m=n时,为n个写数据线程分别申请一个 数据缓存队列;
所述第三环形排列单元,用于将n个数据缓存队列按环形排列;
所述第三队列分配单元,用于从n个数据缓存队列中选取m个不同的初始 队列分别分配给每个读数据线程;
所述第三读数据单元,用于利用所述读数据线程,从对应的初始队列开 始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中;
所述第三写数据单元,用于利用所述写数据线程,从对应的数据缓存队 列中取出数据,并将取出的数据写入目标数据源;
或者,
所述第三缓存申请单元,用于当m=n时,申请m个数据缓存队列;
所述第三队列分配单元,用于将所述第三缓存申请单元申请的m个数据缓 存队列分别分配给每个读数据线程,并将所述第三缓存申请单元申请的m个数 据缓存队列分别分配给每个写数据线程;
所述第三读数据单元,用于利用所述线程申请单元申请的读数据线程, 将读到的数据压入对应的数据缓存队列中;
所述第三写数据单元,用于利用所述线程申请单元申请的写数据线程, 从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
本发明涉及计算机技术领域,尤其涉及一种数据读写方法及装置。
随着业务数据量的不断增加,业务上对数据采集性能的要求也在不断的提 高,尤其在某些业务表数据量特别大情况下,会导致其他业务长时间等待。
在现有硬件条件下,为了减少其他业务等待时间,提高数据采集效率,现 有技术采用的技术手段是增加数据读写线程数,具体是利用多个读数据线程将 各自读到的数据存放到一个数据缓存队列中,利用多个写数据线程分别从这个 数据缓存队列中取数据以便将取出的数据写入目标数据源。
与采用单个读数据线程和单个写数据线程相比,通过增加数据读写线程 数,虽然可以使得数据处理性能有较大幅度的提高,但并不能达到理想的预期 效果,比如线程数增加10倍,但性能(处理速度)仅提高5倍,且线程数越 多,占用的系统资源越多,在一定程度上还会导致性能降低。
有鉴于此,本发明实施例的主要目的在于提供一种数据读写方法及装置, 以实现提高数据读写速度的目的。
为实现上述目的,本发明实施例提供了一种数据读写方法,包括:
申请m个读数据线程和n个写数据线程,其中,m和n是大于或等于1的整数;
当m>n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存 队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配给每 个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据缓存 队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次 从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
当m<n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓存 队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配给每 个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环形排 列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对 应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
可选的,
所述从m个数据缓存队列中选取n个不同的初始队列分别分配给每个写数 据线程,包括:
从m个数据缓存队列中为每个写数据线程选取一个不同的初始队列,其中, 基于所述环形排列:
若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;
若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1;
所述从n个数据缓存队列中选取m个不同的初始队列分别分配给每个读数 据线程,包括:
从n个数据缓存队列中为每个读数据线程选取一个不同的初始队列,其中, 基于所述环形排列:
若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;
若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1。
可选的,所述利用所述写数据线程,从对应的初始队列开始,按所述环形 排列依次从每个数据缓存队列中取出数据,包括:
从所述写数据线程对应的初始队列开始,按所述环形排列依次遍历每个数 据缓存队列;
若所述写数据线程有错误,则使所述写数据线程结束;
若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当 前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列中取出数据;
若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当 前遍历的数据缓存队列为空时,遍历下一数据缓存队列;
若所述写数据线程无错误且连续遍历到m个空的数据缓存队列,则判断m 个读数据线程是否全部结束,若是,则使所述写数据线程结束,若否,则在等 待第一设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每 个数据缓存队列;
所述利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次 将读到的数据压入对应的数据缓存队列中,包括:
从所述读数据线程对应的初始队列开始,按所述环形排列依次遍历每个数 据缓存队列;
若所述读数据线程有错误,则使所述读数据线程结束;
若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当 前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的数据缓存队列 中;
若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当 前遍历的数据缓存队列满时,遍历下一数据缓存队列;
若所述读数据线程无错误且连续遍历到m个满的数据缓存队列,则在等待 第二设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每个 数据缓存队列。
可选的,每个数据缓存队列分别与一个索引号一一对应;所述按所述环形 排列依次遍历每个数据缓存队列,包括:
根据每个数据缓存队列对应的索引号,按所述环形排列依次遍历每个数据 缓存队列。
可选的,所述方法还包括:
当m=n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存 队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配给每 个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据缓存 队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次 从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
或者,
当m=n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓存 队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配给每 个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环形排 列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对 应的数据缓存队列中取出数据,并将取出的数据写入目标数据源;
或者,
当m=n时,申请m个数据缓存队列;将m个数据缓存队列分别分配给每个读 数据线程,并将m个数据缓存队列分别分配给每个写数据线程;利用所述读数 据线程,将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从 对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
本发明实施例还提供了一种数据读写装置,包括:
线程申请单元,用于申请m个读数据线程和n个写数据线程,其中,m和n 是大于或等于1的整数;
第一缓存申请单元,用于当m>n时,为所述线程申请单元申请的m个读数 据线程分别申请一个数据缓存队列;
第一环形排列单元,用于将所述第一缓存申请单元申请的m个数据缓存队 列按环形排列;
第一队列分配单元,用于从所述第一缓存申请单元申请的m个数据缓存队 列中选取n个不同的初始队列分别分配给每个写数据线程;
第一读数据单元,用于利用所述线程申请单元申请的读数据线程,将读到 的数据依次压入所述第一缓存申请单元申请的与该读数据线程对应的数据缓 存队列中;
第一写数据单元,用于利用所述线程申请单元申请的写数据线程,从所述 第一队列分配单元分配的与该写数据线程对应的初始队列开始,按所述第一环 形排列单元所做的环形排列依次从每个数据缓存队列中取出数据,并将取出的 数据写入目标数据源;
第二缓存申请单元,用于当m<n时,为所述线程申请单元申请的n个写数 据线程分别申请一个数据缓存队列;
第二环形排列单元,用于将所述第二缓存申请单元申请的n个数据缓存队 列按环形排列;
第二队列分配单元,用于从所述第二缓存申请单元申请的n个数据缓存队 列中选取m个不同的初始队列分别分配给每个读数据线程;
第二读数据单元,用于利用所述线程申请单元申请的读数据线程,从所述 第二队列分配单元分配的与该读数据线程对应的初始队列开始,按所述第二环 形排列单元所做的环形排列依次将读到的数据压入对应的数据缓存队列中;
第二写数据单元,用于利用所述线程申请单元申请的写数据线程,从所述 第二缓存申请单元申请的与该写数据线程对应的数据缓存队列中取出数据,并 将取出的数据写入目标数据源。
可选的,
所述第一队列分配单元,具体用于从m个数据缓存队列中为每个写数据线 程选取一个不同的初始队列,其中,基于所述环形排列:
若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为 b-1;
所述第二队列分配单元,具体用于从n个数据缓存队列中为每个读数据线 程选取一个不同的初始队列,其中,基于所述环形排列:
若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数 据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列 数为b-1;若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为 b-1。
可选的,
所述第一写数据单元,包括:
第一遍历子单元,用于从所述写数据线程对应的初始队列开始,按所述环 形排列依次遍历每个数据缓存队列;
写数据子单元,用于若所述写数据线程有错误,则使所述写数据线程结束; 若所述写数据线程无错误且所述第一遍历子单元未连续遍历到m个空的数据缓 存队列,则当当前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列 中取出数据;若所述写数据线程无错误且所述第一遍历子单元未连续遍历到m 个空的数据缓存队列,则当当前遍历的数据缓存队列为空时,使所述第一遍历 子单元遍历下一数据缓存队列;若所述写数据线程无错误且所述第一遍历子单 元连续遍历到m个空的数据缓存队列,则判断m个读数据线程是否全部结束,若 是,则使所述写数据线程结束,若否,则在等待第一设定时间段后,从下一数 据缓存队列开始,使所述第一遍历子单元按所述环形排列依次遍历每个数据缓 存队列;
所述第二读数据单元,包括:
第二遍历子单元,用于从所述读数据线程对应的初始队列开始,按所述环 形排列依次遍历每个数据缓存队列;
读数据子单元,用于若所述读数据线程有错误,则使所述读数据线程结束; 若所述读数据线程无错误且所述第二遍历子单元未连续遍历到m个满的数据缓 存队列,则当当前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的 数据缓存队列中;若所述读数据线程无错误且所述第二遍历子单元未连续遍历 到m个满的数据缓存队列,则当当前遍历的数据缓存队列满时,使所述第二遍 历子单元遍历下一数据缓存队列;若所述读数据线程无错误且所述第二遍历子 单元连续遍历到m个满的数据缓存队列,则在等待第二设定时间段后,从下一 数据缓存队列开始,使所述第二遍历子单元按所述环形排列依次遍历每个数据 缓存队列。
可选的,每个数据缓存队列分别与一个索引号一一对应;
所述第一遍历子单元,具体用于根据每个数据缓存队列对应的索引号,按 所述环形排列依次遍历每个数据缓存队列;
所述第二遍历子单元,具体用于根据每个数据缓存队列对应的索引号,按 所述环形排列依次遍历每个数据缓存队列。
可选的,所述装置还包括:
第三缓存申请单元,用于当m=n时,为m个读数据线程分别申请一个数据缓 存队列;
第三环形排列单元,用于将m个数据缓存队列按环形排列;
第三队列分配单元,用于从m个数据缓存队列中选取n个不同的初始队列分 别分配给每个写数据线程;
第三读数据单元,用于利用所述读数据线程,将读到的数据依次压入对应 的数据缓存队列中;
第三写数据单元,用于利用所述写数据线程,从对应的初始队列开始,按 所述环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标 数据源;
或者,
所述第三缓存申请单元,用于当m=n时,为n个写数据线程分别申请一个数 据缓存队列;
所述第三环形排列单元,用于将n个数据缓存队列按环形排列;
所述第三队列分配单元,用于从n个数据缓存队列中选取m个不同的初始队 列分别分配给每个读数据线程;
所述第三读数据单元,用于利用所述读数据线程,从对应的初始队列开始, 按所述环形排列依次将读到的数据压入对应的数据缓存队列中;
所述第三写数据单元,用于利用所述写数据线程,从对应的数据缓存队列 中取出数据,并将取出的数据写入目标数据源;
或者,
所述第三缓存申请单元,用于当m=n时,申请m个数据缓存队列;
所述第三队列分配单元,用于将所述第三缓存申请单元申请的m个数据缓 存队列分别分配给每个读数据线程,并将所述第三缓存申请单元申请的m个数 据缓存队列分别分配给每个写数据线程;
所述第三读数据单元,用于利用所述线程申请单元申请的读数据线程,将 读到的数据压入对应的数据缓存队列中;
所述第三写数据单元,用于利用所述线程申请单元申请的写数据线程,从 对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
本发明实施例提供了数据读写方法及装置,申请m个读数据线程和n个写 数据线程;当m>n时,使m个读数据线程分别对应一个数据缓存队列,以便 将读到的数据压入对应队列中,而使n个写数据线程按照螺旋式从各个队列中 取数据并写入目标数据源;当m<n时,使n个写数据线程分别对应一个数据 缓存队列,以便从对应队列中取出数据并写入目标数据源,而使m个读数据线 程按照螺旋式将读到的数据压入各个队列中。本发明实施例借助多线程、多数 据缓存队列可有效提高数据处理效率,同时使用螺旋控制方法可有效利用系统 资源,在有限的硬件条件下,大幅度提高数据采集、处理效率,减少业务等待 时间。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创 造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例数据处理总线程控制流程示意图;
图2为本发明实施例数据读处理线程控制流程示意图;
图3为本发明实施例数据写处理线程控制流程示意图;
图4为本发明实施例数据读写方法的流程示意图;
图5为本发明实施例环形排列示意图;
图6为本发明实施例四线程工作示意图;
图7为本发明实施例采集性能对比示意图;
图8为本发明实施例数据读写装置的组成示意图。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明 实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然, 所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中 的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其 他实施例,都属于本发明保护的范围。
在本发明实施例中,当数据采集业务开始时,数据处理总线程启动,数据 处理总线程分别申请一个数据读处理线程和一个数据写处理线程,数据读处理 线程根据配置参数申请一个或多个(m个)读数据线程,数据写处理线程根据 配置参数申请一或多个(n个)写数据线程。然后,比较m与n值的大小;若 n值大,则申请n个数据缓存队列,分别为每个写数据线程分配一个数据缓存 队列,以便每个写数据线程一对一的从对应的数据缓存队列中取数据,并将取 出的数据写入目标数据源;同时,从这n个数据缓存队列中分别为每个读数据 线程分配一个数据缓存队列作为起始队列,每个读数据线程均从自己的起始队 列开始,按照对n个数据缓存队列进行的环形排序顺序,先将读到的数据依次 压入起始队列中,起始队列满后,再将后续读到的数据依次压入下一数据缓存 队列中(寻址方式),按照环形排序周而复始的执行上述操作,直到数据读处 理线程和数据写处理线程结束;若m值大,也执行上述相似的流程。下面具体 介绍本发明实施例。
参见图1所示的数据处理总线程控制流程示意图。具体流程为:数据采集 业务开始时,数据处理总线程启动后,随后同步启动数据读处理线程(参见图 2)和数据写处理线程(参见图3),然后数据处理总线程挂起,直到数据读处 理线程和数据写处理线程完成后唤醒数据处理总线程。
参见图2所示的数据读处理线程控制流程示意图。具体流程为:数据读处 理线程启动后,首先初始化线程所需资源,然后申请m个读数据线程,并为每 个读数据线程申请数据缓存队列,申请完成后正式启动所有读数据线程,多个 读数据线程按螺旋式将读到的数据压入对应的数据缓存队列中,当所有数据处 理完成后,通知数据处理总线程数据读处理线程完成。
参见图3所示的数据写处理线程控制流程示意图。具体流程为:数据写处 理线程启动后,首先初始化线程所需资源,然后申请n个写数据线程,并为每 个写数据线程申请数据缓存队列,申请完成后正式启动所有写数据线程,多个 写数据线程按螺旋式从对应的数据缓存队列中取数据,然后将取出的数据写入 目标数据源,当所有数据缓存队列中无数据且数据读处理线程结束时,唤醒数 据处理总线程。
现结合图2和图3所示流程,对上述数据读写方法进行具体介绍。参见图 4,为本发明实施例提供的数据读写方法的流程示意图,该方法包括:
步骤401:申请m个读数据线程和n个写数据线程,其中,m和n是大于或等 于1的整数。
在步骤401中,可以根据配置参数申请m个读数据线程和n个写数据线程。 比如,所述配置参数可以是网络参数,若当前网络较好,则m和n取值大些,若 当前网络较差,则m和n取值小些,还可以根据其他配置参数选取m和n值,本发 明实施例对此不做具有限制。
在本发明实施例中,还要读取配置的读数据线程数m与写数据线程数n,并 比较m与n的大小,根据比较结果执行步骤402至404中的一个步骤。
步骤402:当m>n时,为m个读数据线程分别申请一个数据缓存队列;将m 个数据缓存队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分 别分配给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应 的数据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环 形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据 源。
在步骤402中,当m>n时,申请m个数据缓存队列,这m个数据缓存队列与m 个读数据线程分别一一对应,对于每个读数据线程,将读到的数据压入对应的 数据缓存队列中。
此外,还要从m个数据缓存队列中选取n个不同的数据缓存队列作为初始队 列,并将这n个初始队列分别分配给每个写数据线程。即从m个数据缓存队列中 为每个写数据线程选取一个不同的初始队列,其中,基于对m个数据缓存队列 的环形排列,各个初始队列之间存在以下关系:
①、若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔 的数据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存 队列数为b-1。
举例说明:假设m=8、n=6,则数据缓存队列的总数为8,需要从中选取6个 初始队列分别分配给6个写数据线程。具体实现时,首先,为每个数据缓存队 列配置一个索引号,参见图5所示的环形排列示意图,8个数据缓存队列按环形 排列且每个数据缓存队列配置有一个索引号,比如,这8个数据缓存队列的索 引号分别为0、1、2、3、4、5、6、7,通过索引号可以到与索引号对应的数 据缓存队列;然后,计算b,8/6取整数后即为b=1;最后,将索引号为b*i(i=0、 1、……、n-1)即索引号分别为0、1、2、3、4、5对应的6个数据缓存队列作 为初始队列,分别分配给6个写数据线程,此时,索引号0和5对应的两个初始 队列之间间隔2(即m-b-n+1=2)个数据缓存队列6和7,其它相邻初始队列之间 即索引号0和1对应的初始队列之间、索引号1和2对应的初始队列之间、索引号 2和3对应的初始队列之间、索引号3和4对应的初始队列之间、索引号4和5对应 的初始队列之间均没有队列间隔(即b-1=0)。
②、若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为 b-1。
举例说明:假设m=8、n=4,则数据缓存队列的总数为8,需要从中选取4个 初始队列分别分配给4个写数据线程。具体实现时,首先,为每个数据缓存队 列配置一个索引号,参见图5所示的环形排列示意图,8个数据缓存队列按照环 形排列且每个数据缓存队列配置有一个索引号,比如,8个数据缓存队列的索 引号分别为0、1、2、3、4、5、6、7,通过索引号可以到与索引号对应的数 据缓存队列;然后,计算b,8/4整除后即为b=2;最后,将索引号为b*i(i=0、 1、……、n-1)即索引号分别为0、2、4、6对应的4个数据缓存队列作为初始 队列,分别分配给4个写数据线程,此时,每相邻两个初始队列之间即索引号0 和2对应的初始队列之间、索引号2和4对应的初始队列之间、索引号4和6对应 的初始队列、索引号6和0对应的初始队列之间均间隔1个数据缓存队列(即 b-1=1)。
在为n个写数据线程分别分配一个不同的初始队列后,对于每个写数据线 程,需要从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中 取出数据,即每个写数据线程均从自己的初始队列开始,按照对m个数据缓存 队列进行的环形排列顺序,先从对应的初始队列中取数据,以便将取到的数据 写入目标数据源中,待初始队列中的数据被取空后,再从初始队列后的下一数 据缓存队列中取数据,这样,按照环形排列顺序依次去取每个数据缓存队列中 的所有数据,直到所有数据缓存队列中的数据全部被取空且读数据线程不再向 数据缓存队列中压入数据为止。具体操作如下:
对于每个写数据线程,从写数据线程对应的初始队列开始,按所述环形排 列依次遍历每个数据缓存队列,在遍历过程中,存在以下几种情况。
①、若写数据线程有错误,则使该写数据线程结束;
②、若写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当 前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列中取出数据;
③、若写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当 前遍历的数据缓存队列为空时,遍历下一数据缓存队列;
④、若写数据线程无错误且连续遍历到m个空的数据缓存队列,则判断m 个读数据线程是否全部结束,若是,则使该写数据线程结束,若否,则在等待 第一设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每个 数据缓存队列。
在本发明实施例中,可使每个数据缓存队列分别与一个索引号一一对应, 进而根据每个数据缓存队列对应的索引号,按所述环形排列依次遍历每个数据 缓存队列。对于上述四种情况,下面举例说明:
假设m=8、n=4,此时数据缓存队列的总数为8,8个数据缓存队列的索引号 分别为0、1、2、3、4、5、6、7(参见图5),索引号分别为0、2、4、6对应的 4个数据缓存队列分别作为4个写数据线程的初始队列。在4个写数据线程中, 第1个写数据线程按照索引号顺序0、1、……、6、7、0、1、……循环遍历每 个数据缓存队列,第2个写数据线程按照索引号顺序2、3、……、6、7、0、1、…… 循环遍历每个数据缓存队列,第3个写数据线程依次按照索引号顺序4、5、6、 7、0、1、……循环遍历每个数据缓存队列,第4个写数据线程按照索引号顺序 6、7、0、1、……循环遍历每个数据缓存队列,这样,四个写数据线程按螺旋 式从数据缓存队列中取数据。下面以第1个写数据线程为例(其它写数据线程 类似,此处不再赘述):
当第1个写数据线程错误(即程序执行错误)时,使第1个写数据线程结束 执行(对应情况①);当第1个写数据线程无错误时,第1个写数据线程首先遍 历索引号0对应的数据缓存队列,判断索引号0对应的数据缓存队列是否为空, 若该队列不为空,则从该队列中取出全部数据(对应情况②),若该队列为空 或该队列被取空后,则遍历索引号1对应的数据缓存队列(对应情况③),依次 类推;若连续遍历到m个空队列,比如从索引号1对应的数据缓存队列到索引号 0对应的数据缓存队列,这m个数据缓存队列均为空,说明所有数据缓存队列中 的数据均被取出,此时进一步判断8个读数据线程是否全部结束,若是,则说 明不会再有数据压入数据缓存队列中,若否,则说明还有数据未压入数据缓存 队列中,此时等待数据压入,待设定时间后,再从索引号1对应的数据缓存队 列开始,继续遍历每个队列,直到m个数据缓存队列均为空且m个读数据线程全 部结束为止。
步骤403:当m<n时,为n个写数据线程分别申请一个数据缓存队列;将n 个数据缓存队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分 别分配给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按 所述环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据 线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
在步骤403中,当m<n时,申请n个数据缓存队列,这n个数据缓存队列与n 个写数据线程分别一一对应,对于每个写数据线程,从对应的数据缓存队列中 取出数据,并将取出的数据写入目标数据源。
此外,还要从n个数据缓存队列中选取m个不同的初始队列分别分配给每个 读数据线程。即从n个数据缓存队列中为每个读数据线程选取一个不同的初始 队列,其中,基于对n个数据缓存队列的环形排列,各个初始队列之间存在以 下关系:
①、若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔 的数据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存 队列数为b-1。
举例说明:假设n=8、m=6,则数据缓存队列的总数为8,需要从中选取6个 初始队列分别分配给6个读数据线程。具体实现时,首先,为每个数据缓存队 列配置一个索引号,参见图5所示的环形排列示意图,8个数据缓存队列按环形 排列且每个数据缓存队列配置有一个索引号,比如,这8个数据缓存队列的索 引号分别为0、1、2、3、4、5、6、7,通过索引号可以到与索引号对应的数 据缓存队列;然后,计算b,8/6取整数后即为b=1;最后,将索引号为b*i(i=0、 1、……、n-1)即索引号分别为0、1、2、3、4、5对应的6个数据缓存队列作 为初始队列,分别分配给6个读数据线程,此时,索引号0和5对应的两个初始 队列之间间隔2(即m-b-n+1=2)个数据缓存队列6和7,其它相邻初始队列之间 即索引号0和1对应的初始队列之间、索引号1和2对应的初始队列之间、索引号 2和3对应的初始队列之间、索引号3和4对应的初始队列之间、索引号4和5对应 的初始队列之间均没有队列间隔(即b-1=0)。
②、若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为 b-1。
举例说明:假设n=8、m=4,则数据缓存队列的总数为8,需要从中选取4个 初始队列分别分配给4个读数据线程。具体实现时,首先,为每个数据缓存队 列配置一个索引号,参见图5所示的环形排列示意图,8个数据缓存队列按照环 形排列且每个数据缓存队列配置有一个索引号,比如,8个数据缓存队列的索 引号分别为0、1、2、3、4、5、6、7,通过索引号可以到与索引号对应的数 据缓存队列;然后,计算b,8/4整除后即为b=2;最后,将索引号为b*i(i=0、 1、……、n-1)即索引号分别为0、2、4、6对应的4个数据缓存队列作为初始 队列,分别分配给4个读数据线程,此时,每相邻两个初始队列之间即索引号0 和2对应的初始队列之间、索引号2和4对应的初始队列之间、索引号4和6对应 的初始队列、索引号6和0对应的初始队列之间均间隔1个数据缓存队列(即 b-1=1)。
在为m个读数据线程分别分配一个不同的初始队列后,对于每个读数据线 程,需要从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应 的数据缓存队列中,即每个读数据线程均从自己的初始队列开始,按照对n个 数据缓存队列进行的环形排列顺序,先将读到的数据压入对应的初始队列中, 待初始队列被压满后,再将读到的数据压入初始队列后的下一数据缓存队列 中,这样,按照环形排列顺序将读到的数据依次压满每个数据缓存队列,直到 没有数据需要压入数据缓存队列为止,这样,四个读数据线程按螺旋式将读到 的数据压入数据缓存队列。具体操作如下:
对于每个读数据线程,从该读数据线程对应的初始队列开始,按所述环形 排列依次遍历每个数据缓存队列,在遍历过程中,存在以下几种情况。
①、若读数据线程有错误,则使该读数据线程结束;
②、若读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当 前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的数据缓存队列 中;
③、若读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当 前遍历的数据缓存队列满时,遍历下一数据缓存队列;
④、若读数据线程无错误且连续遍历到m个满的数据缓存队列,则在等待 第二设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每个 数据缓存队列。
在本发明实施例中,可使每个数据缓存队列分别与一个索引号一一对应, 进而根据每个数据缓存队列对应的索引号,按所述环形排列依次遍历每个数据 缓存队列。对于上述四种情况,下面举例说明:
假设n=8、m=4,此时数据缓存队列的总数为8,8个数据缓存队列的索引号 分别为0、1、2、3、4、5、6、7(参见图5),索引号分别为0、2、4、6对应的 4个数据缓存队列分别作为4个读数据线程的初始队列。在4个读数据线程中, 第1个读数据线程按照索引号顺序0、1、……、6、7、0、1、……循环遍历每 个数据缓存队列,第2个读数据线程按照索引号顺序2、3、……、6、7、0、1、…… 循环遍历每个数据缓存队列,第3个读数据线程依次按照索引号顺序4、5、6、 7、0、1、……循环遍历每个数据缓存队列,第4个读数据线程按照索引号顺序 6、7、0、1、……循环遍历每个数据缓存队列。下面以第1个读数据线程为例 (其它读数据线程类似,此处不再赘述):
当第1个读数据线程错误(即程序执行错误)时,使第1个读数据线程结束 执行(对应情况①);当第1个读数据线程无错误时,第1个读数据线程首先遍 历索引号0对应的数据缓存队列,判断索引号0对应的数据缓存队列是否为满, 若该队列不为满,则将读到的数据压入该队列中(对应情况②),若该队列为 满或该队列被填满后,则遍历索引号1对应的数据缓存队列(对应情况③),依 次类推;若连续遍历到m个满队列,比如,从索引号1对应的数据缓存队列到索 引号0对应的数据缓存队列,这m个数据缓存队列均为满,说明所有数据缓存队 列均被填满,此时还有数据需要压入数据缓存队列,则等待写数据线程从数据 缓存队列中取出数据,等待设定时间后,再从索引号1对应的数据缓存队列开 始,继续遍历每个队列,直到没有数据需要压入数据缓存队列为止。
进一步,对于读数据线程数与写数据线程数相等的情况(即m=n)存在以 下三种处理方式:
方式1、当m=n时,为m个读数据线程分别申请一个数据缓存队列;将m个数 据缓存队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分 配给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数 据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排 列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源。
方式2、当m=n时,为n个写数据线程分别申请一个数据缓存队列;将n个数 据缓存队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分 配给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述 环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线 程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
对于方式1,其具体相关描述请参见m>n的情况,在此不再赘述。对于方 式2,其具体相关描述请参见m<n的情况,在此不再赘述。
方式3、当m=n时,申请m个数据缓存队列;将m个数据缓存队列分别分配给 每个读数据线程,并将m个数据缓存队列分别分配给每个写数据线程;利用所 述读数据线程,将读到的数据压入对应的数据缓存队列中;利用所述写数据线 程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
在步骤404中,当m=n时,比如m=n=4,则申请4个数据缓存队列,这4个数 据缓存队列与4个读数据线程分别一一对应,且这4个数据缓存队列与4个写数 据线程分别一一对应。对于每个读数据线程,将读到的数据压入对应的数据缓 存队列中;对于每个写数据线程,从对应的数据缓存队列中取出数据,并将取 出的数据写入目标数据源。
为了说明本发明实施例的数据处理性能,下面与现有技术进行对比说明。
参见图6所示的四线程工作示意图,基于四线程(即四个读数据线程和两 个写数据线程、或四个写数据线程和两个读数据线程),采用本发明实施例所 述的方法进行数据读写操作。参见图7所示的采集性能对比示意图,将本发明 实施例采用的四线程,与现有技术中的单线程(一个读数据线程和一个写数据 线程)、四线程(四个读数据线程和四个写数据线程)进行比对,根据测试数 据计算,在相同数据量、相同硬件条件下,采用本发明四线程的数据处理速度 是采用现有技术四线程的数据处理速度的1.67倍、是采用现有技术单线程的数 据处理速度的3.68倍。可见,在同样硬件条件下,本发明实施例能够更大幅度 的降低多线程间的相互干扰、共享锁定,可充分利用计算机资源,提高系统处 理性能,缩短业务响应时间。
参见图8,为本发明实施例提供的数据读写装置的组成示意图,该装置包 括:
线程申请单元801,用于申请m个读数据线程和n个写数据线程,其中,m 和n是大于或等于1的整数;
第一缓存申请单元802,用于当m>n时,为所述线程申请单元801申请的m 个读数据线程分别申请一个数据缓存队列;
第一环形排列单元803,用于将所述第一缓存申请单元802申请的m个数据 缓存队列按环形排列;
第一队列分配单元804,用于从所述第一缓存申请单元802申请的m个数据 缓存队列中选取n个不同的初始队列分别分配给每个写数据线程;
第一读数据单元805,用于利用所述线程申请单元801申请的读数据线程, 将读到的数据依次压入所述第一缓存申请单元802申请的与该读数据线程对应 的数据缓存队列中;
第一写数据单元806,用于利用所述线程申请单元801申请的写数据线程, 从所述第一队列分配单元804分配的与该写数据线程对应的初始队列开始,按 所述第一环形排列单元803所做的环形排列依次从每个数据缓存队列中取出数 据,并将取出的数据写入目标数据源;
第二缓存申请单元807,用于当m<n时,为所述线程申请单元801申请的n 个写数据线程分别申请一个数据缓存队列;
第二环形排列单元808,用于将所述第二缓存申请单元807申请的n个数据 缓存队列按环形排列;
第二队列分配单元809,用于从所述第二缓存申请单元807申请的n个数据 缓存队列中选取m个不同的初始队列分别分配给每个读数据线程;
第二读数据单元810,用于利用所述线程申请单元801申请的读数据线程, 从所述第二队列分配单元809分配的与该读数据线程对应的初始队列开始,按 所述第二环形排列单元808所做的环形排列依次将读到的数据压入对应的数据 缓存队列中;
第二写数据单元811,用于利用所述线程申请单元801申请的写数据线程, 从所述第二缓存申请单元807申请的与该写数据线程对应的数据缓存队列中取 出数据,并将取出的数据写入目标数据源。
在本发明实施例中,
所述第一队列分配单元804,具体用于从m个数据缓存队列中为每个写数据 线程选取一个不同的初始队列,其中,基于所述环形排列:若m/n不能整除且m/n 取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-n+1, 其它每相邻两个初始队列之间间隔的数据缓存队列数为b-1;若m/n能整除,则 每相邻两个初始队列之间间隔的数据缓存队列数为b-1;
所述第二队列分配单元809,具体用于从n个数据缓存队列中为每个读数据 线程选取一个不同的初始队列,其中,基于所述环形排列:若n/m不能整除且n/m 取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-n+1, 其它每相邻两个初始队列之间间隔的数据缓存队列数为b-1;若n/m能整除,则 每相邻两个初始队列之间间隔的数据缓存队列数为b-1。
在本发明实施例中,
所述第一写数据单元806,包括:
第一遍历子单元,用于从所述写数据线程对应的初始队列开始,按所述环 形排列依次遍历每个数据缓存队列;写数据子单元,用于若所述写数据线程有 错误,则使所述写数据线程结束;若所述写数据线程无错误且所述第一遍历子 单元未连续遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列不为 空时,从当前遍历的数据缓存队列中取出数据;若所述写数据线程无错误且所 述第一遍历子单元未连续遍历到m个空的数据缓存队列,则当当前遍历的数据 缓存队列为空时,使所述第一遍历子单元遍历下一数据缓存队列;若所述写数 据线程无错误且所述第一遍历子单元连续遍历到m个空的数据缓存队列,则判 断m个读数据线程是否全部结束,若是,则使所述写数据线程结束,若否,则 在等待第一设定时间段后,从下一数据缓存队列开始,使所述第一遍历子单元 按所述环形排列依次遍历每个数据缓存队列;
所述第二读数据单元810,包括:
第二遍历子单元,用于从所述读数据线程对应的初始队列开始,按所述环 形排列依次遍历每个数据缓存队列;读数据子单元,用于若所述读数据线程有 错误,则使所述读数据线程结束;若所述读数据线程无错误且所述第二遍历子 单元未连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列不满 时,将读到的数据压入当前遍历的数据缓存队列中;若所述读数据线程无错误 且所述第二遍历子单元未连续遍历到m个满的数据缓存队列,则当当前遍历的 数据缓存队列满时,使所述第二遍历子单元遍历下一数据缓存队列;若所述读 数据线程无错误且所述第二遍历子单元连续遍历到m个满的数据缓存队列,则 在等待第二设定时间段后,从下一数据缓存队列开始,使所述第二遍历子单元 按所述环形排列依次遍历每个数据缓存队列。
在本发明实施例中,每个数据缓存队列分别与一个索引号一一对应;所 述第一遍历子单元,具体用于根据每个数据缓存队列对应的索引号,按所述环 形排列依次遍历每个数据缓存队列;所述第二遍历子单元,具体用于根据每个 数据缓存队列对应的索引号,按所述环形排列依次遍历每个数据缓存队列。
在本发明实施例中,所述装置还包括:
第三缓存申请单元,用于当m=n时,为m个读数据线程分别申请一个数据缓 存队列;第三环形排列单元,用于将m个数据缓存队列按环形排列;第三队列 分配单元,用于从m个数据缓存队列中选取n个不同的初始队列分别分配给每个 写数据线程;第三读数据单元,用于利用所述读数据线程,将读到的数据依次 压入对应的数据缓存队列中;第三写数据单元,用于利用所述写数据线程,从 对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据, 并将取出的数据写入目标数据源;
或者,
所述第三缓存申请单元,用于当m=n时,为n个写数据线程分别申请一个数 据缓存队列;所述第三环形排列单元,用于将n个数据缓存队列按环形排列; 所述第三队列分配单元,用于从n个数据缓存队列中选取m个不同的初始队列分 别分配给每个读数据线程;所述第三读数据单元,用于利用所述读数据线程, 从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓 存队列中;所述第三写数据单元,用于利用所述写数据线程,从对应的数据缓 存队列中取出数据,并将取出的数据写入目标数据源;
或者,
所述第三缓存申请单元,用于当m=n时,申请m个数据缓存队列;所述第三 队列分配单元,用于将所述第三缓存申请单元申请的m个数据缓存队列分别分 配给每个读数据线程,并将所述第三缓存申请单元申请的m个数据缓存队列分 别分配给每个写数据线程;所述第三读数据单元,用于利用所述线程申请单元 申请的读数据线程,将读到的数据压入对应的数据缓存队列中;所述第三写数 据单元,用于利用所述线程申请单元申请的写数据线程,从对应的数据缓存队 列中取出数据,并将取出的数据写入目标数据源。
本发明实施例提供了数据读写方法及装置,申请m个读数据线程和n个写 数据线程;当m>n时,使m个读数据线程分别对应一个数据缓存队列,以便 将读到的数据压入对应队列中,而使n个写数据线程按照螺旋式从各个队列中 取数据并写入目标数据源;当m<n时,使n个写数据线程分别对应一个数据 缓存队列,以便从对应队列中取出数据并写入目标数据源,而使m个读数据线 程按照螺旋式将读到的数据压入各个队列中。本发明实施例借助多线程、多数 据缓存队列可有效提高数据处理效率,同时使用螺旋控制方法可有效利用系统 资源,在有限的硬件条件下,大幅度提高数据采集、处理效率,减少业务等待 时间。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上 述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式 来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡 献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储 介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备 (可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执 行本发明各个实施例或者实施例的某些部分所述的方法。
需要说明的是,对于实施例公开的装置而言,由于其与实施例公开的方 法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来 将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这 些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、 “包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列 要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列 出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。 在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在 包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本 发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见 的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在 其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而 是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
本文发布于:2023-04-14 05:35:08,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/86445.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |