CN110297719A - 一种基于队列传输数据的方法和系统 - Google Patents

一种基于队列传输数据的方法和系统 Download PDF

Info

Publication number
CN110297719A
CN110297719A CN201810244768.1A CN201810244768A CN110297719A CN 110297719 A CN110297719 A CN 110297719A CN 201810244768 A CN201810244768 A CN 201810244768A CN 110297719 A CN110297719 A CN 110297719A
Authority
CN
China
Prior art keywords
container
queue
data
written
write
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201810244768.1A
Other languages
English (en)
Inventor
石志光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201810244768.1A priority Critical patent/CN110297719A/zh
Publication of CN110297719A publication Critical patent/CN110297719A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于队列传输数据的方法和系统,涉及计算机技术领域。该方法的一具体实施方式包括:确认初始容器列表中没有空的容器,则从回转队列中获取空的容器;将数据写入所述容器,并将写入数据的容器写入传送队列;从所述传送队列中获取装有数据的容器,读取并清空该容器中的数据,并将清空的容器写入回转队列。本发明能够实现数据的批量传输,而且实现了容器的回收再利用。进而,可以避免每次写队列时都要创建新的容器,在面向对象语言中,还可以消除由此带来的垃圾回收对系统性能造成的影响。

Description

一种基于队列传输数据的方法和系统
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于队列传输数据的方法和系统。
背景技术
在处理数据的系统中,多采用队列来实现模块与模块之间传输数据时。其中,队列是一种先进先出线性表。图1是现有技术中传输数据的方法的示意图,如图1所示,模块A将数据写入队列中,模块B从该队列中读取数据,在该过程中,队列起到缓冲的作用,可从一定程度上来解决模块A与模块B处理数据速率的差异。具体的,模块A先获取队列的写入锁,则模块A根据该写入锁将数据写入到队列,每次可写入一条数据,也可通过容器每次写入一批数据。模块A写入数据成功后,释放队列的写入锁。模块B在读取数据的过程中,获取队列的读取锁,则模块B根据读取锁从队列中读取一条数据,或者根据读取锁从队列中获取装有数据的容器,读取或获取成功后,模块B释放读取锁。如果模块A通过容器将数据写入到队列中,则需要不断的产生新的容器。同时,模块B从队列中获取到容器,并将该容器中的数据读取后,直接将该容器进行作废处理。
现有技术在实施过程中,存在以下问题:如果每次写入/读取时只处理一条数据,则由于每次写入/读取时都要加锁,存在一定的性能损耗,而且对于数据批量处理的支持不友好;在队列不限制长度的情况下,如果写入速率大于读取速率,会导致队列中堆积的数据越来越多,容易造成内存泄露;如果通过容器实现数据的写入/读取,则需要不断的产生容器,以及对每个使用过的容器进行作废处理,会带来大量的内存消耗。
发明内容
有鉴于此,本发明实施例提供一种基于队列传输数据的方法和系统,能够通过传送队列存放装有数据的容器,通过回转队列存放空的容器,在从传送队列中获取容器后,读取该容器中的数据并清空,并且将清空的容器写入回转队列,不仅可以实现数据的批量传输,而且实现了容器的回收再利用。进而,可以避免每次写队列时都要创建新的容器,在面向对象语言中,还可以消除由此带来的垃圾回收对系统性能造成的影响。
为实现上述目的,根据本发明实施例的一个方面,提供了一种基于队列传输数据的方法。
本发明实施例的基于队列传输数据的方法包括:确认初始容器列表中没有空的容器,则从回转队列中获取空的容器;将数据写入所述容器,并将写入数据的容器写入传送队列;从所述传送队列中获取装有数据的容器,读取并清空该容器中的数据,并将清空的容器写入回转队列。
可选地,在从回转队列中获取空的容器之前,还包括:创建初始容器列表,所述初始容器列表中包括第一数量的空的容器;从所述初始容器列表中获取空的容器,直至确认初始容器列表中没有空的容器。
可选地,根据内存的大小设置所述第一数量和第二数量,所述第二数量为容器中存放数据的数量阈值。
可选地,将写入数据的容器写入传送队列的步骤包括:获取传送队列的写入锁;根据所述写入锁将写入数据的容器写入所述传送队列,并释放所述写入锁;
将清空的容器写入回转队列的步骤包括:获取回转队列的写入锁;根据所述写入锁将清空的容器写入所述回转队列,并释放所述写入锁。
为实现上述目的,根据本发明实施例的另一个方面,提供了一种基于队列传输数据的系统。
本发明实施例的基于队列传输数据的系统包括:包括传送队列、回转队列和写入模块、读取模块;所述写入模块用于,确认初始容器列表中没有空的容器,则从回转队列中获取空的容器;将数据写入所述容器,并将写入数据的容器写入传送队列;所述读取模块用于,从所述传送队列中获取装有数据的容器,读取并清空该容器中的数据,并将清空的容器写入回转队列。
可选地,还包括创建模块,用于创建初始容器列表,所述初始容器列表中包括第一数量的空的容器;从所述初始容器列表中获取空的容器,直至确认初始容器列表中没有空的容器。
可选地,所述创建模块还用于根据内存的大小设置所述第一数量和第二数量,所述第二数量为容器中存放数据的数量阈值。
可选地,所述写入模块还用于,将写入数据的容器写入传送队列的步骤包括:获取传送队列的写入锁;根据所述写入锁将写入数据的容器写入所述传送队列,并释放所述写入锁;所述读取模块还用于,将清空的容器写入回转队列的步骤包括:获取回转队列的写入锁;根据所述写入锁将清空的容器写入所述回转队列,并释放所述写入锁。
为实现上述目的,根据本发明实施例的再一个方面,提供了一种基于队列传输数据的电子设备。
本发明实施例的基于队列传输数据的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一项的基于队列传输数据的方法。
为实现上述目的,根据本发明实施例的再一个方面,提供了一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现上述任一项的基于队列传输数据的方法。
上述发明中的一个实施例具有如下优点或有益效果:能够通过传送队列存放装有数据的容器,通过回转队列存放空的容器,在从传送队列中获取容器后,读取该容器中的数据并清空,并且将清空的容器写入回转队列。则每次可以通过容器向队列中写入一批数据,便于数据的批量处理。同时,在写入/读出装有一批数据的容器时,只要执行一次队列的写入/读出操作,只需要加一次锁,大大降低现有方案中每条数据在写入/读出时都要加锁的消耗。而且,每个容器中写入数据的数量可以设置,总的容器的数量也可以根据内存进行设置。则本发明实施例不会造成数据在内存中过多的堆积,它具有自适应性,最多只会堆积N*X条数据,其中N表示容器总的个数,X表示每个容器中包含的数据个数。本发明实施例通过回转队列对容器进行回收以再利用,可以避免每次写队列时都要创建新的容器,在某些面向对象语言中,可以消除由此带来的垃圾回收对系统性能造成的影响,实现了数据的回转式传输。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是现有技术中传输数据的方法的示意图;
图2是根据本发明实施例的基于队列传输数据的方法的主要流程的示意图;
图3是根据本发明实施例的基于队列传输数据的方法的示意图;
图4是根据本发明实施例的写入数据的方法的示意图;
图5是根据本发明实施例的读取数据的方法的示意图;
图6是根据本发明实施例基于队列传输数据的装置系统的主要模块的示意图;
图7是本发明实施例可以应用于其中的示例性系统架构图;
图8是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图2是根据本发明实施例的基于队列传输数据的方法的主要流程的示意图,如图2所示,本发明实施例的基于队列传输数据的方法主要包括:
步骤S201:确认初始容器列表中没有空的容器,则从回转队列中获取空的容器;将数据写入容器,并将写入数据的容器写入传送队列。其中,容器为一种数据结构,可用于存放其他对象,可将这些对象组合在一起,每个容器中可存放一条以上的数据。回转队列用于存放空的容器。
在从回转队列中获取空的容器之前,创建初始容器列表,该初始容器列表中包括第一数量的空的容器;从初始容器列表中获取空的容器,直至确认初始容器列表中没有空的容器。而且,根可据内存的大小设置第一数量和第二数量,第二数量为容器中存放数据的数量阈值。现有技术中,如果通过容器进行数据的传输时,需要不断产生新的容器,由于可不断的产生新的容器,则不能对内存的中总的数据量进行控制。例如,在队列不限制长度的情况下,由于能不断的获取到空的容器以进行写入的数据,如果队列的写入速率大于读取速率,则会导致队列中堆积的数据越来越多,容易造成内存泄露。在本发明实施例中,可通过设置容器的数量来限制内存中总的数据量。如果在数据传输的过程中,容器的数量是固定的,每个容器中的可以装载的数据的数量也是有上限的,所以限制了内存中总的数据数量,也就限制了内存的占用量,进而避免了过多的内存消耗。
步骤S202:从传送队列中获取装有数据的容器,读取并清空该容器中的数据,并将清空的容器写入回转队列。将清空的容器写入回转队列中,进而在需要空的容器时,可直接在回转队列中直接获取。实现了容器的回收再利用,避免每次写队列时都要创建新的容器,并且消除了垃圾回收对系统性能造成的影响。
获取空容器的时候需要获取回转队列的写入锁,因为获取以后就会从队列中删除。将装有数据的容器写入传送队列时,会获取传送队列的写入锁,成功写入后,会释放该写入锁。传送队列和回转队列有各自的锁,它们两者互不影响。目前,大多数语言的类库中,都有现成的队列类库,直接使用库提供的队列方法就行,而锁是封装在这些库中的,应用程序就不用处理锁了,但是锁是性能的影响因素之一。
现有技术中,通过容器批量传输数据的话,需要不断的产生新的容器并对使用过的容器进行作废处理,导致内存过多的消耗;单条数据处理的话,则每次写入/读取时都要加锁,也存在一定的性能损耗。在本发明实施例中,在初始容器列表初始化指定数量的空容器,将该初始容器列表中的空容器写入数据后,则将装有数据的容器写入传送队列。读取出传送队列中容器的数据后,将该使用过的容器清空并写入回转队列,以便直接在该回转队列中获取空的容器。所以,本发明实施例通过回转队列实现对容器的回收和再利用,不仅可批量传输数据,还避免了垃圾回收对系统性能造成的影响。同时,在数据传输过程中,只需要初始化创建初始容器列表中指定数量的容器,不用不断的产生新的空容器,有利于提高系统性能。
图3是根据本发明实施例的基于队列传输数据的方法的示意图,如图3所示,在模块A与模块B之间有两个队列,传送队列和回转队列。传送队列用来将装有数据的容器从模块A发送到模块B,回转队列用来将空容器从模块B归还回模块A。按照模块A给模块B发送数据这个粒度来说,存在1个传送队列和1个回转队列,但是如果模块A给模块B和模块C都发送数据,那模块A和其他每个模块之间都会有1个传送队列和1个回转队列。
在初始容器列表中没有空的容器的情况下,模块A从回转队列中获取一个空的容器,则将一批数据装入该容器,然后将该容器写入传送队列。模块B从回转队列中获取一个装有数据的容器后,消费(读取)容器中的数据后清空该容器,将清空的容器写入回转队列,使得模块A可从该回转队列中获取空的容器,不仅实现了数据的批量传输,而且实现了容器的回收再利用。
图4是根据本发明实施例的写入数据的方法的示意图,如图4所示,本发明实施例的写入数据的方法包括:
步骤S401:判断初始容器列表中是否存在空的容器。如果是,则执行步骤S405,否则执行步骤S402。
在该步骤之前,初始化创建包括指定数量(假设为N个)的空容器的初始容器(比如Java语言中的集合java.util.Collection)列表。而且,该空的容器的数量N可根据内存的大小进行设置。创建初始容器列表后,在将数据写入队列时,首先从该初始容器列表中获取空的容器,将初始容器列表中空的容器全部都取出后,才获取回转队列中空的容器。
步骤S402:从回转队列中获取一个空的容器C。如果回转队列为空,即回转队列中不存在容器,则阻塞等待,直到回转队列中有空的容器为止。
步骤S403:向容器C中写入X条数据。获取到一个空的容器后,向该容器写入X条要发送的数据,其中,X的范围为大于等于1小于等于预设阈值。X的预设阈值可根据传输需求或者内存的大小进行设置,例如设置为100,或者设置为200,或者设置为5000等等,只要大于0就行。容器中装置的数据越多则需要的内存越多,所以一般如果内存比较大,该预设阈值就可以设置得大一些,如果内存比较少,该预设阈值可以设置得小一点。在将X条数据写入到容器C中时,可批量或者逐条写入容器。
步骤S404:将装有数据的容器C写入传送队列。此时,容器C中装载有一条或多条的数据,可进行数据的批量传输。
步骤S405:从初始容器列表中获取一个空的容器C。如果初始容器列表中还存在空的容器,则可获取从初始容器列表中获取一个空的容器,并执行上述步骤S403和步骤S404,直至初始容器列表中的容器读取完毕。
图5是根据本发明实施例的读取数据的方法的示意图,如图5所示,本发明实施例的读取数据的方法包括:
步骤S501:从传送队列中获取一个容器C。获取到的容器中装有X条的数据。如果传送队列为空,则阻塞等待,直到传送队列中有容器为止。
步骤S502:读取并消费容器C中的X条数据。在读取数据的过程中,可对X条数据批量或逐条读取,同时也可以同步或者异步处理。
步骤S503:清空容器C,并将该容器C写入回转队列。在清空该容器C的过程中,可一次性批量清空,也可逐条清空。
根据本发明实施例,能够通过传送队列存放装有数据的容器,通过回转队列存放空的容器,在从传送队列中获取容器后,读取该容器中的数据并清空,并且将清空的容器写入回转队列。则每次可以通过容器向队列中写入一批数据,便于数据的批量处理。同时,在写入/读出装有一批数据的容器时,只要执行一次队列的写入/读出操作,只需要加一次锁,大大降低现有方案中每条数据在写入/读出时都要加锁的消耗。而且,每个容器中写入数据的数量可以设置,总的容器的数量也可以根据内存进行设置。则本发明实施例不会造成数据在内存中过多的堆积,它具有自适应性,最多只会堆积N*X条数据,其中N表示容器总的个数,X表示每个容器中包含的数据个数。本发明实施例通过回转队列对容器进行回收以再利用,可以避免每次写队列时都要创建新的容器,在某些面向对象语言中,可以消除由此带来的垃圾回收对系统性能造成的影响,实现了数据的回转式传输。
图6是根据本发明实施例基于队列传输数据的装置系统的主要模块的示意图,如图6所示,本发明实施例基于队列传输数据的系统600包括传送队列601、回转队列602、写入模块603和读取模块604。
传送队列601用于存放装有数据的容器,回转队列602用于存放空的容器。
写入模块603用于,确认初始容器列表中没有空的容器,则从回转队列中获取空的容器;将数据写入容器,并将写入数据的容器写入传送队列。写入模块还用于,将写入数据的容器写入传送队列的步骤包括:获取传送队列的写入锁;根据写入锁将写入数据的容器写入传送队列,并释放写入锁。
读取模块604用于,从传送队列中获取装有数据的容器,读取并清空该容器中的数据,并将清空的容器写入回转队列。读取模块还用于,将清空的容器写入回转队列的步骤包括:获取回转队列的写入锁;根据写入锁将清空的容器写入回转队列,并释放写入锁。
本发明实施例基于队列传输数据的系统还包括创建模块,用于创建初始容器列表,初始容器列表中包括第一数量的空的容器;从初始容器列表中获取空的容器,直至确认初始容器列表中没有空的容器。创建模块还用于根据内存的大小设置第一数量和第二数量,第二数量为容器中存放数据的数量阈值。
根据本发明实施例,能够通过传送队列存放装有数据的容器,通过回转队列存放空的容器,在从传送队列中获取容器后,读取该容器中的数据并清空,并且将清空的容器写入回转队列。则每次可以通过容器向队列中写入一批数据,便于数据的批量处理。同时,在写入/读出装有一批数据的容器时,只要执行一次队列的写入/读出操作,只需要加一次锁,大大降低现有方案中每条数据在写入/读出时都要加锁的消耗。而且,每个容器中写入数据的数量可以设置,总的容器的数量也可以根据内存进行设置。则本发明实施例不会造成数据在内存中过多的堆积,它具有自适应性,最多只会堆积N*X条数据,其中N表示容器总的个数,X表示每个容器中包含的数据个数。本发明实施例通过回转队列对容器进行回收以再利用,可以避免每次写队列时都要创建新的容器,在某些面向对象语言中,可以消除由此带来的垃圾回收对系统性能造成的影响,实现了数据的回转式传输。
图7示出了可以应用本发明实施例的基于队列传输数据的方法或基于队列传输数据的系统的示例性系统架构700。
如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器705可以是提供各种服务的服务器,例如对用户利用终端设备701、702、703所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果反馈给终端设备。
需要说明的是,本发明实施例所提供的基于队列传输数据的方法一般由服务器705执行,相应地,基于队列传输数据的系统一般设置于服务器705中。
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图8,其示出了适于用来实现本发明实施例的终端设备的计算机系统800的结构示意图。图8示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括传送队列、回转队列、写入模块和读取模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,写入模块还可以被描述为“确认初始容器列表中没有空的容器,则从所述回转队列中获取空的容器;将数据写入所述容器,并将写入数据的容器写入所述传送队列的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:。
根据本发明实施例,能够通过传送队列存放装有数据的容器,通过回转队列存放空的容器,在从传送队列中获取容器后,读取该容器中的数据并清空,并且将清空的容器写入回转队列。则每次可以通过容器向队列中写入一批数据,便于数据的批量处理。同时,在写入/读出装有一批数据的容器时,只要执行一次队列的写入/读出操作,只需要加一次锁,大大降低现有方案中每条数据在写入/读出时都要加锁的消耗。而且,每个容器中写入数据的数量可以设置,总的容器的数量也可以根据内存进行设置。则本发明实施例不会造成数据在内存中过多的堆积,它具有自适应性,最多只会堆积N*X条数据,其中N表示容器总的个数,X表示每个容器中包含的数据个数。本发明实施例通过回转队列对容器进行回收以再利用,可以避免每次写队列时都要创建新的容器,在某些面向对象语言中,可以消除由此带来的垃圾回收对系统性能造成的影响,实现了数据的回转式传输。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种基于队列传输数据的方法,其特征在于,包括
确认初始容器列表中没有空的容器,则从回转队列中获取空的容器;将数据写入所述容器,并将写入数据的容器写入传送队列;
从所述传送队列中获取装有数据的容器,读取并清空该容器中的数据,并将清空的容器写入回转队列。
2.根据权利要求1所述的方法,其特征在于,在从回转队列中获取空的容器之前,还包括:
创建初始容器列表,所述初始容器列表中包括第一数量的空的容器;
从所述初始容器列表中获取空的容器,直至确认初始容器列表中没有空的容器。
3.根据权利要求2所述的方法,其特征在于,根据内存的大小设置所述第一数量和第二数量,所述第二数量为容器中存放数据的数量阈值。
4.根据权利要求1所述的方法,其特征在于,
将写入数据的容器写入传送队列的步骤包括:获取传送队列的写入锁;根据所述写入锁将写入数据的容器写入所述传送队列,并释放所述写入锁;
将清空的容器写入回转队列的步骤包括:获取回转队列的写入锁;根据所述写入锁将清空的容器写入所述回转队列,并释放所述写入锁。
5.一种基于队列传输数据的系统,其特征在于,包括传送队列、回转队列、写入模块和读取模块;
所述写入模块用于,确认初始容器列表中没有空的容器,则从回转队列中获取空的容器;将数据写入所述容器,并将写入数据的容器写入传送队列;
所述读取模块用于,从所述传送队列中获取装有数据的容器,读取并清空该容器中的数据,并将清空的容器写入回转队列。
6.根据权利要求5所述的系统,其特征在于,还包括创建模块,用于创建初始容器列表,所述初始容器列表中包括第一数量的空的容器;从所述初始容器列表中获取空的容器,直至确认初始容器列表中没有空的容器。
7.根据权利要求6所述的系统,其特征在于,所述创建模块还用于根据内存的大小设置所述第一数量和第二数量,所述第二数量为容器中存放数据的数量阈值。
8.根据权利要求5所述的系统,其特征在于,
所述写入模块还用于,将写入数据的容器写入传送队列的步骤包括:获取传送队列的写入锁;根据所述写入锁将写入数据的容器写入所述传送队列,并释放所述写入锁;
所述读取模块还用于,将清空的容器写入回转队列的步骤包括:获取回转队列的写入锁;根据所述写入锁将清空的容器写入所述回转队列,并释放所述写入锁。
9.一种基于队列传输数据的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-4中任一所述的方法。
CN201810244768.1A 2018-03-23 2018-03-23 一种基于队列传输数据的方法和系统 Pending CN110297719A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810244768.1A CN110297719A (zh) 2018-03-23 2018-03-23 一种基于队列传输数据的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810244768.1A CN110297719A (zh) 2018-03-23 2018-03-23 一种基于队列传输数据的方法和系统

Publications (1)

Publication Number Publication Date
CN110297719A true CN110297719A (zh) 2019-10-01

Family

ID=68025942

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810244768.1A Pending CN110297719A (zh) 2018-03-23 2018-03-23 一种基于队列传输数据的方法和系统

Country Status (1)

Country Link
CN (1) CN110297719A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407489A (zh) * 2021-06-18 2021-09-17 杭州安恒信息技术股份有限公司 一种数据导入方法、装置、设备及计算机可读存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6898650B1 (en) * 2000-08-10 2005-05-24 Novell, Inc. Queueing method supporting multiple client accesses simultaneously
CN102591936A (zh) * 2011-12-27 2012-07-18 四川九洲电器集团有限责任公司 一种播放器数据处理方法
CN102761489A (zh) * 2012-07-17 2012-10-31 中国科学技术大学苏州研究院 基于流水线模式的数据包零拷贝的核间通信方法
CN103154912A (zh) * 2010-08-31 2013-06-12 甲骨文国际公司 用于插入缓存块的方法和系统
CN104348805A (zh) * 2013-07-31 2015-02-11 南京中兴力维软件有限公司 异步文件传输方法、装置及其系统
CN106502802A (zh) * 2016-10-12 2017-03-15 山东浪潮云服务信息科技有限公司 一种基于Avro RPC传输的分布式云端并发采集方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6898650B1 (en) * 2000-08-10 2005-05-24 Novell, Inc. Queueing method supporting multiple client accesses simultaneously
CN103154912A (zh) * 2010-08-31 2013-06-12 甲骨文国际公司 用于插入缓存块的方法和系统
CN102591936A (zh) * 2011-12-27 2012-07-18 四川九洲电器集团有限责任公司 一种播放器数据处理方法
CN102761489A (zh) * 2012-07-17 2012-10-31 中国科学技术大学苏州研究院 基于流水线模式的数据包零拷贝的核间通信方法
CN104348805A (zh) * 2013-07-31 2015-02-11 南京中兴力维软件有限公司 异步文件传输方法、装置及其系统
CN106502802A (zh) * 2016-10-12 2017-03-15 山东浪潮云服务信息科技有限公司 一种基于Avro RPC传输的分布式云端并发采集方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407489A (zh) * 2021-06-18 2021-09-17 杭州安恒信息技术股份有限公司 一种数据导入方法、装置、设备及计算机可读存储介质

Similar Documents

Publication Publication Date Title
CN108874513A (zh) 处理定时任务的方法、系统、电子设备和计算机可读介质
CN110245011A (zh) 一种任务调度方法和装置
CN110019125A (zh) 数据库管理的方法和装置
CN110427304A (zh) 用于银行系统的运维方法、装置、电子设备以及介质
CN108846753A (zh) 用于处理数据的方法和装置
CN110019503A (zh) Redis集群的扩容和/或缩容的方法及装置
CN110473036A (zh) 一种生成订单号的方法和装置
CN109995801A (zh) 一种消息传输方法和装置
CN109981322A (zh) 基于标签的云资源管理的方法和装置
CN110135770A (zh) 出库方案的生成方法和装置
CN108874828A (zh) 数据迁移的方法和装置
CN109981719A (zh) 信息处理方法及其系统、计算机系统和计算机可读介质
CN110162410A (zh) 一种消息处理方法和装置
CN110399187A (zh) 一种语言资源的处理方法和装置
CN109960212A (zh) 任务发送方法和装置
CN109697019A (zh) 基于fat文件系统的数据写入的方法和系统
CN109992495A (zh) 接口测试的方法和装置
CN108959294A (zh) 一种访问搜索引擎的方法和装置
CN110472190A (zh) 填充有序序列的方法和装置
CN108845864A (zh) 一种基于spring框架的JVM垃圾回收方法和装置
CN110297719A (zh) 一种基于队列传输数据的方法和系统
CN110220549A (zh) 一种垛型评估的方法和装置
CN112184095A (zh) 一种寄件方法和装置
CN109087097A (zh) 一种更新链码同一标识的方法和装置
CN109885690A (zh) 一种数据变化的侦测方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination