CN105045632A - 一种多核环境下实现免锁队列的方法和设备 - Google Patents

一种多核环境下实现免锁队列的方法和设备 Download PDF

Info

Publication number
CN105045632A
CN105045632A CN201510486082.XA CN201510486082A CN105045632A CN 105045632 A CN105045632 A CN 105045632A CN 201510486082 A CN201510486082 A CN 201510486082A CN 105045632 A CN105045632 A CN 105045632A
Authority
CN
China
Prior art keywords
subqueue
producer
consumer
pointer
head pointer
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
CN201510486082.XA
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.)
Comba Telecom Technology Guangzhou Ltd
Comba Telecom Systems Guangzhou Co Ltd
Tianjin Comba Telecom Systems Co Ltd
Comba Network Systems Co Ltd
Original Assignee
Comba Telecom Technology Guangzhou 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 Comba Telecom Technology Guangzhou Ltd filed Critical Comba Telecom Technology Guangzhou Ltd
Priority to CN201510486082.XA priority Critical patent/CN105045632A/zh
Publication of CN105045632A publication Critical patent/CN105045632A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种多核环境下实现免锁队列的方法和设备,以解决当出现并发访问冲突时由于空等待导致系统效率低的问题。该方法为,确定一个环形队列,该环形队列包括生产者子队列和消费者子队列;当生产者有M个数据入队时,确定该环形队列未满时,将生产者子队列初始头指针加M作为新的生产者子队列头指针,从该生产者子队列初始头指针开始依次将M个数据加入到该环形队列中;当消费者有N个数据出队时,确定该环形队列未空时,将该消费者子队列初始头指针加N作为新的消费者子队列的头指针,从该消费者子队列初始头指针开始依次将N个数据从该环形队列中清除,这样解决了多生产者或多消费者并发访问时的冲突,减少空等待的时间,提高系统效率。

Description

一种多核环境下实现免锁队列的方法和设备
技术领域
本发明涉及数据处理领域,尤其涉及一种多核环境下实现免锁队列的方法和设备。
背景技术
在数据处理领域,队列是一种常见的数据结构,队列通常是多个应用模块间保存共享数据的一种方式,典型的队列是先入先出(FirstInputFirstOutput,FIFO)队列,其应用模式通常是,一个应用模块把数据保存到队列的一端中(通常可以称这种产生数据的模块为生产者),而另一个应用模块在队列的另一端把数据按照先后顺序从队列中取出(通常可以称这种取数据的模块为消费者)。
简单的单生产者单消费者FIFO队列模型中,生产者把生产出来的数据存入队列尾中,而消费者则从队列头中取出数据,生产者和消费者各司其职,不存在并发访问,所以没有资源竞争的冲突。
而在有多个应用模块同时共享一个队列时,就可能出现以下另外三种情形:多生产者单消费者、单生产者多消费者和多生产者和多消费者。这就导致了可能出现多个生产者或者多个消费者同时对队列进行访问的情况(通常称为并发访问),这种情况下,如果没有很好的解决并发访问时的冲突问题,就会导致数据错误。在计算机软件领域中,通过采用锁机制来解决并发访问时的冲突问题。
锁机制的原理如下:当某个模块要对队列进行访问时,先要取得队列的锁,把队列占为己有,然后才对队列进行相应的读写访问;当队列的锁被某个模块取得时,其它模块无权对队列进行访问。
这种运用锁机制把队列独占的机制,当出现并发冲突时,没有取得队列锁的模块可能需要一直空等待而无法执行其它操作(当其它操作必需要访问队列之后才能执行)。这在单核中央处理器(CentralProcessingUnit,CPU)的系统中,不会存在浪费CPU资源的问题。
然而,在多核CPU系统中,假如每个CPU核运行一个单独的应用模块,那么,当出现并发访问冲突时,等待获取队列锁的CPU核则会出现空等待而导致CPU资源浪费的情况,进而导致系统效率低下的问题。
发明内容
本发明的目的是提供一种多核环境下实现免锁队列的方法和设备,以解决当出现并发访问冲突多核CPU在获取共享队列锁时由于空等待导致系统效率低的问题。
本发明的目的是通过以下技术方案实现的:
一种多核环境下实现免锁队列的方法,包括:
确定一个环形队列,所述环形队列的存储结构采用数组形式存储,所述环形队列包括生产者子队列和消费者子队列;
当生产者有M个数据入队时,获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针,从所述生产者子队列初始头指针开始依次将M个数据加入到所述环形队列中,获取所述生产者子队列的尾指针作为生产者子队列初始尾指针,确定所述生产者子队列初始尾指针等于所述生产者子队列初始头指针时,将所述生产者子队列初始尾指针加M作为新的生产者子队列尾指针,入队完成,其中M为正整数;
当消费者有N个数据出队时,获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针,从所述消费者子队列初始头指针开始依次将N个数据从所述环形队列中清除,获取所述消费者子队列的尾指针作为消费者子队列初始尾指针,确定所述消费者子队列初始尾指针等于所述消费者子队列初始头指针时,将所述消费者子队列初始尾指针加N作为新的消费者子队列尾指针,出队完成,其中N为正整数。
这样,在多核环境下实现免锁队列的过程中在队列的入队和出队操作中,没有使用队列锁的机制独占队列,而是让多个模块同时访问队列的不同部分,从而有效解决了多生产者或多消费者并发访问时的冲突,减少了CPU核空等待的时间,进而提高了多核系统的效率。
可选的,所述生产者子队列与所述消费者子队列均可以占据所述环形队列的任何存储空间,且针对所述生产者子队列和所述消费者子队列的操作方向相同。
可选的,进一步包括:
在系统初始化阶段,将所述生产者子队列的头指针、所述生产者子队列的尾指针、所述消费者子队列的头指针和所述消费者子队列的尾指针均设置为所述环形队列对应的数组结构的第一个元素。
可选的,确定所述环形队列未满,具体包括:
当生产者有M个数据入队时,判断所述消费者子队列第一尾指针是否等于所述生产者子队列初始头指针加1,若是,则判定所述环形队列已满,不能执行生产者的入队操作;否则,判定所述环形队列未满,继续执行生产者的入队操作。
可选的,当生产者有M个数据入队时,在确定所述环形队列未满之后,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针之前,进一步包括:
获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,再次获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,执行后续操作。
可选的,确定所述环形队列未空,具体包括:
当消费者有N个数据出队时,判断当前生产者子队列的尾指针是否等于所述消费者子队列初始头指针,若是,则判定所述环形队列已空,不能执行消费者的出队操作;否则,判定所述环形队列未空,继续执行消费者的出队操作。
可选的,当消费者有N个数据出队时,确定所述环形队列未空之后,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针之前,进一步包括:
获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,再次获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,执行后续操作。
一种多核环境下实现免锁队列的设备,包括:
确定单元,用于确定一个环形队列,所述环形队列的存储结构采用数组形式存储,所述环形队列包括生产者子队列和消费者子队列;
第一处理单元,用于当生产者有M个数据入队时,获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针,从所述生产者子队列初始头指针开始依次将M个数据加入到所述环形队列中,获取所述生产者子队列的尾指针作为生产者子队列初始尾指针,确定所述生产者子队列初始尾指针等于所述生产者子队列初始头指针时,将所述生产者子队列初始尾指针加M作为新的生产者子队列尾指针,入队完成,其中M为正整数;
第二处理单元,用于当消费者有N个数据出队时,获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针,从所述消费者子队列初始头指针开始依次将N个数据从所述环形队列中清除,获取所述消费者子队列的尾指针作为消费者子队列初始尾指针,确定所述消费者子队列初始尾指针等于所述消费者子队列初始头指针时,将所述消费者子队列初始尾指针加N作为新的消费者子队列尾指针,出队完成,其中N为正整数。
这样,在多核环境下实现免锁队列的过程中在队列的入队和出队操作中,没有使用队列锁的机制独占队列,而是让多个模块同时访问队列的不同部分,从而有效解决了多生产者或多消费者并发访问时的冲突,减少了CPU核空等待的时间,进而提高了多核系统的效率。
可选的,所述生产者子队列与所述消费者子队列均可以占据所述环形队列的任何存储空间,且针对所述生产者子队列和所述消费者子队列的操作方向相同。
可选的,所述确定单元进一步用于:
在系统初始化阶段,将所述生产者子队列的头指针、所述生产者子队列的尾指针、所述消费者子队列的头指针和所述消费者子队列的尾指针均设置为所述环形队列对应的数组结构的第一个元素。
可选的,确定所述环形队列未满时,所述第一处理单元具体用于:
当生产者有M个数据入队时,判断所述消费者子队列第一尾指针是否等于所述生产者子队列初始头指针加8,若是,则判定所述环形队列已满,不能执行生产者的入队操作;否则,判定所述环形队列未满,继续执行生产者的入队操作。
可选的,当生产者有M个数据入队时,在确定所述环形队列未满之后,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针之前,所述第一处理单元进一步用于:
获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,再次获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,执行后续操作。
可选的,确定所述环形队列未空时,所述第二处理单元具体用于:
当消费者有N个数据出队时,判断当前生产者子队列的尾指针是否等于所述消费者子队列初始头指针,若是,则判定所述环形队列已空,不能执行消费者的出队操作;否则,判定所述环形队列未空,继续执行消费者的出队操作。
可选的,当消费者有N个数据出队时,确定所述环形队列未空之后,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针之前,所述第二处理单元进一步用于:
获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,再次获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,执行后续操作。
附图说明
图1为本发明实施例中多核环境下实现免锁队列的方法流程示意图;
图2为本发明实施例中环形队列的存储结构示意图;
图3为本发明实施例中多核环境下生产者入队流程示意图;
图4为本发明实施例中多核环境下消费者出队流程示意图;
图5为本发明实施例中多核环境下实现免锁队列的设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例实现免锁队列的方法中基于三个组成部分:环形数组结构区、生产者子队列、消费者子队列,其中,环形数组结构区(即环形缓冲区)由多个数据单元组成,用于保存共享数据单元的起始地址;生产者子队列包括生产者子队列头指针和尾指针,用于标识生产者正在操作的环形数组的某个区间;消费者子队列包括消费者子队列头指针和尾指针,用于标识消费者正在操作的环形数组的某个区间。当生产者需要往环形缓冲区中存放N个数据单元时,先用生产者子队列头指针加上需要存放数据的单元量N,得到新的生产者子队列头指针,然后生产者从原生产者子队列的头指针开始向环形缓冲区中依次存入数据单元,直到所有要存入的数据单元都入队后,用原始生产者尾指针加上所生产的数据量N得到新的生产者尾指针,完成数据单元入队操作;当有消费者需要取M个单元数据时,先把原消费者子队列头指针加上M得到新的消费者子队列头指针,然后从原消费者子队列头部指针所指的队列单元开始,依次取出数据,直到完成M个数据单元的读取,最后把消费者子队列尾指针加上所消费的数量M得到新的消费者子队列尾指针。
具体的,参阅图1所示,本发明实施例提供一种多核环境下实现免锁队列的方法,具体过程如下所示:
步骤100:确定一个环形队列,该环形队列的存储结构采用数组形式存储,该环形队列包括生产者子队列和消费者子队列。
其中,该生产者子队列与该消费者子队列均可以占据该环形队列的任何存储空间,且针对该生产者子队列和该消费者子队列的操作方向相同。
例如,参阅图2所示,设计一个数组做为环形队列的存储结构,数组的元素用于保存存储信息的起始地址;设计一个生产者子队列对象,生产者子队列对象标识当前环形队列中正在被生产者存入数据的某段子队列(在此暂称其为生产者子队列),通常位于环形队列的头部。该生产者子队列对象由两个域组成,分别是生产者子队列头指针域(producer.head)和生产者子队列尾指针域(producer.tail),生产者子队列头指针域标识生产者子队列头部在环形队列中的位置,而生产者子队列尾指针域标识生产者子队列尾部在环形队列的位置。设计一个消费者子队列对象,消费者子队列对象标识当前环形队列中正在被消费者读取数据的某段子队列(在此暂称其为消费者子队列),通常位于环形队列的尾部。该消费者子队列对象由两个域组成,分别是消费者子队列头指针域(consumer.head)和消费者子队列尾指针域(consumer.tail),消费者子队列头指针域标识消费者子队列头部在环形队列中的位置,而消费者子队列尾指针域标识消费者子队列尾部在环形队列的位置。
具体的,在系统初始化阶段,该生产者子队列的头指针、该生产者子队列的尾指针、该消费者子队列的头指针和该消费者子队列的尾指针均设置为该环形队列对应的数组结构的第一个元素。
由此可以看出,当系统中没有生产者正在向环形队列生产数据时,生产者子队列头指针域和生产者子队列尾指针域是一样的,它们共同指向环形队列的头部;当系统中没有消费者正在从环形队列中取数据时,消费者子队列头指针域和消费者子队列尾指针域也是一样的,它们共同指向环形队列的尾部。
步骤101:当生产者有M个数据入队时,获取生产者子队列的头指针作为生产者子队列初始头指针,获取消费者子队列的尾指针作为消费者子队列第一尾指针,基于该生产者子队列初始头指针和该消费者子队列第一尾指针,确定该环形队列未满时,将该生产者子队列初始头指针加M作为新的生产者子队列头指针,从该生产者子队列初始头指针开始依次将M个数据加入到该环形队列中,获取该生产者子队列的尾指针作为生产者子队列初始尾指针,确定该生产者子队列初始尾指针等于该生产者子队列初始头指针时,将该生产者子队列初始尾指针加M作为新的生产者子队列尾指针,入队完成,其中M为正整数。
需要说明的是,当环形队列未满时,生产者才能向环形队列存数据,当环形队列已满时,生产者不能向环形队列存数据,因此,当生产者有M个数据入队时,判断该消费者子队列第一尾指针是否等于该生产者子队列初始头指针加1,若是,则判定该环形队列已满,不能执行生产者的入队操作;否则,判定该环形队列未满,继续执行生产者的入队操作。
进一步的,当生产者有M个数据入队时,在确定该环形队列未满之后,将该生产者子队列初始头指针加M作为新的生产者子队列头指针之前,还要对生产者子队列头指针进行比较赋值的原子操作,具体过称为:获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于该生产者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取该生产者子队列的头指针作为生产者子队列初始头指针,获取该消费者子队列的尾指针作为消费者子队列第一尾指针,基于该生产者子队列初始头指针和该消费者子队列第一尾指针,确定该环形队列未满时,再次获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于该生产者子队列初始头指针,执行后续操作。
这样做的目的是能够进一步确保对该生产者子队列进行操作之前,第一次记录的生产者子队列头指针没有发生任何变化是准确的,若发生变化说明有其他生产者对生产者子队列的头指针进行了改变,为保证程序的准确性需要再次对生产者子队列头指针进行比较赋值的原子操作,直到对生产者子队列头指针进行比较赋值的原子操作成功时,才会继续后续的入队操作。
步骤102:当消费者有N个数据出队时,获取消费者子队列的头指针作为消费者子队列初始头指针,获取生产者子队列的尾指针作为生产者子队列第一尾指针,基于该消费者子队列初始头指针和该生产者子队列第一尾指针,确定该环形队列未空时,将该消费者子队列初始头指针加N作为新的消费者子队列的头指针,从该消费者子队列初始头指针开始依次将N个数据从该环形队列中清除,获取该消费者子队列的尾指针作为消费者子队列初始尾指针,确定该消费者子队列初始尾指针等于该消费者子队列初始头指针时,将该消费者子队列初始尾指针加N作为新的消费者子队列尾指针,出队完成,其中N为正整数。
需要说明的是,当环形队列未空时,消费者才能从环形队列中读取数据,当环形队列已空时,消费者不能从环形队列中读取数据,因此,当消费者有N个数据出队时,判断当前生产者子队列的尾指针是否等于该消费者子队列初始头指针,若是,则判定该环形队列已空,不能执行消费者的出队操作;否则,判定该环形队列未空,继续执行消费者的出队操作。
进一步的,当消费者有N个数据出队时,确定该环形队列未空之后,将该消费者子队列初始头指针加N作为新的消费者子队列的头指针之前,还要对消费者子队列头指针进行比较赋值的原子操作,具体过称为:获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于该消费者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取该消费者子队列的头指针作为消费者子队列初始头指针,获取该生产者子队列的尾指针作为生产者子队列第一尾指针,基于该消费者子队列初始头指针和该生产者子队列第一尾指针,确定该环形队列未空时,再次获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于该消费者子队列初始头指针,执行后续操作。
这样做的目的是能够进一步确保对该消费者子队列进行操作之前,第一次记录的消费者子队列头指针没有发生任何变化是准确的,若发生变化说明有其他消费者对生产者子队列的头指针进行了改变,为保证程序的准确性需要再次对消费者子队列头指针进行比较赋值的原子操作,直到对消费者子队列头指针进行比较赋值的原子操作成功时,才会继续后续的出队操作。
下面以图3为例来具体说明本发明实施例中的生产者入队流程,具体步骤如下所示,其中生产者子队列的头指针用producer.head表示,生产者子队列的尾指针用producer.tail表示,消费者子队列的尾指针用consumer.tail表示。
步骤30:读出此时生产者子队列的头指针和消费者子队列的尾指针并分别记录为producer_head、consumer_tail。
步骤31:判断环形队列是否已满,即判断当前的producer.head+1是否等于consumer.tail,若是,则表示环形队列已满,直接退出加入流程;否则,执行步骤32。
步骤32:对producer.head进行比较的原子操作,该操作先读取producer.head的值,再比较producer.head的值是否等于步骤30中记录的producer_head值,如果不等,则返回步骤30;如果相等,则执行步骤33。
步骤33:对producer.head进行赋值。把(producer_head+N)的值赋给producer.head(这里的N指将要产生的数据的个数),进入下一步。
步骤34:从producer_head指定的环形队列的位置开始,依次把N个数据插入到队列中。此时,相当于为生产者分配了一个长度为N的生产者子队列,于是,生产者可以安全的向生产者子队列生产数据,生产者把数据的起始地址保存到生产者子队列中。如果同时生产N个数据,则分别把N个数据的起始地址保存到长度为N的生产者子队列中,然后进入下一步。
步骤35:判断生产者子队列的尾指针producer.tail是否等于producer_head,如果不等,说明在本生产者之前,还有其它生产者在向队列生产数据,则需要等待前面所有生产者生产完数据后,即确定两者相等时,才能进入下一步操作;如果相等,说明前面生产者已经完成生产工作,本生产者可以进入下一步操作。
步骤36:把producer_head+N的值赋给producer.tail。
从上述描述过程可以看出,当同时有多个生产者时,每个生产者各自从环形队列的空闲部分中预留出一定的长度的子队列(长度就是要入队的数据的个数),然后每个生产者各自操作自已预留的那部分子队列,互不干扰,从而可以同时操作环形队列,达到多个生产者并发向环形队列保存数据的效果。
基于相同原理,消费者从环形队列取数据的流程如图4所示,具体步骤如下所示,其中消费者子队列的头指针用consumer.head表示,消费者子队列的尾指针用consumer.tail表示,生产者子队列的尾指针用producer.tail表示。
步骤40:读出此时消费者子队列的头指针和生产者子队列的尾指针并分别记录为consumer_head、producer_tail。
步骤41:判断环形队列是否为空,即判断当前的producer.head是否等于consumer.tail,若是,则表示环形队列为空则不能进入下一步操作,直接退出取数据流程;否则,执行步骤42。
步骤42:对consumer.head进行比较的原子操作,该操作先读取consumer.head的值,再比较consumer.head的值是否等于步骤40中记录的consumer_head值,如果不等,则返回步骤40;如果相等,则执行步骤43。
步骤43:对consumer.head进行赋值。把(consumer_head+N)的值赋给consumer.head(这里的N指将要取出的数据的个数),进入下一步。
步骤44:从consumer_head指定的环形队列的位置开始,依次把N个数据从环形队列中取出。此时,相当于为消费者分配了一个长度为N的消费者子队列,于是,消费者可以安全的从消费者子队列读取数据,消费者从消费者子队列中把数据的起始地址读出来,并用该起始地址去读取共享数据。如果同时有N个数据要读取,则分别把N个数据的起始地址读出,然后进入下一步。
步骤45:判断消费者子队列的尾指针consumer.tail是否等于consumer_head,如果不等,说明在本消费者之前,还有其它消费者在从环形队列中读取数据,则需要等待前面所有消费者读取完所有数据后,即确定两者相等时,才能进入下一步操作;如果相等,说明前面的消费者已经完成读取工作,本消费者可以进入下一步操作。
步骤46:把consumer_head+N的值赋给consumer.tail。
从上述描述过程可以看出,当同时有多个消费者时,每个消费者各自从环形队列的已存数据部分中预留出一定长度的子队列(长度就是要出队的数据的个数),然后每个消费者各自操作自已预留的那部分子队列,互不干扰,从而可以同时操作环形队列,达到多个消费者并发从环形队列读取数据的效果。
以上生产者和消费者的行为可以看出,只有在移动子队列的头指针域和尾指针域的时候,才存在竞争等待,而在向队列存数据和从队列取数据的过程中,可以并发访问,不存在等待,从而大大减少了竞争等待时间,达到提高多核系统效率的目的。
基于上述方法实施例,如图5所示,本发明实施例中提供一种多核环境下实现免锁队列的设备,包括:确定单元50、第一处理单元51和第二处理单元52,其中:
确定单元50,用于确定一个环形队列,所述环形队列的存储结构采用数组形式存储,所述环形队列包括生产者子队列和消费者子队列;
第一处理单元51,用于当生产者有M个数据入队时,获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针,从所述生产者子队列初始头指针开始依次将M个数据加入到所述环形队列中,获取所述生产者子队列的尾指针作为生产者子队列初始尾指针,确定所述生产者子队列初始尾指针等于所述生产者子队列初始头指针时,将所述生产者子队列初始尾指针加M作为新的生产者子队列尾指针,入队完成,其中M为正整数;
第二处理单元52,用于当消费者有N个数据出队时,获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针,从所述消费者子队列初始头指针开始依次将N个数据从所述环形队列中清除,获取所述消费者子队列的尾指针作为消费者子队列初始尾指针,确定所述消费者子队列初始尾指针等于所述消费者子队列初始头指针时,将所述消费者子队列初始尾指针加N作为新的消费者子队列尾指针,出队完成,其中N为正整数。
可选的,所述生产者子队列与所述消费者子队列均可以占据所述环形队列的任何存储空间,且针对所述生产者子队列和所述消费者子队列的操作方向相同。
可选的,所述确定单元50进一步用于:
在系统初始化阶段,将所述生产者子队列的头指针、所述生产者子队列的尾指针、所述消费者子队列的头指针和所述消费者子队列的尾指针均设置为所述环形队列对应的数组结构的第一个元素。
可选的,确定所述环形队列未满时,所述第一处理单元51具体用于:
当生产者有M个数据入队时,判断所述消费者子队列第一尾指针是否等于所述生产者子队列初始头指针加8,若是,则判定所述环形队列已满,不能执行生产者的入队操作;否则,判定所述环形队列未满,继续执行生产者的入队操作。
可选的,当生产者有M个数据入队时,在确定所述环形队列未满之后,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针之前,所述第一处理单元51进一步用于:
获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,再次获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,执行后续操作。
可选的,确定所述环形队列未空时,所述第二处理单元52具体用于:
当消费者有N个数据出队时,判断当前生产者子队列的尾指针是否等于所述消费者子队列初始头指针,若是,则判定所述环形队列已空,不能执行消费者的出队操作;否则,判定所述环形队列未空,继续执行消费者的出队操作。
可选的,当消费者有N个数据出队时,确定所述环形队列未空之后,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针之前,所述第二处理单元52进一步用于:
获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,再次获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,执行后续操作。
综上所述,本发明实施例多核环境下实现免锁队列的方法中在队列的入队和出队操作中,没有使用队列锁的机制独占队列,而是让多个模块同时访问队列的不同部分,从而有效解决了多生产者或多消费者并发访问时的冲突,减少了CPU核空等待的时间,进而提高了多核系统的效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (14)

1.一种多核环境下实现免锁队列的方法,其特征在于,包括:
确定一个环形队列,所述环形队列的存储结构采用数组形式存储,所述环形队列包括生产者子队列和消费者子队列;
当生产者有M个数据入队时,获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针,从所述生产者子队列初始头指针开始依次将M个数据加入到所述环形队列中,获取所述生产者子队列的尾指针作为生产者子队列初始尾指针,确定所述生产者子队列初始尾指针等于所述生产者子队列初始头指针时,将所述生产者子队列初始尾指针加M作为新的生产者子队列尾指针,入队完成,其中M为正整数;
当消费者有N个数据出队时,获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针,从所述消费者子队列初始头指针开始依次将N个数据从所述环形队列中清除,获取所述消费者子队列的尾指针作为消费者子队列初始尾指针,确定所述消费者子队列初始尾指针等于所述消费者子队列初始头指针时,将所述消费者子队列初始尾指针加N作为新的消费者子队列尾指针,出队完成,其中N为正整数。
2.如权利要求1所述的方法,其特征在于,所述生产者子队列与所述消费者子队列均可以占据所述环形队列的任何存储空间,且针对所述生产者子队列和所述消费者子队列的操作方向相同。
3.如权利要求1所述的方法,其特征在于,进一步包括:
在系统初始化阶段,将所述生产者子队列的头指针、所述生产者子队列的尾指针、所述消费者子队列的头指针和所述消费者子队列的尾指针均设置为所述环形队列对应的数组结构的第一个元素。
4.如权利要求1所述的方法,其特征在于,确定所述环形队列未满,具体包括:
当生产者有M个数据入队时,判断所述消费者子队列第一尾指针是否等于所述生产者子队列初始头指针加1,若是,则判定所述环形队列已满,不能执行生产者的入队操作;否则,判定所述环形队列未满,继续执行生产者的入队操作。
5.如权利要求1-4任一项所述的方法,其特征在于,当生产者有M个数据入队时,在确定所述环形队列未满之后,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针之前,进一步包括:
获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,再次获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,执行后续操作。
6.如权利要求1所述的方法,其特征在于,确定所述环形队列未空,具体包括:
当消费者有N个数据出队时,判断当前生产者子队列的尾指针是否等于所述消费者子队列初始头指针,若是,则判定所述环形队列已空,不能执行消费者的出队操作;否则,判定所述环形队列未空,继续执行消费者的出队操作。
7.如权利要求1、2、3或6所述的方法,其特征在于,当消费者有N个数据出队时,确定所述环形队列未空之后,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针之前,进一步包括:
获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,再次获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,执行后续操作。
8.一种多核环境下实现免锁队列的设备,其特征在于,包括:
确定单元,用于确定一个环形队列,所述环形队列的存储结构采用数组形式存储,所述环形队列包括生产者子队列和消费者子队列;
第一处理单元,用于当生产者有M个数据入队时,获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针,从所述生产者子队列初始头指针开始依次将M个数据加入到所述环形队列中,获取所述生产者子队列的尾指针作为生产者子队列初始尾指针,确定所述生产者子队列初始尾指针等于所述生产者子队列初始头指针时,将所述生产者子队列初始尾指针加M作为新的生产者子队列尾指针,入队完成,其中M为正整数;
第二处理单元,用于当消费者有N个数据出队时,获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针,从所述消费者子队列初始头指针开始依次将N个数据从所述环形队列中清除,获取所述消费者子队列的尾指针作为消费者子队列初始尾指针,确定所述消费者子队列初始尾指针等于所述消费者子队列初始头指针时,将所述消费者子队列初始尾指针加N作为新的消费者子队列尾指针,出队完成,其中N为正整数。
9.如权利要求8所述的设备,其特征在于,所述生产者子队列与所述消费者子队列均可以占据所述环形队列的任何存储空间,且针对所述生产者子队列和所述消费者子队列的操作方向相同。
10.如权利要求8所述的设备,其特征在于,所述确定单元进一步用于:
在系统初始化阶段,将所述生产者子队列的头指针、所述生产者子队列的尾指针、所述消费者子队列的头指针和所述消费者子队列的尾指针均设置为所述环形队列对应的数组结构的第一个元素。
11.如权利要求8所述的设备,其特征在于,确定所述环形队列未满时,所述第一处理单元具体用于:
当生产者有M个数据入队时,判断所述消费者子队列第一尾指针是否等于所述生产者子队列初始头指针加8,若是,则判定所述环形队列已满,不能执行生产者的入队操作;否则,判定所述环形队列未满,继续执行生产者的入队操作。
12.如权利要求8-11任一项所述的设备,其特征在于,当生产者有M个数据入队时,在确定所述环形队列未满之后,将所述生产者子队列初始头指针加M作为新的生产者子队列头指针之前,所述第一处理单元进一步用于:
获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述生产者子队列的头指针作为生产者子队列初始头指针,获取所述消费者子队列的尾指针作为消费者子队列第一尾指针,基于所述生产者子队列初始头指针和所述消费者子队列第一尾指针,确定所述环形队列未满时,再次获取当前生产者子队列的头指针,并判断当前生产者子队列的头指针是否等于所述生产者子队列初始头指针,执行后续操作。
13.如权利要求8所述的设备,其特征在于,确定所述环形队列未空时,所述第二处理单元具体用于:
当消费者有N个数据出队时,判断当前生产者子队列的尾指针是否等于所述消费者子队列初始头指针,若是,则判定所述环形队列已空,不能执行消费者的出队操作;否则,判定所述环形队列未空,继续执行消费者的出队操作。
14.如权利要求8、9、10或13所述的设备,其特征在于,当消费者有N个数据出队时,确定所述环形队列未空之后,将所述消费者子队列初始头指针加N作为新的消费者子队列的头指针之前,所述第二处理单元进一步用于:
获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,若是,则执行后续操作;否则,重新开始获取所述消费者子队列的头指针作为消费者子队列初始头指针,获取所述生产者子队列的尾指针作为生产者子队列第一尾指针,基于所述消费者子队列初始头指针和所述生产者子队列第一尾指针,确定所述环形队列未空时,再次获取当前消费者子队列的头指针,并判断当前消费者子队列的头指针是否等于所述消费者子队列初始头指针,执行后续操作。
CN201510486082.XA 2015-08-10 2015-08-10 一种多核环境下实现免锁队列的方法和设备 Pending CN105045632A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510486082.XA CN105045632A (zh) 2015-08-10 2015-08-10 一种多核环境下实现免锁队列的方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510486082.XA CN105045632A (zh) 2015-08-10 2015-08-10 一种多核环境下实现免锁队列的方法和设备

Publications (1)

Publication Number Publication Date
CN105045632A true CN105045632A (zh) 2015-11-11

Family

ID=54452196

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510486082.XA Pending CN105045632A (zh) 2015-08-10 2015-08-10 一种多核环境下实现免锁队列的方法和设备

Country Status (1)

Country Link
CN (1) CN105045632A (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648898A (zh) * 2016-12-28 2017-05-10 深圳竹信科技有限公司 一种适用于多生产者多消费者模式的数据管理方法及系统
CN106648910A (zh) * 2016-10-13 2017-05-10 记忆科技(深圳)有限公司 一种提高固态硬盘中双核间通信效率的方法
CN106997278A (zh) * 2017-03-07 2017-08-01 记忆科技(深圳)有限公司 一种提高固态硬盘中双核间通信效率的方法
CN108733344A (zh) * 2018-05-28 2018-11-02 深圳市道通智能航空技术有限公司 数据读写方法、装置以及环形队列
CN109408239A (zh) * 2018-10-31 2019-03-01 长沙新弘软件有限公司 一种基于队列的异步io处理方法
CN109656515A (zh) * 2018-11-16 2019-04-19 深圳证券交易所 队列消息的操作方法、装置和存储介质
CN109683823A (zh) * 2018-12-20 2019-04-26 湖南国科微电子股份有限公司 一种管理存储器多并发请求的方法及装置
CN112506683A (zh) * 2021-01-29 2021-03-16 腾讯科技(深圳)有限公司 一种数据处理的方法、相关装置、设备以及存储介质
CN113377295A (zh) * 2021-08-13 2021-09-10 北京华云安信息技术有限公司 多生产者单消费者的数据存储和读取方法、装置、设备
CN116149573A (zh) * 2023-04-19 2023-05-23 苏州浪潮智能科技有限公司 Raid卡集群对队列的处理方法、系统、设备和介质
WO2023087975A1 (en) * 2021-11-18 2023-05-25 International Business Machines Corporation Lock-free data aggregation on distributed systems

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102902512A (zh) * 2012-08-31 2013-01-30 浪潮电子信息产业股份有限公司 一种基于多线程编程及消息队列的多线程并行处理方法
CN104077113A (zh) * 2014-07-10 2014-10-01 中船重工(武汉)凌久电子有限责任公司 一种无锁并发消息处理机制的实现方法
CN104572106A (zh) * 2015-01-12 2015-04-29 浪潮电子信息产业股份有限公司 一种基于小内存处理大规模数据的并行程序开发方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102902512A (zh) * 2012-08-31 2013-01-30 浪潮电子信息产业股份有限公司 一种基于多线程编程及消息队列的多线程并行处理方法
CN104077113A (zh) * 2014-07-10 2014-10-01 中船重工(武汉)凌久电子有限责任公司 一种无锁并发消息处理机制的实现方法
CN104572106A (zh) * 2015-01-12 2015-04-29 浪潮电子信息产业股份有限公司 一种基于小内存处理大规模数据的并行程序开发方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
INTEL: "Intel Data Plane Development Kit(Intel DPDK) API Reference", 《REFERENCE指导》 *
INTEL: "rte_ring", 《HTTP://WEB.ARCHIVE.ORG/WEB/20160331043848/ HTTP://DPDK.ORG:80/DOC/API/RTE_ ING_8H_SOURCE.HTML》 *
赵剑川: "DPDK关键技术", 《HTTP://WWW.WENDANGXIAZAI.COM/B-5473B7C6A6C30C2258019E30.HTML》 *
魏宝刚: "《数据结构与算法分析 C语言版》", 31 August 2004, 浙江大学出版社 *

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648910A (zh) * 2016-10-13 2017-05-10 记忆科技(深圳)有限公司 一种提高固态硬盘中双核间通信效率的方法
CN106648898A (zh) * 2016-12-28 2017-05-10 深圳竹信科技有限公司 一种适用于多生产者多消费者模式的数据管理方法及系统
CN106997278A (zh) * 2017-03-07 2017-08-01 记忆科技(深圳)有限公司 一种提高固态硬盘中双核间通信效率的方法
US11500586B2 (en) 2018-05-28 2022-11-15 Autel Robotics Co., Ltd. Data read-write method and apparatus and circular queue
CN108733344A (zh) * 2018-05-28 2018-11-02 深圳市道通智能航空技术有限公司 数据读写方法、装置以及环形队列
WO2019227724A1 (zh) * 2018-05-28 2019-12-05 深圳市道通智能航空技术有限公司 数据读写方法、装置以及环形队列
CN109408239A (zh) * 2018-10-31 2019-03-01 长沙新弘软件有限公司 一种基于队列的异步io处理方法
CN109656515A (zh) * 2018-11-16 2019-04-19 深圳证券交易所 队列消息的操作方法、装置和存储介质
CN109683823A (zh) * 2018-12-20 2019-04-26 湖南国科微电子股份有限公司 一种管理存储器多并发请求的方法及装置
CN112506683A (zh) * 2021-01-29 2021-03-16 腾讯科技(深圳)有限公司 一种数据处理的方法、相关装置、设备以及存储介质
CN113377295A (zh) * 2021-08-13 2021-09-10 北京华云安信息技术有限公司 多生产者单消费者的数据存储和读取方法、装置、设备
CN113377295B (zh) * 2021-08-13 2021-12-10 北京华云安信息技术有限公司 多生产者单消费者的数据存储和读取方法、装置、设备
WO2023087975A1 (en) * 2021-11-18 2023-05-25 International Business Machines Corporation Lock-free data aggregation on distributed systems
CN116149573A (zh) * 2023-04-19 2023-05-23 苏州浪潮智能科技有限公司 Raid卡集群对队列的处理方法、系统、设备和介质
CN116149573B (zh) * 2023-04-19 2023-07-14 苏州浪潮智能科技有限公司 Raid卡集群对队列的处理方法、系统、设备和介质

Similar Documents

Publication Publication Date Title
CN105045632A (zh) 一种多核环境下实现免锁队列的方法和设备
US8806498B2 (en) Method and system for resolving dependency among the enqueued works and/or finished works and scheduling the dependency-resolved works
US8381230B2 (en) Message passing with queues and channels
CN106569891B (zh) 一种存储系统中任务调度执行的方法和装置
US10031773B2 (en) Method to communicate task context information and device therefor
WO2013121085A2 (en) Method, apparatus, and computer program product for inter-core communication in multi-core processors
US11579874B2 (en) Handling an input/output store instruction
CN116521096B (zh) 存储器访问电路及存储器访问方法、集成电路和电子设备
CN104102549A (zh) 一种实现多线程互斥操作的方法、装置和芯片
US8543722B2 (en) Message passing with queues and channels
US9021492B2 (en) Dual mode reader writer lock
CN103970714A (zh) 用于共享功能逻辑的设备和方法及其可重配置处理器
CN109767106A (zh) 跨组织流程处理方法及装置
CN104142802A (zh) 存储器控制设备和方法
US10768902B2 (en) Actor model programming
US11360702B2 (en) Controller event queues
CN115809126A (zh) 混合部署场景下的作业调度方法、装置及电子设备
CN111261206B (zh) 一种读写方法、装置和电子设备及可读存储介质
CN109344630B (zh) 区块生成方法、装置、设备和存储介质
KR101191530B1 (ko) 복수의 이종 코어를 포함하는 멀티코어 프로세서 시스템 및 그 제어 방법
CN101937387A (zh) 一种测试参数的生成方法和系统
CN112905267B (zh) 虚拟机接入协程库的方法、装置及设备
CN116301874A (zh) 代码编译方法、电子设备及存储介质
CN104794077A (zh) 一种链表存储方法及系统
CN117075793A (zh) 数据存储空间处理方法、装置、设备及可读存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20180223

Address after: 510663 Shenzhou Road, Guangzhou Science City, Guangzhou, Guangzhou economic and Technological Development Zone, Guangdong Province, No. 10

Applicant after: Comba Telecom System (China) Co., Ltd.

Applicant after: Comba Telecom Systems (Guangzhou) Co., Ltd.

Applicant after: Jingxin Communication Technology (Guangzhou) Co., Ltd.

Applicant after: TIANJIN COMBA TELECOM SYSTEMS CO., LTD.

Address before: 510663 Guangdong city of Guangzhou Province Economic and Technological Development Zone Jinbi Road No. 6

Applicant before: Jingxin Communication Technology (Guangzhou) Co., Ltd.

RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20151111