CN111767154B - 用于无阻塞通讯的无锁环形队列实现方法 - Google Patents
用于无阻塞通讯的无锁环形队列实现方法 Download PDFInfo
- Publication number
- CN111767154B CN111767154B CN202010567512.1A CN202010567512A CN111767154B CN 111767154 B CN111767154 B CN 111767154B CN 202010567512 A CN202010567512 A CN 202010567512A CN 111767154 B CN111767154 B CN 111767154B
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 22
- 230000000903 blocking effect Effects 0.000 title claims abstract description 16
- 238000004891 communication Methods 0.000 title claims abstract description 15
- 230000006870 function Effects 0.000 claims abstract description 128
- 230000005540 biological transmission Effects 0.000 claims description 13
- 238000013467 fragmentation Methods 0.000 abstract description 4
- 238000006062 fragmentation reaction Methods 0.000 abstract description 4
- 238000013461 design Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 230000003139 buffering effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010924 continuous production Methods 0.000 description 1
- 238000005429 filling process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
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 (4)
1.一种用于无阻塞通讯的无锁环形队列实现方法,其特征在于,包括:
调用write函数将外部数据写入CycleBufferSend子类的内部缓存;
调用SendBegin函数由所述内部缓存中读取数据的指针和大小并存放至数组结构中;
调用系统发送函数发送所述数组结构中的数据;
调用SendEnd函数修改所述CycleBufferSend子类的内部发送状态,完成报文发送;
调用RecvBegin函数将缓冲地址存放至所述数组结构中;
调用系统接收函数接收所述系统发送函数发送的数据,并存放至所述数组结构中;
调用RecvEnd函数修改CycleBufferRecv子类的内部接收状态,完成报文接收;
调用read函数由所述CycleBufferSend子类的内部缓存中读取数据;
在调用所述write函数写入数据之前调用space函数检查是否有空间用以实现写入操作;
在调用所述read函数读取数据之前调用length函数动态计算数据长度,以检查是否有可读取的数据;
在调用所述write函数后修改写指针的位置,在调用所述SendBegin函数后内部发送状态修改为发送中,数据发送完成后修改读指针的位置,同时将内部发送状态修改为未发送;
在调用所述RecvBegin函数后将内部接收状态修改为接收中,数据接收完成后修改写指针的位置,同时将内部接收状态修改为未接收。
2.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,所述数组结构具有填充两个数组元素的空间,以实现同时向所述数组结构中填充两段数据。
3.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,所述space函数和所述write函数利用生产者线程调用,所述SendBegin函数、所述系统发送函数和所述SendEnd函数利用消费者线程调用;
所述RecvBegin函数、所述系统接收函数和所述RecvEnd函数利用生产者线程调用,所述length函数和所述read函数利用消费者线程调用。
4.根据权利要求1所述的用于无阻塞通讯的无锁环形队列实现方法,其特征在于,在所述CycleBufferRecv子类中,设置私有成员变量用以标记是否正在接收数据,所述私有成员变量在RecvBegin函数中赋值为true,在RecvEnd函数中赋值为false。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010567512.1A CN111767154B (zh) | 2020-06-19 | 2020-06-19 | 用于无阻塞通讯的无锁环形队列实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010567512.1A CN111767154B (zh) | 2020-06-19 | 2020-06-19 | 用于无阻塞通讯的无锁环形队列实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111767154A CN111767154A (zh) | 2020-10-13 |
CN111767154B true CN111767154B (zh) | 2024-06-25 |
Family
ID=72721056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010567512.1A Active CN111767154B (zh) | 2020-06-19 | 2020-06-19 | 用于无阻塞通讯的无锁环形队列实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111767154B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051042B (zh) * | 2021-01-25 | 2024-04-19 | 北京思特奇信息技术股份有限公司 | 基于zookeeper的事务实现方法及系统 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226487B (zh) * | 2008-01-30 | 2010-06-02 | 中国船舶重工集团公司第七〇九研究所 | 基于嵌入式Linux操作系统的内核级线程库的实现方法 |
US8095727B2 (en) * | 2008-02-08 | 2012-01-10 | Inetco Systems Limited | Multi-reader, multi-writer lock-free ring buffer |
US8751737B2 (en) * | 2009-06-26 | 2014-06-10 | Alcatel Lucent | Method and apparatus for using a shared ring buffer to provide thread synchronization in a multi-core processor system |
US9003131B1 (en) * | 2013-03-27 | 2015-04-07 | Parallels IP Holdings GmbH | Method and system for maintaining context event logs without locking in virtual machine |
CN105162727B (zh) * | 2015-08-13 | 2017-12-01 | 东方电子股份有限公司 | 一种基于VxWorks系统在DSFA系统中实现快速对等通信的方法 |
CN106790599B (zh) * | 2016-12-29 | 2019-06-28 | 中国人民解放军国防科学技术大学 | 一种基于多核无锁环形缓冲区的共生虚拟机通信方法 |
CN107846328B (zh) * | 2017-12-01 | 2021-03-12 | 上海市共进通信技术有限公司 | 基于并发无锁环形队列的网络速率实时统计方法 |
CN108768884A (zh) * | 2018-04-27 | 2018-11-06 | 江苏中科芯核电子科技有限公司 | 一种基于环形缓冲区的无线通信数据处理方法 |
CN108900327B (zh) * | 2018-06-20 | 2021-06-18 | 昆明理工大学 | 一种基于dpdk的天文数据采集和实时处理方法 |
US10534575B1 (en) * | 2018-12-14 | 2020-01-14 | Sap Se | Buffering of associative operations on random memory addresses |
CN110888727B (zh) * | 2019-11-26 | 2022-07-22 | 北京达佳互联信息技术有限公司 | 并发无锁队列实现方法、装置及存储介质 |
CN111124641B (zh) * | 2019-12-12 | 2023-10-31 | 中盈优创资讯科技有限公司 | 一种利用多线程的数据处理方法及系统 |
-
2020
- 2020-06-19 CN CN202010567512.1A patent/CN111767154B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111767154A (zh) | 2020-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9665392B2 (en) | System and method for supporting intra-node communication based on a shared memory queue | |
US8751737B2 (en) | Method and apparatus for using a shared ring buffer to provide thread synchronization in a multi-core processor system | |
US7194569B1 (en) | Method of re-formatting data | |
EP0365731B1 (en) | Method and apparatus for transferring messages between source and destination users through a shared memory | |
US20030110166A1 (en) | Queue management | |
TW200406672A (en) | Free list and ring data structure management | |
US9069566B1 (en) | Implementation of a multiple writer single reader queue in a lock free and a contention free manner | |
CN112698959A (zh) | 一种多核通信方法和装置 | |
CN114244790B (zh) | PCIe设备与主机设备的通信方法、系统及设备 | |
US20100186024A1 (en) | System and Method of Invoking Multiple Remote Operations | |
CN108156172A (zh) | 一种高速接收tcp数据的方法 | |
CN114281484B (zh) | 数据传输方法、装置、设备及存储介质 | |
US20030056073A1 (en) | Queue management method and system for a shared memory switch | |
CN112559436B (zh) | 一种rdma通信设备的上下文访问方法及系统 | |
CN115827506A (zh) | 数据写入方法、数据读取方法、装置、处理核和处理器 | |
CN107025184B (zh) | 一种数据管理方法及装置 | |
CN111767154B (zh) | 用于无阻塞通讯的无锁环形队列实现方法 | |
CN115934625A (zh) | 一种用于远程直接内存访问的敲门铃方法、设备及介质 | |
US7113516B1 (en) | Transmit buffer with dynamic size queues | |
CN111240828A (zh) | 一种嵌入式实时操作系统的同步通信系统和方法 | |
CN112291336B (zh) | 一种arinc429网卡的多通道并行数据加载方法 | |
CN108958903B (zh) | 嵌入式多核中央处理器任务调度方法与装置 | |
CN110990169B (zh) | 一种利用共享内存进行进程间字节流通信的结构及方法 | |
CN111949422A (zh) | 基于mq和异步io的数据多级缓存与高速传输记录方法 | |
CN113826081A (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 | ||
GR01 | Patent grant |