CN112698963B - 一种事件通知方法及装置 - Google Patents
一种事件通知方法及装置 Download PDFInfo
- Publication number
- CN112698963B CN112698963B CN202011527642.9A CN202011527642A CN112698963B CN 112698963 B CN112698963 B CN 112698963B CN 202011527642 A CN202011527642 A CN 202011527642A CN 112698963 B CN112698963 B CN 112698963B
- Authority
- CN
- China
- Prior art keywords
- event
- state
- task
- user
- queue
- 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 107
- 230000006870 function Effects 0.000 claims abstract description 69
- 230000002618 waking effect Effects 0.000 claims abstract description 24
- 238000012544 monitoring process Methods 0.000 claims abstract description 18
- 230000008569 process Effects 0.000 claims description 86
- 230000005540 biological transmission Effects 0.000 claims description 15
- 238000012545 processing Methods 0.000 claims description 12
- 238000010200 validation analysis Methods 0.000 claims description 12
- 230000003993 interaction Effects 0.000 abstract description 5
- 230000007717 exclusion Effects 0.000 description 9
- 230000008859 change Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013507 mapping 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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Debugging And Monitoring (AREA)
Abstract
本说明书提供一种事件通知方法及装置,涉及通信技术领域。一种事件通知方法,包括:在共享内存中创建事件句柄,其中,事件句柄被内核态的多路复用监听函数监听;调用第一用户态任务向共享内存的事件队列中添加通知事件,并将事件句柄置于生效状态;当所述事件句柄处于生效状态时,唤醒第二用户态任务,调用第二用户态任务将事件句柄置于失效状态,并从事件队列中获取通知事件。通过上述方法,能够提升设备的任务之间进行通知事件交互的可靠性。
Description
技术领域
本说明书涉及通信技术领域,尤其涉及一种事件通知方法及装置。
背景技术
随着网络技术逐渐从1GE/10GE/25GE/40GE/56GE/100GE(吉比特以太网,GigaEthernet)的演变,CPU逐渐从单核到多核,再到多CPU的发展,设备(例如,个人电脑、防火墙和服务器)的单机能力已通过CPU横向扩展达到新的高点,但是传统的Linux系统网络数据处理架构却无法满足当前海量数据传输对网络的要求,单机处理能力已远不能与相应的硬件能力相匹配。
相对于传统的Linux内核的网络数据处理流程,通过UIO(用户态空间输入输出,User space Input Output)技术,将网络协议栈设置在用户态中实现,使得网络数据能够绕过内核网络协议栈,直接从网卡进入用户态空间,并通过应用进程(APP process)和网络协议栈线程(Stack process)之间对共享内存的访问实现两个进程间的网络数据交互,提升了网络数据的处理能力。其中,网络协议栈指TCP/IP协议(传输控制协议/互联协议,Transmission Control Protocol/Internet Protocol)。
此时,需要设置条件变量实现进程之间的事件同步。例如,网络协议栈进程通过对条件变量的操作触发应用进程获取通知事件,并基于事件对共享内存中的网络数据进行处理。为了避免应用进程和网络协议栈进程之间对条件变量的同时操作,会为条件变量设置互斥锁,即在同一时间只有一个进程可以改变条件变量。但是,在实际应用中,在一个进程获取到该条件变量的操作权限(即,占用该互斥锁)时,该进程因为异常被结束了,此时,由于该互斥锁未能被释放,另一个进程无法获取到互斥锁,该进程无法被条件变量触发,从而导致无法获取通知事件,降低了用户态进程之间进行事件通知的可靠性。当然,该问题也可能出现在线程之间的事件同步。
发明内容
为克服相关技术中存在的问题,本说明书提供了一种事件通知方法及装置。
根据本说明书实施方式的第一方面,提供了一种事件通知方法,包括:
在共享内存中创建事件句柄,其中,事件句柄被内核态的多路复用监听函数监听;
调用第一用户态任务向共享内存的事件队列中添加通知事件,并将事件句柄置于生效状态;
当所述事件句柄处于生效状态时,唤醒第二用户态任务,调用第二用户态任务将事件句柄置于失效状态,并从事件队列中获取通知事件。
可选的,多路复用监听函数为epoll函数。
进一步的,epoll函数中设置有超时时间;
该方法还包括:
若到达超时时间,则调用第二用户态任务获取事件队列中所添加的通知事件。
可选的,多路复用监听函数为select函数或poll函数。
可选的,第二用户态任务和第一用户态任务为线程或进程。
进一步的,调用第一用户态任务向共享内存的事件队列中添加通知事件,并将事件句柄置于生效状态,包括:
调用第一用户态任务接收第一数据,将第一数据写入到接收队列;
调用第一用户态任务根据第一数据,向共享内存的事件队列中写入第一事件;
调用第一用户态任务通过内核态的写操作将事件句柄置于生效状态;
当事件句柄处于生效状态时,唤醒第二用户态任务,调用第二用户态任务将事件句柄置于失效状态,并从事件队列中获取通知事件,包括:
当事件句柄处于生效状态时,唤醒第二用户态任务;
调用第二用户态任务通过内核态的读操作将事件句柄置于失效状态;
从事件队列中获取第一事件,并根据第一事件从接收队列中读取第一数据。
进一步的,调用第一用户态任务向共享内存的事件队列中添加通知事件,并将事件句柄置于生效状态,包括:
调用第一用户态任务从发送队列中获取第二数据,并发送第二数据;
调用第一用户态任务向共享内存的事件队列中写入第二事件;
调用第一用户态任务通过内核态的写操作将事件句柄置于生效状态;
当事件句柄处于生效状态时,唤醒第二用户态任务,调用第二用户态任务将事件句柄置于失效状态,并从事件队列中获取的通知事件,包括:
当事件句柄处于生效状态时,唤醒第二用户态任务;
调用第二用户态任务通过内核态的读操作将事件句柄置于失效状态;
从事件队列中获取第二事件,并根据第二事件将第三数据写入发送队列。
根据本说明书实施方式的第二方面,提供了一种事件通知装置,包括:
创建单元,用于在共享内存中创建事件句柄,其中,事件句柄被内核态的多路复用监听函数监听;
添加单元,用于调用第一用户态任务向共享内存的事件队列中添加通知事件,并将事件句柄置于生效状态;
获取单元,用于当事件句柄处于生效状态时,唤醒第二用户态任务,调用第二用户态任务将事件句柄置于失效状态,并从事件队列中获取通知事件。
可选的,多路复用监听函数为epoll函数。
可选的,epoll函数中设置有超时时间;
该装置还包括:
计时单元,用于若到达超时时间,则调用第二用户态任务获取事件队列中所添加的通知事件。
可选的,多路复用监听函数为select函数或poll函数。
可选的,第二用户态任务和第一用户态任务为线程或进程。
进一步的,添加单元,包括:
接收模块,用于调用第一用户态任务接收第一数据,将第一数据写入到接收队列;
写入模块,用于调用第一用户态任务根据第一数据,向共享内存的事件队列中写入第一事件;
生效模块,用于调用第一用户态任务通过内核态的写操作将事件句柄置于生效状态;
获取单元,包括:
唤醒模块,用于当事件句柄处于生效状态时,唤醒第二用户态任务;
失效模块,用于调用第二用户态任务通过内核态的读操作将事件句柄置于失效状态;
读取模块,用于从事件队列中获取第一事件,并根据第一事件从接收队列中读取第一数据。
进一步的,添加单元,包括:
发送模块,用于调用第一用户态任务从发送队列中获取第二数据,并发送第二数据;
写入模块,用于调用第一用户态任务向共享内存的事件队列中写入第二事件;
生效模块,用于调用第一用户态任务通过内核态的写操作将事件句柄置于生效状态;
获取单元,包括:
唤醒模块,用于当事件句柄处于生效状态时,唤醒第二用户态任务;
失效模块,用于调用第二用户态任务通过内核态的读操作将事件句柄置于失效状态;
写入模块,用于从事件队列中获取第二事件,并根据第二事件将第三数据写入发送队列。
本说明书的实施方式提供的技术方案可以包括以下有益效果:
本说明书实施方式中,通过内核态的多路复用监听函数监听用户态任务创建的事件句柄,在第一用户态任务向事件队列中添加通知事件时,将该事件句柄置于生效状态,以使第二用户态任务通过内核态中的多路复用监听函数感知到该通知事件的到达,获取该通知事件,实现两个用户态任务之间的事件通知,并且可以根据该通知事件进行相对应的处理,避免互斥锁被一个用户态任务占用时出现故障,无法释放互斥锁,从而使得另一个用户态任务无法获取互斥锁导致的无法获取事件通知的问题,提升了设备的用户态任务之间进行事件通知的可靠性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施方式,并与说明书一起用于解释本说明书的原理。
图1是本申请所涉及的一种事件通知方法的流程图;
图2是本申请所涉及的一种事件通知方法中任务之间通过共享内存进行数据交互的结构示意图;
图3是本申请所涉及的一种事件通知装置的结构示意图。
具体实施方式
这里将详细地对示例性实施方式进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施方式中所描述的实施方式并不代表与本说明书相一致的所有实施方式。
本申请提供了一种事件通知方法,如图1所示,包括:
S100、在共享内存中创建事件句柄。
在设备中,可以包括CPU、内存和存储器等结构。CPU调用存储器中所存储的程序代码创建用户态任务,以通过所创建的任务实现对应的功能。该任务可以是进程(Process),也可以是线程(Thread),对此不作限制。CPU在处理任务时,可以根据调度分时处理不同的任务,比如,在T0-T1时间段内处理任务1,在T1-T2时间段里处理任务2,以此类推。
内核态和用户态分别指程序所运行的权限,内核态也可以称为特权态,用户态也可以称为非特权态,内核态中所运行的程序可以访问的权限要高于用户态中所运行的程序。比如,内核态中所运行的程序可以对系统进行重启,结束其他用户态的进程和写入系统文件等,而用户态中所运行的程序则无法实现。后续以两个进程之间进行事件通知为例进行描述,其中,第一用户态任务可以为网络协议栈进程(Stack Process),第二用户态任务可以为应用进程(Application Process)。
如图2所示用户态的进程结构示意图中,设置有一段共享内存,应用进程和网络协议栈进程都可以访问该段共享内存。在该共享内存中,设置有事件队列,用于将存储通知事件。在该共享内存中,还设置有接收队列和发送队列,用于进程之间传递数据。
在该共享内存中,还可以创建一个事件句柄(eventfd)和函数句柄(epfd)。该句柄根据所选用的操作系统的不同可以为handler或file descriptor。
该函数句柄为内核态中的多路复用监听函数的句柄,通过该多路复用监听函数可以实现CPU处理数据的分时复用。该事件句柄被内核态的多路复用监听函数监听,即通过关联事件句柄和函数句柄来实现监听。在CPU处理进程时,设置有一个工作列表和一个等待列表,工作列表中存储有需要分时处理的进程,在等待列表中存储有被阻塞的进程。其中,该多路复用监听函数可以是epoll函数、select函数或poll函数。
在多路复用监听函数为select函数或poll函数时,CPU会通过轮询的方式确定等待列表中的句柄所对应的进程是否被唤醒。
在多路复用监听函数为epoll函数(epoll_wait)时,CPU会通过回调的方式确定等待列表中的句柄所对应的进程是否被唤醒,从而唤醒对应的进程进行处理。
相对于select函数和poll函数,epoll函数可以避免轮询过程所消耗的资源,降低了获取通知事件所需要的资源,并且相对于select函数和poll函数,epoll函数可以监听更多的句柄。
后续方案中,以多路复用监听函数为epoll函数为例进行描述。并且,以用户态中的一个应用进程和一个网络协议栈进程进行事件通知为例进行描述。其中,在用户态中,应用进程和网络协议栈进程也需要被创建,并在创建事件句柄后,等待数据交互。
也就是说,在应用进程中的u_epoll_wait被关联到内核态的epoll_wait,通过epoll_wait监听用于唤醒事件句柄(eventfd)。在初始状态下,该事件句柄被置为失效状态。
S101、调用第一用户态任务向共享内存的事件队列中添加通知事件,并将事件句柄置于生效状态。
当一个用户态中的应用进程被阻塞后,内核态中的epoll_wait会监听eventfd是否被置为生效状态。该eventfd可以被设置为两种状态,当eventfd被置为1时,代表eventfd生效,会触发对应的u_epoll_wait,当eventfd被置为0时,代表eventfd失效,u_epoll_wait未被触发。
在第一用户态任务(即,网络协议栈进程)接收到数据(即,第一数据)时,对第一数据进行解析,并将第一数据(图2中数据1)写入到接收队列中。根据第一数据确定于该第一数据相关的事件通知(即,第一事件),将该第一事件写入到共享内存的事件队列中。在事件通知中,可以包含有事件类型,即告知应用进程进行读、写、控制等操作,当然在时间通知中还可以包含有其他信息,比如针对网络数据的处理,可以包含会话索引、具体数据的存储位置以及数据的长度等,从而将存储到存储位置。第一事件表示需要从接收队列中读取数据。
此时,网络协议进程需要调用内核态中的写操作向修改eventfd的状态,将其修改为生效状态,即将eventfd置为1。
S102、当事件句柄处于生效状态时,唤醒第二用户态任务,唤醒第二用户态任务,调用第二用户态任务将事件句柄置于失效状态,并从事件队列中获取通知事件。
在eventfd被置于生效状态前,应用进程被epoll_wait阻塞。当eventfd被修改为生效状态后,内核态的epoll_wait监听到eventfd的状态变化从而触发用户态中的u_epoll_wait,唤醒应用进程。
此时,应用进程会通过内核态的读操作将共享内存中的eventfd置于失效状态(即,将eventfd置为0),以便于下一次唤醒应用进程。并且,从事件队列中读取写入其中的第一事件。
应用进程从第一事件中可以获知,需要执行的操作为读取操作,应用进程调用用户态中的读操作(u_read)进而从接收队列中读取其中所写入的第一数据。
本说明书实施方式中,通过内核态的多路复用监听函数监听用户态任务创建的事件句柄,在第一用户态任务向事件队列中添加通知事件时,将该事件句柄置于生效状态,以使第二用户态任务通过内核态中的多路复用监听函数感知到该通知事件的到达,获取该通知事件,实现两个用户态任务之间的事件通知,并且可以根据该通知事件进行相对应的处理,避免互斥锁被一个用户态任务占用时出现故障,无法释放互斥锁,从而使得另一个用户态任务无法获取互斥锁导致的无法获取事件通知的问题,提升了设备的用户态任务之间进行事件通知的可靠性。
另外,上述的步骤S100-S102也可以应用于第一用户态任务获取第二用户态任务所发送的数据,并将该数据发送到设备外的过程。
在步骤S101中,当应用进程向发送队列中写入第二数据后,调用网络协议栈进程从该发送队列中获取第二数据(图2中数据2),对第二数据进行处理,并对外发送出去。
此后,网络协议栈进程将会向共享内存中的事件队列写入第二事件,该第二事件用以通知应用进程继续向发送队列中写入数据。在写入第二事件后,网络协议栈进程调用内核态的写操作将eventfd置于生效状态(即,将eventfd置为1),内核态的epoll_wait监听到eventfd的状态变化从而触发用户态中的u_epoll_wait,唤醒应用进程。
此时,应用进程会通过内核态的读操作将共享内存中的eventfd置于失效状态(即,将eventfd置为0),以便于下一次唤醒应用进程。并且,从事件队列中读取写入其中的第二事件。
应用进程从第二事件中可以获知,需要执行的操作为写入操作,应用进程调用用户态的写操作(u_write)进而向发送队列中写入第三数据。
在一次发送流程中,由于发送队列的空间限制,应用进程会多次写入的方式进行处理。在网络协议栈进程从发送队列接收到第二数据时,可以根据第二数据中所携带的报文大小等参数确定所要发送的数据大小。当第二数据未到达该数据大小时,网络协议栈进程会继续向事件队列中写入第二事件以通知应用进程将后续的数据写入到发送队列,当累计发送的数据到达数据大小时,在完成发送后,无需再向事件队列中写入第二事件来通知应用进程发送。
另外,在内核态的epoll函数中,epoll_wait设置有超时时间,该超时时间用于唤醒用户态的第二用户态任务查看与事件句柄,以确定是否有事件被写入,从而避免用户态任务由于某些原因未能被唤醒时出现的事件通知无法被获取的问题。
举例来说,在应用进程中,可以调用epoll函数设置该超时时间,并且还设置有一计时器。在应用进程被阻塞后,该计时器开始计时。当达到超时时间的情况下,通过epoll_wait唤醒u_epoll_wait查看事件队列。此时,如果事件队列中存在通知事件,则获取该通知事件并进行相应的处理,如事件队列中不存在通知事件,则重新对该应用进程进行阻塞,并重启计时器进行计时,以此循环。
在采用互斥锁的方案中,超时时间是设置在用户态的多路复用监听函数,在到达超时时间的情况下,如果互斥锁未能够被释放,那么,应用进程仍然无法获得条件变量的操作权限,也就无法从共享内存中获取到事件通知,这样一来,将会导致所设置的超时时间无法精确地实现。当采用本申请的方案时,并未设置互斥锁这样的操作权限,超时时间设置在内核态的多路复用监听函数中。在超时时间到达的情况下,可以通过根据事件句柄建立的映射关系,以内核态的多路复用监听函数触发用户态的多路复用监听函数,唤醒用户态中的任务(进程或线程),从共享内存中的事件队列中获取到事件通知,避免所设置的超时时间受到互斥锁的影响,提升了设置的超时时间被执行的精准性。
针对该网络协议栈进程和应用进程之间的交互,还可以包含其他流程。比如,当该网络协议为TCP/IP协议(传输控制协议/互联协议,Transmission Control Protocol/Internet Protocol)时,需要通过共享内存与应用进程交互建立TCP/IP会话等。
本申请所涉及的设备,可以是包含网卡的个人电脑、服务器和防火墙等设备,并且该设备中,可以运行有至少两个用户态任务,并且两个用户态任务之间需要进行数据交互,其中,包含通知事件。该用户态任务可以是网络协议栈进程和应用进程。
针对其他进程与进程之间的事件通知,或其他线程与线程之间的事件通知,可以包含其他过程,对此不再展开描述。
相对应的,本申请还提供了一种事件通知装置,如图3所示,包括:
创建单元,用于调用第二用户态任务在共享内存中创建事件句柄,其中,事件句柄被内核态的多路复用监听函数监听;
添加单元,用于调用第一用户态任务向共享内存的事件队列中添加通知事件,并将事件句柄置于生效状态;
获取单元,用于当事件句柄处于生效状态时,唤醒第二用户态任务,调用第二用户态任务将事件句柄置于失效状态,并从事件队列中获取通知事件。
可选的,多路复用监听函数为epoll函数。
可选的,epoll函数中设置有超时时间;
该装置还包括:
计时单元,用于若到达超时时间,则调用第一用户态任务获取事件队列中所添加的通知事件。
可选的,多路复用监听函数为select函数或poll函数。
可选的,第二用户态任务和第一用户态任务为线程或进程。
进一步的,添加单元,包括:
接收模块,用于调用第一用户态任务接收第一数据,将第一数据写入到接收队列;
写入模块,用于调用第一用户态任务根据第一数据,向共享内存的事件队列中写入第一事件;
生效模块,用于调用第一用户态任务通过内核态的写操作将事件句柄置于生效状态;
获取单元,包括:
唤醒模块,用于当事件句柄处于生效状态时,唤醒第二用户态任务;
失效模块,用于调用第二用户态任务通过内核态的读操作将事件句柄置于失效状态;
读取模块,用于从事件队列中获取第一事件,并根据第一事件从接收队列中读取第一数据。
进一步的,添加单元,包括:
发送模块,用于调用第一用户态任务从发送队列中获取第二数据,并发送第二数据;
写入模块,用于调用第一用户态任务向共享内存的事件队列中写入第二事件;
生效模块,用于调用第一用户态任务通过内核态的写操作将事件句柄置于生效状态;
获取单元,包括:
唤醒模块,用于当事件句柄处于生效状态时,唤醒第二用户态任务;
失效模块,用于调用第二用户态任务通过内核态的读操作将事件句柄置于失效状态;
写入模块,用于从事件队列中获取第二事件,并根据第二事件将第三数据写入发送队列。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。
以上所述仅为本说明书的较佳实施方式而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (10)
1.一种事件通知方法,其特征在于,包括:
在共享内存中创建事件句柄,其中,所述事件句柄被内核态的多路复用监听函数监听;
调用第一用户态任务向所述共享内存的事件队列中添加通知事件,并将所述事件句柄置于生效状态;
当所述事件句柄处于生效状态时,唤醒第二用户态任务,调用所述第二用户态任务将所述事件句柄置于失效状态,并从所述事件队列中获取所述通知事件;
所述调用第一用户态任务向所述共享内存的事件队列中添加通知事件,并将所述事件句柄置于生效状态,包括:
调用第一用户态任务接收第一数据,将所述第一数据写入到接收队列;
调用第一用户态任务根据所述第一数据,向所述共享内存的事件队列中写入第一事件;
调用第一用户态任务通过内核态的写操作将所述事件句柄置于生效状态;
所述当所述事件句柄处于生效状态时,唤醒第二用户态任务,调用所述第二用户态任务将所述事件句柄置于失效状态,并从所述事件队列中获取通知事件,包括:
当所述事件句柄处于生效状态时,唤醒第二用户态任务;
调用所述第二用户态任务通过内核态的读操作将所述事件句柄置于失效状态;
从所述事件队列中获取第一事件,并根据所述第一事件从所述接收队列中读取所述第一数据;或者,
所述调用第一用户态任务向所述共享内存的事件队列中添加通知事件,并将所述事件句柄置于生效状态,包括:
调用第一用户态任务从发送队列中获取第二数据,并发送所述第二数据;
调用第一用户态任务向所述共享内存的事件队列中写入第二事件;
调用第一用户态任务通过内核态的写操作将所述事件句柄置于生效状态;
所述当所述事件句柄处于生效状态时,唤醒第二用户态任务,调用所述第二用户态任务将所述事件句柄置于失效状态,并从所述事件队列中获取的通知事件,包括:
当所述事件句柄处于生效状态时,唤醒第二用户态任务;
调用所述第二用户态任务通过内核态的读操作将所述事件句柄置于失效状态;
从所述事件队列中获取第二事件,并根据所述第二事件将第三数据写入所述发送队列。
2.根据权利要求1所述的方法,其特征在于,所述多路复用监听函数为epoll函数。
3.根据权利要求2所述的方法,其特征在于,所述epoll函数中设置有超时时间;
所述方法还包括:
若到达所述超时时间,则调用第二用户态任务获取所述事件队列中所添加的通知事件。
4.根据权利要求1所述的方法,其特征在于,所述多路复用监听函数为select函数或poll函数。
5.根据权利要求1所述的方法,其特征在于,所述第二用户态任务和所述第一用户态任务为线程或进程。
6.一种事件通知装置,其特征在于,包括:
创建单元,用于在共享内存中创建事件句柄,其中,所述事件句柄被内核态的多路复用监听函数监听;
添加单元,用于调用第一用户态任务向所述共享内存的事件队列中添加通知事件,并将所述事件句柄置于生效状态;
获取单元,用于当所述事件句柄处于生效状态时,唤醒第二用户态任务,调用第二用户态任务将所述事件句柄置于失效状态,并从所述事件队列中获取通知事件;
所述添加单元,包括:
接收模块,用于调用第一用户态任务接收第一数据,将所述第一数据写入到接收队列;
写入模块,用于调用第一用户态任务根据所述第一数据,向所述共享内存的事件队列中写入第一事件;
生效模块,用于调用第一用户态任务通过内核态的写操作将所述事件句柄置于生效状态;
所述获取单元,包括:
唤醒模块,用于当所述事件句柄处于生效状态时,唤醒第二用户态任务;
失效模块,用于调用第二用户态任务通过内核态的读操作将所述事件句柄置于失效状态;
读取模块,用于从所述事件队列中获取第一事件,并根据所述第一事件从所述接收队列中读取所述第一数据;或者,
所述添加单元,包括:
发送模块,用于调用第一用户态任务从发送队列中获取第二数据,并发送所述第二数据;
写入模块,用于调用第一用户态任务向所述共享内存的事件队列中写入第二事件;
生效模块,用于调用第一用户态任务通过内核态的写操作将所述事件句柄置于生效状态;
所述获取单元,包括:
唤醒模块,用于当所述事件句柄处于生效状态时,唤醒第二用户态任务;
失效模块,用于调用第二用户态任务通过内核态的读操作将所述事件句柄置于失效状态;
写入模块,用于从所述事件队列中获取第二事件,并根据所述第二事件将第三数据写入所述发送队列。
7.根据权利要求6所述的装置,其特征在于,所述多路复用监听函数为epoll函数。
8.根据权利要求7所述的装置,其特征在于,所述epoll函数中设置有超时时间;
所述装置还包括:
计时单元,用于若到达所述超时时间,则调用第二用户态任务获取所述事件队列中所添加的通知事件。
9.根据权利要求6所述的装置,其特征在于,所述多路复用监听函数为select函数或poll函数。
10.根据权利要求6所述的装置,其特征在于,所述第二用户态任务和所述第一用户态任务为线程或进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011527642.9A CN112698963B (zh) | 2020-12-22 | 2020-12-22 | 一种事件通知方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011527642.9A CN112698963B (zh) | 2020-12-22 | 2020-12-22 | 一种事件通知方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112698963A CN112698963A (zh) | 2021-04-23 |
CN112698963B true CN112698963B (zh) | 2024-06-07 |
Family
ID=75510363
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011527642.9A Active CN112698963B (zh) | 2020-12-22 | 2020-12-22 | 一种事件通知方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112698963B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113342554B (zh) * | 2021-08-02 | 2022-01-04 | 阿里云计算有限公司 | Io多路复用方法、介质、设备和操作系统 |
CN114697194B (zh) * | 2022-02-17 | 2023-07-14 | 清华大学 | 阻塞式事件通知方法及装置 |
CN116708597B (zh) * | 2023-08-04 | 2023-10-24 | 新华三技术有限公司 | 一种数据处理方法及装置 |
CN118034958A (zh) * | 2024-04-07 | 2024-05-14 | 阿里云计算有限公司 | 一种多进程场景的任务状态通知系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013131440A1 (en) * | 2012-03-09 | 2013-09-12 | Tencent Technology (Shenzhen) Company Limited | Network communication method and system |
CN109002363A (zh) * | 2018-06-21 | 2018-12-14 | 郑州云海信息技术有限公司 | 一种事件处理方法、装置、设备及可读存储介质 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9158601B2 (en) * | 2013-05-10 | 2015-10-13 | Vmware, Inc. | Multithreaded event handling using partitioned event de-multiplexers |
-
2020
- 2020-12-22 CN CN202011527642.9A patent/CN112698963B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013131440A1 (en) * | 2012-03-09 | 2013-09-12 | Tencent Technology (Shenzhen) Company Limited | Network communication method and system |
CN109002363A (zh) * | 2018-06-21 | 2018-12-14 | 郑州云海信息技术有限公司 | 一种事件处理方法、装置、设备及可读存储介质 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
Non-Patent Citations (2)
Title |
---|
CloudStack恶意隐藏进程监测框架设计;崔竞松;田昌友;郭迟;尹雪;;计算机工程(02);全文 * |
基于netlink的linux服务器集群统一外设事件监听机制;汪敏;;电子设计工程(23);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112698963A (zh) | 2021-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112698963B (zh) | 一种事件通知方法及装置 | |
EP1438674B1 (en) | System for integrating java servlets with asynchronous messages | |
US6941341B2 (en) | Method and apparatus for balancing distributed applications | |
US7603676B2 (en) | ASP.NET HTTP runtime | |
JP4690437B2 (ja) | ネットワークアプリケーションにおける通信方法、通信装置及びそのためのプログラム | |
US6988226B2 (en) | Health monitoring system for a partitioned architecture | |
JP5710017B2 (ja) | 電気通信ネットワークにおけるセル回復のための方法およびシステム | |
US7937499B1 (en) | Methods and apparatus for dynamically switching between polling and interrupt mode for a ring buffer of a network interface card | |
WO1998008164A1 (en) | Interprocess communication in a distributed computer environment | |
US9231995B2 (en) | System and method for providing asynchrony in web services | |
TW201833768A (zh) | 資源載入方法及裝置 | |
US20070130574A1 (en) | Method and system for event-based remote procedure call implementation in a distributed computing system | |
US20050097226A1 (en) | Methods and apparatus for dynamically switching between polling and interrupt to handle network traffic | |
US7552446B1 (en) | Methods and apparatus for a timer event service infrastructure | |
WO2023011249A1 (zh) | Io多路复用方法、介质、设备和操作系统 | |
JPH1049384A (ja) | マルチスレッド環境内でオブジェクトを処分する方法および装置 | |
CN113986491A (zh) | 一种基于cluster的Node.js多进程管理方法及系统 | |
US20020188766A1 (en) | System and method for communicating information between application programs | |
EP1784720A2 (en) | Method and system for reading data, related network and computer program product therefor | |
CN113835904A (zh) | 一种远程过程调用控制方法、装置、设备及存储介质 | |
CN116820430B (zh) | 异步读写方法、装置、计算机设备及存储介质 | |
CN115509771A (zh) | 事件监听方法、装置及电子设备 | |
JP4079605B2 (ja) | マルチプロセス構成における通信制御装置およびそのためのプログラム | |
Engler et al. | Fakultät für Informatik | |
CN116566795A (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 |