掌桥专利:专业的专利平台
掌桥专利
首页

一种可迭代对象预加载的装置及方法

文献发布时间:2023-06-19 10:06:57


一种可迭代对象预加载的装置及方法

技术领域

本发明涉及可迭代对象技术领域,具体涉及一种可迭代对象预加载的装置及方法。

背景技术

可迭代对象常被用在循环程序语句(如for语句)中,程序中的数据主要存在于内存和磁盘当中,因此,可迭代对象也主要有两种存在形式,内存和硬盘。设有一个可迭代对象array,数组中的元素是item,表示成array[item,]。如果该可迭代对象存在于内存中,读取一个item,使用一个item,这样的操作是没有速度上的限制的,但速度上仍然可以有所提升,比如在使用当前item的时候,同时准备下一个item,这样就可以实现并行操作。但应该注意的是此操作会增加内存的使用。如果该可迭代对象存在于磁盘中,假设有一个很大的可迭代对象,可迭代对象中的每个元素item都很大,存在于磁盘中,则大数据量下,循环语句的使用会产生如下加载(io)和cpu问题:迭代可迭代对象时,对循环体内的item进行长时间的cpu操作,或者对item进行长时间的加载操作。

上述迭代操作本质是:第一步(加载任务),先从磁盘读取数据item;第二步(cpu任务/io任务),再对item进行长时间的cpu操作/io操作。

这个过程会出现两个问题:

问题1:可迭代对象很大,不能一次都读取到内存中,所以要读取一个数组元素,用一个,再读取下一个的时候,将上一个已经读取出来的可迭代对象元素删除(清空其所占用的内存,如果不清空,则会撑爆内存)。

问题2:如果可迭代对象中每个元素都很大,则读取会花费很长时间,这会导致花费很长时间读取到的元素(item)还要进行很长时间的cpu操作/io操作,即在循环操作当中,第一步(加载任务)先从磁盘读取数据item需要很长时间,第二步(cpu任务)对item进行长时间的cpu操作/io操作也要花费很长时间。

即存在内存和速度两方面的问题。

发明内容

本发明的目的是:为了解决上述问题,本发明提出一种可迭代对象预加载的装置及方法,可以解决内存和速度两方面的问题。

第一方面,本发明提供一种可迭代对象预加载的装置,用于加快所述可迭代对象的迭代速度,其特征在于,包括:参数模块、缓冲池模块、搬运器模块和加载器模块;

参数模块,用于接收装置使用者输入参数,接收所述缓冲池模块查询参数;所述参数包括缓冲池大小参数;

缓冲池模块,用于在内存中以队列结构存储可迭代对象的元素,并提供可阻塞的入队操作和出队操作用于将所述元素放入所述队列或从所述队列取出所述元素;所述可阻塞是指,如果本次入队操作会造成缓冲池使用量超过所述缓冲池大小参数的值则阻止或延迟本次操作;

搬运器模块,用于将可迭代对象中的元素逐个搬运到缓冲池中,所述搬运操作在独立线程或进程中执行;

加载器模块,用于接收装置使用者发出的yield指令从而启动所述搬运器模块,每次接收到装置使用者发出的read指令后从缓冲池模块中读取一个元素返回给装置使用者;所述yield指令供装置使用者指定要实施预加载的可迭代对象,所述read指令供装置使用者以迭代方式获取元素。

进一步的,所述缓冲池模块组合或继承Queue。

进一步的,所述搬运器模块执行搬运任务,将装置使用者输入的可迭代对象中的元素逐个搬运到缓冲池模块中。

进一步的,所述搬运器模块组合一个线程类,从而在独立线程或进程中启动搬运任务。

进一步的,所述加载器模块从缓冲池模块中读取可迭代对象的元素,并返回给装置使用者,实现了read方法,该方法返回可迭代对象的元素,装置使用者能够通过该方法获取可迭代对象的元素。

进一步的,所述搬运器模块取尽可迭代对象的元素后向缓冲池模块发送结束标识,所述加载器模块读取到所述标识后终止迭代并通知装置使用者。

第二方面,本发明实施例提供一种可迭代对象预加载的方法,其特征在于,包括以下步骤:

S1,初始化步骤:接受装置使用者发出的yield指令,启动搬运器模块;

S2,搬运器模块执行搬运任务,将装置使用者输入的可迭代对象中的元素逐个搬运到缓冲池模块中;

S3,加载器模块每次接收到装置使用者发出的read指令后从缓冲池模块中顺次读取一个元素,并提供给装置使用者使用。

进一步的,所述搬运器模块执行搬运任务,步骤如下:

S201:从可迭代对象中加载到一个元素,并进行预处理;

S202:在缓冲池模块允许的情况下,将元素放入缓冲池模块;

S203:重复步骤1-2,直到可迭代对象的元素取尽。

进一步的,所述搬运器模块搬运完所有可迭代对象的元素后向缓冲池模块发送结束标识,所述加载器模块读取到所述结束标识后终止迭代并通知装置使用者。

进一步的,所述加载器模块对外提供服务的整体流程如下:

用户将要被迭代的对象输入进加载器,并输入缓冲池大小参数,从而创建加载器实例;

在创建加载器实例过程中,创建搬运器实例,并在线程中开启搬运任务,将可迭代对象中的item搬运到缓冲池实例中。

本发明实施例提供的上述技术方案的有益效果至少包括:

(1)现有技术中没有类似的技术;

(2)操作简单;

(3)可以有效加速可迭代对象的迭代速度;

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明实施例公开的可迭代对象预加载的装置结构示意图;

图2为本发明实施例公开的可迭代对象预加载的方法的流程图;

图3为本发明实施例公开的终止迭代的原理示意图。

具体实施例

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

假设有如下条件:

设有一个阻塞队列Queue。

设内存充足,即缓存可实施。

如图1所示,本发明实施例提供可迭代对象预加载装置。可以加快该可迭代对象的迭代速度,所述装置包括:缓冲池、搬运器、加载器和参数模块。

缓冲池,用于在内存中存储元素,并提供入队和出队操作;

搬运器,用于将可迭代对象中的元素逐个搬运到缓冲池中;

加载器,用于从缓冲池中逐个读取元素。

参数模块,用于装置使用者输入参数。包括缓冲池大小参数。

如图2所示,本发明还提供一种可迭代对象预加载的方法,包括:

从参数模块中依据装置使用者输入的参数,初始化加载器的步骤;

从可迭代对象逐步读取元素,并送到缓冲池的步骤;

从缓冲池中读取元素,并提供给用户使用的步骤;

搬运器用于通知加载器搬运结束的步骤,如图3。

实施例一

设有一个可迭代对象。设队列Queue为阻塞队列,有入队出队方法,这里的入队出队方法是阻塞的。

设置缓冲池Pool,该类组合或继承Queue,并有自身的阻塞的入队出队方法:put和get。加载器通过缓冲池的get方法从缓冲池中获取元素。搬运器通过缓冲池的set方法将可迭代对象中的元素写入缓冲池。

设置一个搬运器Carrier,该类执行搬运任务,将装置使用者输入的可迭代对象中的元素逐个的搬运到缓冲池中。其搬运任务步骤如下:

第一步:从可迭代对象中加载到一个item,并进行一定的处理。

第二步:在缓冲池允许的情况下,将item放入缓冲池。

第三步:重复步骤1-2,直到可迭代对象取尽。

第四步:向队列/缓冲池发送结束标识,如图3。

另外,搬运器组合了一个线程类,可以在线程中启动搬运任务。

设置一个加载器Loader,该类从缓冲池中读取item,并返回给装置使用者,并且实现了read方法,该方法返回item,装置使用者可以通过该方法获取item。该类继承自可迭代基类,因此,是一个可迭代对象。其有读取任务如下:

第一步:在缓冲池允许的情况下,从缓冲池中取出item。

第二步:将item返回给装置使用者进行操作。

第三步:重复步骤1-2,直到获取到结束标识,如图3。

加载器对外提供服务的整体流程如下:

第一步:用户将要被迭代的对象输入进加载器,并输入缓冲池大小参数,从而创建加载器实例。

第二步:在创建加载器实例过程中,创建搬运器实例,并在线程中开启搬运任务,将可迭代对象中的item搬运到缓冲池实例中。

本发明提出的可迭代对象预加载的装置与方法,该方案有如下特性:异步非阻塞:第一步的加载任务和第二步的cpu任务是异步进行的。缓存:第一步加载时,能解决array[item,]无法整体存储到内存的问题。注意,虽然可以解决内存和速度两方面的问题,但引入了缓存,如果内存空间比较小,则无法有效使用缓存。

应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。

在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。

本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。

结合本文的实施例所描述的方法或者算法的步骤可直接体现为硬件、由处理器执行的软件模块或其组合。软件模块可以位于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动磁盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质连接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。该ASIC可以位于用户终端中。当然,处理器和存储介质也可以作为分立组件存在于用户终端中。

对于软件实现,本申请中描述的技术可用执行本申请所述功能的模块(例如,过程、函数等)来实现。这些软件代码可以存储在存储器单元并由处理器执行。存储器单元可以实现在处理器内,也可以实现在处理器外,在后一种情况下,它经由各种手段以通信方式耦合到处理器,这些都是本领域中所公知的。

上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

相关技术
  • 一种可迭代对象预加载的装置及方法
  • 一种web预加载页面的生成方法及装置
技术分类

06120112423099