CN111767154A - 用于无阻塞通讯的无锁环形队列实现方法 - Google Patents
用于无阻塞通讯的无锁环形队列实现方法 Download PDFInfo
- Publication number
- CN111767154A CN111767154A CN202010567512.1A CN202010567512A CN111767154A CN 111767154 A CN111767154 A CN 111767154A CN 202010567512 A CN202010567512 A CN 202010567512A CN 111767154 A CN111767154 A CN 111767154A
- Authority
- CN
- China
- Prior art keywords
- function
- data
- calling
- write
- read
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Abstract
本发明公开了一种用于无阻塞通讯的无锁环形队列实现方法,包括:调用write函数将外部数据写入CycleBufferSend子类的内部缓存;调用SendBegin函数由内部缓存中读取数据的指针和大小并存放至数组结构中;调用系统发送函数发送数组结构中的数据;调用SendEnd函数修改内部发送状态,完成报文发送;调用RecvBegin函数将缓冲地址存放至数组结构中;调用系统接收函数接收系统发送函数发送的数据,并存放至数组结构中;调用RecvEnd函数修改内部接收状态,完成报文接收;调用read函数由内部缓存中读取数据。通过本发明的技术方案,加快了系统的报文收发效率,提高了系统的吞吐量,不需要频繁的内存分配和释放操作,加快了系统运行速度,也降低了系统的内存碎片化程度。
Description
技术领域
本发明涉及网络通信技术领域,尤其涉及一种用于无阻塞通讯的无锁环形队列实现方法。
背景技术
在计算机系统中,CPU运算存取是最快的,其次是内存存取速度,最后是IO的存取速度。其中,IO又有两种,一种是磁盘IO,一种是网络通讯IO,这里只谈网络IO。
现代的计算机系统,尤其是服务器,CPU一般都是多核的(如32核、64核等),在同时访问共享资源时,一般都需要做加锁处理,否则会造成数据访问错乱,而对数据加锁,又会增加操作系统的系统调用,影响系统速度;
一般windows、linux等操作系统的API都支持多缓冲同时发送,以降低用户进程和内核系统的交互次数,从而提升系统运营速度。
发明内容
针对上述问题中的至少之一,本发明提供了一种用于无阻塞通讯的无锁环形队列实现方法,通过将CycleBuffer派生出两个子类CycleBufferRecv和CycleBufferSend的设计方式,将接收和发送过程独立进行,调用函数不易出错,在CycleBufferRecv子类中设计RecvBegin和RecvEnd函数,在CycleBufferSend中设计了SendBegin和SendEnd函数,分别减少了一次报文接收和报文发送过程,加快系统的报文收发效率,且这种设计方式可以用于网络通讯的无阻塞编程,充分发挥无阻塞程序框架的特性,进一步提高系统的吞吐量;内部存储采用环形设计,不需要频繁的内存分配和释放操作,加快了系统运行速度,也降低了系统的内存碎片化程度。此外,本发明用于单发送者和单接收者的场景,在单发送者和单接收者同时使用缓冲的时候,由于不会同时访问一个临界资源,所以线程不需要加锁,也加快了系统运行速度。
为实现上述目的,本发明提供了一种用于无阻塞通讯的无锁环形队列实现方法,包括:调用write函数将外部数据写入CycleBufferSend子类的内部缓存;调用SendBegin函数由所述内部缓存中读取数据的指针和大小并存放至数组结构中;调用系统发送函数发送所述数组结构中的数据;调用SendEnd函数修改所述CycleBufferSend子类的内部发送状态,完成报文发送;调用RecvBegin函数将缓冲地址存放至所述数组结构中;调用系统接收函数接收所述系统发送函数发送的数据,并存放至所述数组结构中;调用RecvEnd函数修改CycleBufferRecv子类的内部接收状态,完成报文接收;调用read函数由所述CycleBufferSend子类的内部缓存中读取数据。
在上述技术方案中,优选地,用于无阻塞通讯的无锁环形队列实现方法还包括:在调用所述write函数写入数据之前调用space函数检查是否有空间用以实现写入操作;在调用所述read函数读取数据之前调用length函数动态计算数据长度,以检查是否有可读取的数据。
在上述技术方案中,优选地,在调用所述write函数后修改写指针的位置,在调用所述SendBegin函数后内部发送状态修改为发送中,数据发送完成后修改读指针的位置,同时将内部发送状态修改为未发送。
在上述技术方案中,优选地,在调用所述RecvBegin函数后将内部接收状态修改为接收中,数据接收完成后修改写指针的位置,同时将内部接收状态修改为未接收。
在上述技术方案中,优选地,所述数组结构具有填充两个数组元素的空间,以实现同时向所述数组结构中填充两段数据。
在上述技术方案中,优选地,所述space函数和所述write函数利用生产者线程调用,所述SendBegin函数、所述系统发送函数和所述SendEnd函数利用消费者线程调用;所述RecvBegin函数、所述系统接收函数和所述RecvEnd函数利用生产者线程调用,所述length函数和所述read函数利用消费者线程调用。
在上述技术方案中,优选地,在所述CycleBufferRecv子类中,设置私有成员变量用以标记是否正在接收数据,所述私有成员变量在RecvBegin函数中赋值为true,在RecvEnd函数中赋值为false。
与现有技术相比,本发明的有益效果为:
1.把CycleBuffer派生出两个子类CycleBufferRecv和CycleBufferSend来设计,收发分明,简单明了,不容易造成使用者混乱,导致调用函数错误;
2.在CycleBufferRecv中设计了recvBegin和recvEnd函数,减少了一次报文接收过程,加快了系统的报文接收效率;
3.同理,在CycleBufferSend中设计了sendBegin和sendEnd函数,减少了一次报文发送过程,加快了系统的报文发送效率;
4.内部存储采用环形设计,提前开辟好内存后,在收发时,不再需要频繁的内存分配和释放操作,加快了系统运行速度,也降低了系统的内存碎片化程度;
5.CycleBufferRecv和CycleBufferSend中的“*Begin”和“*End”设计,可以用于网络通讯的无阻塞编程,充分发挥无阻塞程序框架的特性,进一步提高系统的吞吐量;
6.本设计用于单发送者和单接收者的场景,由于单发送者和单接收者同时使用缓冲的时候,由于不会同时访问一个临界资源,所以线程不需要加锁,也加快了系统运行速度。
附图说明
图1为本发明一种实施例公开的用于无阻塞通讯的无锁环形队列实现方法的流程示意图;
图2为本发明一种实施例公开的缓冲存储方式的示意图;
图3为本发明一种实施例公开的内存模型的读写数据方式示意图;
图4为本发明一种实施例公开的内存模型的又一种读写数据方式示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合附图对本发明做进一步的详细描述:
如图1所示,根据本发明提供的一种用于无阻塞通讯的无锁环形队列实现方法,包括:调用write函数将外部数据写入CycleBufferSend子类的内部缓存;调用SendBegin函数由内部缓存中读取数据的指针和大小并存放至数组结构中;调用系统发送函数发送数组结构中的数据;调用SendEnd函数修改CycleBufferSend子类的内部发送状态,完成报文发送;调用RecvBegin函数将缓冲地址存放至数组结构中;调用系统接收函数接收系统发送函数发送的数据,并存放至数组结构中;调用RecvEnd函数修改CycleBufferRecv子类的内部接收状态,完成报文接收;调用read函数由CycleBufferSend子类的内部缓存中读取数据。
在该实施例中,通过将CycleBuffer派生出两个子类CycleBufferRecv和CycleBufferSend的设计方式,分别用于接收数据和发送数据,调用函数不易出错。在CycleBufferRecv子类中设计RecvBegin和RecvEnd函数,在CycleBufferSend中设计了SendBegin和SendEnd函数,分别减少了一次报文接收和报文发送过程,加快系统的报文收发效率,且这种设计方式可以用于网络通讯的无阻塞编程,充分发挥无阻塞程序框架的特性,进一步提高系统的吞吐量;内部存储采用环形设计,不需要频繁的内存分配和释放操作,加快了系统运行速度,也降低了系统的内存碎片化程度。此外,本发明用于单发送者和单接收者的场景,在单发送者和单接收者同时使用缓冲的时候,由于不会同时访问一个临界资源,所以线程不需要加锁,也加快了系统运行速度。
具体地,如图2所示,缓冲存储示意图中,“空闲”表示还没有存储数据,“数据”表示已经存储了部分数据,“读指针位置”指向“数据”的起始位置,“写指针位置”指向“数据”的结束位置,也是“空闲”的起始位置。
数据的写入和读取是一个不断的处理过程,会一直的持续下去,读写到缓冲的结尾处,会再从头开始,形成一个“环”,所以也称为“环形队列”。图中的指针位置也会根据读写的情况不断地更新读写的位置。
在CycleBuffer的实现过程中,其成员变量中没有数据长度(length)这个变量,这是为了防止读写两个线程同时访问公共变量length的问题,因此在CycleBuffer类中实现一个求数据长度的函数length(),来动态计算数据长度的值。优选地,length函数实现过程中,设置一变量oneGap,是一个常量1,要求读写指针之间的距离至少差一个固定长度oneGap,主要是为了防止读写指针发生重叠,不知道到底缓冲区满还是空闲状态。同理,可通过函数space()得到缓冲中空闲的空间大小。
具体地,CycleBufferSend子类用于发送数据,在CycleBufferSend子类中调用write函数,向缓冲区写入数据,同时返回实际写入的字节数;还调用sendBegin和sendEnd两个成员函数,来实现异步数据发送。调用顺序为:
a.先由生产者线程写入数据:调用write()函数,write函数内部会修改写指针(writeOffset_)的位置;
b.再由消费者线程发送数据:先调用sendBegin()函数,再调用sendEnd()函数,sendEnd函数内部会修改读指针(readOffset_)的位置。
其中,CycleBufferSend子类中还设置私有的成员变量sending_,用于标记是否正在发送数据中,sending_的赋值在sendBegin函数中会设置为true,在sendEnd函数中会设置为false。
如图3和图4所示,其中,write函数写入数据时分为两种情况,一种是读指针在前(写入空间可能是不连续的),一种是写指针在前(写入空间是连续的)。
SendBegin函数中会传递一个有两个元素的“struct iovec”类型的数组结构,在SendBegin函数中,会根据缓存中存储的数据情况,来填充(注意:该填充过程并非数据复制,只是简单的指针复制,速度很快)这个数组,可能只填充一个数组元素,也可能同时填充两个数组元素(当数据位于两个不连续的区域时)。当发送端的数据量比较大时,一次性可以同时向数组中填写两段内存数据,减少了一次网络访问,节省了一次系统调用,从而数据发送提高效率。发送数据完成后,修改内部读指针writeOffset_的位置,同时把发送状态(sending_)改为未发送(false)。
具体地,CycleBufferRecv子类用于接收数据,在CycleBufferRecv中调用read函数,来读取缓冲区内容;还调取RecvBegin和RecvEnd两个成员函数,来实现异步数据接收。调用顺序为:
a.先由生产者线程接收数据:recvBegin()函数→recvEnd()函数;
b.再由消费者线程消费数据:read()函数。
在CycleBufferRecv子类中,增加一个私有成员变量recving_,用来标记是否正在接收数据中。recving_的赋值在RecvBegin函数中会设置为true,在RecvEnd函数中会设置为false。
如图3和图4所示,read函数读取数据分为两种情况,一种是读指针在前(可读数据是连接的),另一种是写指针在前(可读数据可能是不连接的)。其中,在read函数运行过程中,设置一个有意义的参数modifyReadOffset,只有当modifyReadOffset的值为true时,才修改读指针readOffset_的值,这样可以实现“软读”,即先尝试读取一段内存给外部使用,由外部来判读,是否确实需要修改读指针的位置,如果需要修改时,再调度readSkip函数修改读指针的位置。
在RecvBegin函数运行中会传递一个有两个元素的“struct iovec”类型的数组结构,在RecvBegin函数中,会根据缓存中存储的数据情况,来填充这个数组结构,可能只填充一个数组元素,也可能同时填充两个数组元素(当数据位于两个不连续的区域时)。当发送端的数据量比较大时,一次性可以同时向数组中填写两段内存数据,减少了一次网络访问,节省了一次系统调用,从而数据接收提高效率。在调用recvBegin函数后,接收状态(recving_)改为接收中(true)。接收数据完成后,修改内部写指针writeOffset_的位置,同时把接收状态(recving_)改为未接收(false)。
在上述实施例中,优选地,在调用write函数写入数据之前调用space函数检查是否有空间用以实现写入操作,如果有足够空间,就调用write函数进行写入操作,无需等待。在调用read函数读取数据之前调用length函数动态计算数据长度,以检查是否有可读取的数据,如果有就调用read函数读取数据,无需等待。
在上述实施例中,优选地,space函数和write函数利用生产者线程调用,SendBegin函数、系统发送函数和SendEnd函数利用消费者线程调用;RecvBegin函数、系统接收函数和RecvEnd函数利用生产者线程调用,length函数和read函数利用消费者线程调用。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种用于无阻塞通讯的无锁环形队列实现方法,其特征在于,包括:
调用write函数将外部数据写入CycleBufferSend子类的内部缓存;
调用SendBegin函数由所述内部缓存中读取数据的指针和大小并存放至数组结构中;
调用系统发送函数发送所述数组结构中的数据;
调用SendEnd函数修改所述CycleBufferSend子类的内部发送状态,完成报文发送;
调用RecvBegin函数将缓冲地址存放至所述数组结构中;
调用系统接收函数接收所述系统发送函数发送的数据,并存放至所述数组结构中;
调用RecvEnd函数修改CycleBufferRecv子类的内部接收状态,完成报文接收;
调用read函数由所述CycleBufferSend子类的内部缓存中读取数据。
2.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,还包括:
在调用所述write函数写入数据之前调用space函数检查是否有空间用以实现写入操作;
在调用所述read函数读取数据之前调用length函数动态计算数据长度,以检查是否有可读取的数据。
3.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,在调用所述write函数后修改写指针的位置,在调用所述SendBegin函数后内部发送状态修改为发送中,数据发送完成后修改读指针的位置,同时将内部发送状态修改为未发送。
4.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,在调用所述RecvBegin函数后将内部接收状态修改为接收中,数据接收完成后修改写指针的位置,同时将内部接收状态修改为未接收。
5.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,所述数组结构具有填充两个数组元素的空间,以实现同时向所述数组结构中填充两段数据。
6.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,所述space函数和所述write函数利用生产者线程调用,所述SendBegin函数、所述系统发送函数和所述SendEnd函数利用消费者线程调用;
所述RecvBegin函数、所述系统接收函数和所述RecvEnd函数利用生产者线程调用,所述length函数和所述read函数利用消费者线程调用。
7.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,在所述CycleBufferRecv子类中,设置私有成员变量用以标记是否正在接收数据,所述私有成员变量在RecvBegin函数中赋值为true,在RecvEnd函数中赋值为false。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010567512.1A CN111767154A (zh) | 2020-06-19 | 2020-06-19 | 用于无阻塞通讯的无锁环形队列实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010567512.1A CN111767154A (zh) | 2020-06-19 | 2020-06-19 | 用于无阻塞通讯的无锁环形队列实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111767154A true CN111767154A (zh) | 2020-10-13 |
Family
ID=72721056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010567512.1A Pending CN111767154A (zh) | 2020-06-19 | 2020-06-19 | 用于无阻塞通讯的无锁环形队列实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111767154A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051042A (zh) * | 2021-01-25 | 2021-06-29 | 北京思特奇信息技术股份有限公司 | 基于zookeeper的事务实现方法及系统 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090204755A1 (en) * | 2008-02-08 | 2009-08-13 | Inetco Systems Limited | Multi-reader, multi-writer lock-free ring buffer |
US20100332755A1 (en) * | 2009-06-26 | 2010-12-30 | Tian Bu | Method and apparatus for using a shared ring buffer to provide thread synchronization in a multi-core processor system |
CN105162727A (zh) * | 2015-08-13 | 2015-12-16 | 东方电子股份有限公司 | 一种基于VxWorks系统在DSFA系统中实现快速对等通信的方法 |
CN106790599A (zh) * | 2016-12-29 | 2017-05-31 | 中国人民解放军国防科学技术大学 | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 |
CN107846328A (zh) * | 2017-12-01 | 2018-03-27 | 上海市共进通信技术有限公司 | 基于并发无锁环形队列的网络速率实时统计方法 |
CN108768884A (zh) * | 2018-04-27 | 2018-11-06 | 江苏中科芯核电子科技有限公司 | 一种基于环形缓冲区的无线通信数据处理方法 |
CN108900327A (zh) * | 2018-06-20 | 2018-11-27 | 昆明理工大学 | 一种基于dpdk的天文数据采集和实时处理方法 |
US10534575B1 (en) * | 2018-12-14 | 2020-01-14 | Sap Se | Buffering of associative operations on random memory addresses |
CN110888727A (zh) * | 2019-11-26 | 2020-03-17 | 北京达佳互联信息技术有限公司 | 并发无锁队列实现方法、装置及存储介质 |
CN111124641A (zh) * | 2019-12-12 | 2020-05-08 | 中盈优创资讯科技有限公司 | 一种利用多线程的数据处理方法及系统 |
-
2020
- 2020-06-19 CN CN202010567512.1A patent/CN111767154A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090204755A1 (en) * | 2008-02-08 | 2009-08-13 | Inetco Systems Limited | Multi-reader, multi-writer lock-free ring buffer |
US20100332755A1 (en) * | 2009-06-26 | 2010-12-30 | Tian Bu | Method and apparatus for using a shared ring buffer to provide thread synchronization in a multi-core processor system |
CN105162727A (zh) * | 2015-08-13 | 2015-12-16 | 东方电子股份有限公司 | 一种基于VxWorks系统在DSFA系统中实现快速对等通信的方法 |
CN106790599A (zh) * | 2016-12-29 | 2017-05-31 | 中国人民解放军国防科学技术大学 | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 |
CN107846328A (zh) * | 2017-12-01 | 2018-03-27 | 上海市共进通信技术有限公司 | 基于并发无锁环形队列的网络速率实时统计方法 |
CN108768884A (zh) * | 2018-04-27 | 2018-11-06 | 江苏中科芯核电子科技有限公司 | 一种基于环形缓冲区的无线通信数据处理方法 |
CN108900327A (zh) * | 2018-06-20 | 2018-11-27 | 昆明理工大学 | 一种基于dpdk的天文数据采集和实时处理方法 |
US10534575B1 (en) * | 2018-12-14 | 2020-01-14 | Sap Se | Buffering of associative operations on random memory addresses |
CN110888727A (zh) * | 2019-11-26 | 2020-03-17 | 北京达佳互联信息技术有限公司 | 并发无锁队列实现方法、装置及存储介质 |
CN111124641A (zh) * | 2019-12-12 | 2020-05-08 | 中盈优创资讯科技有限公司 | 一种利用多线程的数据处理方法及系统 |
Non-Patent Citations (5)
Title |
---|
B. HU ET.AL.: "Load-Balanced Optical Switch for High-Speed Router Design", 2010 IEEE INTERNATIONAL CONFERENCE ON COMMUNICATIONS * |
KUANGBEN2000: "线程安全的无锁RingBuffer的实现【一个读线程,一个写线程】", pages 2, Retrieved from the Internet <URL:https://blog.csdn.net/kuangben2000/article/details/105219795> * |
STACK OVERFLOW: "Send message through Ring (Circular) Buffer between Threads (in C)", Retrieved from the Internet <URL:https://stackoverflow.com/questions/44366392/send-message-through-ring-circular-buffer-between-threads-in-c> * |
殷聪敏: "基于开放通道固态硬盘的内存数据库持久化优化研究", 中国优秀硕士学位论文全文数据库 * |
董正凯;叶彦斐;: "基于循环队列缓冲的Lora通信数据终端设计与研发", 工业控制计算机, no. 05 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051042A (zh) * | 2021-01-25 | 2021-06-29 | 北京思特奇信息技术股份有限公司 | 基于zookeeper的事务实现方法及系统 |
CN113051042B (zh) * | 2021-01-25 | 2024-04-19 | 北京思特奇信息技术股份有限公司 | 基于zookeeper的事务实现方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8751737B2 (en) | Method and apparatus for using a shared ring buffer to provide thread synchronization in a multi-core processor system | |
US9405574B2 (en) | System and method for transmitting complex structures based on a shared memory queue | |
US8904067B2 (en) | Adaptive multi-threaded buffer | |
US20090204755A1 (en) | Multi-reader, multi-writer lock-free ring buffer | |
TW200406672A (en) | Free list and ring data structure management | |
US9086920B2 (en) | Device for managing data buffers in a memory space divided into a plurality of memory elements | |
CN111427859B (zh) | 一种消息处理方法、装置、电子设备及存储介质 | |
WO2021047120A1 (zh) | 一种fpga异构加速卡集群中的资源调度方法、设备及介质 | |
US20060277126A1 (en) | Ring credit management | |
CN108897630B (zh) | 一种基于OpenCL的全局内存缓存方法、系统及装置 | |
EP3077914B1 (en) | System and method for managing and supporting virtual host bus adaptor (vhba) over infiniband (ib) and for supporting efficient buffer usage with a single external memory interface | |
CN106095604A (zh) | 一种多核处理器的核间通信方法及装置 | |
US20030056073A1 (en) | Queue management method and system for a shared memory switch | |
EP2962200B1 (en) | System and method for using a sequencer in a concurrent priority queue | |
EP2219114A1 (en) | Method and apparatus for allocating storage addresses | |
CN107025184B (zh) | 一种数据管理方法及装置 | |
CN112698959A (zh) | 一种多核通信方法和装置 | |
CN115827506A (zh) | 数据写入方法、数据读取方法、装置、处理核和处理器 | |
CN111767154A (zh) | 用于无阻塞通讯的无锁环形队列实现方法 | |
US6836809B2 (en) | Writing and reading data from a queue | |
CN111949422B (zh) | 基于mq和异步io的数据多级缓存与高速传输记录方法 | |
CN108958903B (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
US20080005404A1 (en) | Method for managing buffers pool and a system using the method | |
CN110990169B (zh) | 一种利用共享内存进行进程间字节流通信的结构及方法 | |
CN112486702A (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 |