CN114697194B - 阻塞式事件通知方法及装置 - Google Patents

阻塞式事件通知方法及装置 Download PDF

Info

Publication number
CN114697194B
CN114697194B CN202210146335.9A CN202210146335A CN114697194B CN 114697194 B CN114697194 B CN 114697194B CN 202210146335 A CN202210146335 A CN 202210146335A CN 114697194 B CN114697194 B CN 114697194B
Authority
CN
China
Prior art keywords
interface
queue
file
event
monitored
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
Application number
CN202210146335.9A
Other languages
English (en)
Other versions
CN114697194A (zh
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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN202210146335.9A priority Critical patent/CN114697194B/zh
Publication of CN114697194A publication Critical patent/CN114697194A/zh
Application granted granted Critical
Publication of CN114697194B publication Critical patent/CN114697194B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/06Management of faults, events, alarms or notifications
    • H04L41/0654Management of faults, events, alarms or notifications using network fault recovery
    • H04L41/0659Management of faults, events, alarms or notifications using network fault recovery by isolating or reconfiguring faulty entities
    • H04L41/0661Management of faults, events, alarms or notifications using network fault recovery by isolating or reconfiguring faulty entities by reconfiguring faulty entities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/30Network architectures or network communication protocols for network security for supporting lawful interception, monitoring or retaining of communications or communication related information
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • H04L69/162Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Telephonic Communication Services (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种阻塞式事件通知方法及装置,方法包括:根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,将为网络套接字的待监听文件添加至用户态协议栈的监听队列中;根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中有网络套接字且用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;先入先出队列中无待通知事件;对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;在应用程序进入唤醒状态时,向应用程序发送待通知事件。该方法能够使用户态事件聚合通知等待接口支持阻塞式语义,提高了用户态协议栈对现有应用程序的兼容性。

Description

阻塞式事件通知方法及装置
技术领域
本发明涉及信息通信技术领域,尤其涉及一种阻塞式事件通知方法及装置。
背景技术
数据中心服务器运行的传统网络应用主要通过Linux内核来监听并获取新事件,为了对Linux内核的协议栈进行优化,基于高性能数据包收发框架开发的用户态协议栈应运而生。
然而,对于用户态协议栈来说,由于用户态协议栈和应用程序同时运行在用户态,用户态协议栈没有权限阻塞或唤醒应用程序,导致用户态协议栈提供的用户态事件聚合通知等待接口无法支持阻塞式语义。
发明内容
本发明提供一种阻塞式事件通知方法及装置,用以解决现有技术中用户态事件聚合通知等待接口无法支持阻塞式语义的缺陷。
第一方面,本发明提供一种阻塞式事件通知方法,该方法包括:
根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中;
根据应用程序发起的第二接口调用请求,判断所述接口兴趣队列中是否有网络套接字,在所述接口兴趣队列中有网络套接字,且所述用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,所述先入先出队列中无待通知事件;
对所述先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;
在应用程序进入唤醒状态时,向应用程序发送待通知事件。
根据本发明提供的阻塞式事件通知方法,对所述先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态,包括:
通过内核态接口监听所述先入先出队列;
若所述先入先出队列无待通知事件,则通过所述内核态接口使应用程序进入阻塞状态;
若所述用户态协议栈的监听队列中所述待监听文件有待通知事件,则改变所述先入先出队列的当前状态,以向操作系统内核发出结束阻塞指令;
所述操作系统内核用于通过所述内核态接口接收所述结束阻塞指令,根据所述结束阻塞指令使应用程序结束阻塞并进入唤醒状态。
根据本发明提供的阻塞式事件通知方法,向接口兴趣队列中添加待监听文件之后,还包括:
将为非网络套接字的待监听文件添加至内核的监听队列中。
根据本发明提供的阻塞式事件通知方法,还包括:
根据应用程序发起的第二接口调用请求,判断所述接口兴趣队列中是否有网络套接字,在所述接口兴趣队列中无网络套接字,且所述内核的监听队列中所述待监听文件无待通知事件时,通过内核态接口使应用程序进入阻塞状态。
根据本发明提供的阻塞式事件通知方法,在所述接口兴趣队列中无网络套接字,且所述内核的监听队列中所述待监听文件无待通知事件时,通过内核态接口使应用程序进入阻塞状态之后,还包括:
若所述内核的监听队列中所述待监听文件有待通知事件,则通过所述内核态接口唤醒应用程序;
向应用程序发送所述待通知事件。
根据本发明提供的阻塞式事件通知方法,所述内核态接口为内核态事件聚合通知等待接口。
根据本发明提供的阻塞式事件通知方法,所述第一接口调用请求为对第一用户态接口的调用请求,所述第一用户态接口为用户态事件聚合通知控制接口;
所述第二接口调用请求为对第二用户态接口的调用请求,所述第二用户态接口为用户态事件聚合通知等待接口。
第二方面,本发明还提供一种阻塞式事件通知装置,该装置包括:
第一处理模块,用于根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中;
第二处理模块,用于根据应用程序发起的第二接口调用请求,判断所述接口兴趣队列中是否有网络套接字,在所述接口兴趣队列中有网络套接字,且所述用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,所述先入先出队列中无待通知事件;
第三处理模块,用于对所述先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;
通知模块,在应用程序进入唤醒状态时,向应用程序发送待通知事件。
第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述阻塞式事件通知方法的步骤。
第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述阻塞式事件通知方法的步骤。
本发明提供的阻塞式事件通知方法及装置,通过向接口兴趣队列中添加待监听文件,并确定待监听文件的监听队列,在接口兴趣队列中有网络套接字,且用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列,对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态,从而使用户态事件聚合通知等待接口能够支持阻塞式语义,提高了用户态协议栈对现有应用程序的兼容性。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的阻塞式事件通知方法的流程示意图之一;
图2是本发明提供的阻塞式事件通知方法的流程示意图之二;
图3是本发明提供的阻塞式事件通知方法的流程示意图之三;
图4是本发明提供的阻塞式事件通知方法的流程示意图之四;
图5是本发明提供的阻塞式事件通知装置的结构示意图;
图6是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先对本发明针对的技术背景和现有的事件通知方法存在的不足进行详细说明。
数据中心服务器运行的传统网络应用,主要通过Linux内核来监听并获取新事件,Linux内核主要存在以下两大问题:
第一,对用户来说,随着高速网卡和多核CPU的不断发展,Linux内核的网络协议栈成为主要的性能瓶颈,无法满足当前网络应用的高性能网络流量处理需求;
第二,对开发者来说,由于牵涉到操作系统内核,新功能调试难,开发周期长。因此,自从Linux诞生之日起,对于内核的改进就一直在进行。
针对Linux内核进行优化的方案中,高性能数据包收发(Input/Output,I/O)框架,如Intel DPDK、Netmap等,虽然极大提高了数据收发性能,但是这些高性能数据包I/O框架本身并没有提供完整的事件聚合通知机制,阻碍了其在业界的广泛使用。
基于高性能数据包I/O框架开发的用户态协议栈,例如mTCP、IX等,虽然具有较高的性能,但是其提供的应用程序接口(Application Programming Interface,API)与可移植操作系统接口(Portable Operating System Interface for Unix,POSIX API)的语义和功能不同,不能完全兼容现有应用程序。
操作系统内核提供的内核态事件聚合通知等待接口是高性能网络应用常用的API之一,应用程序通过调用该接口,可以监听网络套接字(Socket)、先入先出队列(First InFirst Out,FIFO)等多种类型文件的新事件。当无新事件时,操作系统内核可以让应用程序进入阻塞状态,节约CPU资源。当新事件到来时,操作系统内核可以唤醒应用程序读取新事件。
然而,对于用户态协议栈来说,由于用户态协议栈和应用程序同时运行在用户态,用户态协议栈没有权限阻塞或唤醒应用程序,导致用户态协议栈提供的用户态事件聚合通知等待接口无法支持阻塞式语义。
另外,由于现有用户态协议栈主要负责网络数据的收发,其提供的用户态事件聚合通知等待接口仅支持监听网络套接字的新事件而不支持监听其他类型文件的新事件。
这些不足限制了用户态协议栈对现有应用程序的兼容性,提高了将现有应用程序移植到用户态协议栈上的难度。
为此,本发明对现有的用户态阻塞式事件通知方法进行改进,下面结合图1-图6描述本发明实施例提供的阻塞式事件通知方法及装置,以及应用该方法的电子设备。
图1示出了本发明实施例提供的阻塞式事件通知方法,该方法包括:
步骤110:根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中。
更优地,向接口兴趣队列中添加待监听文件之后,还可以包括:
将为非网络套接字的待监听文件添加至内核的监听队列中。
在示例性实施例中,参见附图2,向接口兴趣队列中添加待监听文件,并确定待监听文件的监听队列的过程,具体可以包括:
步骤210:若应用程序调用第一用户态接口;
步骤220:将待监听文件的文件描述符添加至接口兴趣队列中;
步骤230:判断待监听文件是否为网络套接字(Socket);
步骤240:若是,则将待监听文件的文件描述符添加至用户态协议栈的监听队列中;
步骤250:若否,则将待监听文件的文件描述符添加至内核的监听队列中。
需要说明的是,本实施例中第一接口调用请求为对第一用户态接口的调用请求,第一用户态接口可以是用户态(阻塞式)事件聚合通知控制接口epoll_ctl(),应用程序调用该接口时,可以发起添加待监听文件的请求,进而可以将待监听文件的文件描述符添加至epoll兴趣队列(即接口兴趣队列)中。
本实施例可以添加多个待监听文件,进而可以同时监听多个感兴趣文件,从而后续能够实现阻塞式事件的聚合通知。
可以理解的是,本实施例中待监听文件可以是用于传输数据的网络文件,此时该待监听文件的事件可以是读事件或者写事件。
步骤120:根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中有网络套接字,且用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,先入先出队列中无待通知事件。
需要说明的是,本实施例中第二接口调用请求为对第二用户态接口的调用请求,第二用户态接口可以是用户态(阻塞式)事件聚合通知等待接口epoll_wait()。
步骤130:对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态。
在示例性实施例中,对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态的过程,具体可以包括:
通过内核态接口监听先入先出队列;
若先入先出队列无待通知事件,则通过内核态接口使应用程序进入阻塞状态;
若用户态协议栈的监听队列中待监听文件有待通知事件,则改变先入先出队列的当前状态,以向操作系统内核发出结束阻塞指令;
操作系统内核用于通过内核态接口接收结束阻塞指令,根据结束阻塞指令使应用程序结束阻塞并进入唤醒状态。
考虑到实际应用过程中,只有操作系统内核才能直接使应用程序进入阻塞或唤醒状态,本实施例中用户态协议栈通过调用内核态接口,可以间接地使应用程序进入阻塞或唤醒状态,进而使得用户态协议栈提供的用户态事件聚合通知等待接口可以支持阻塞式语义。
步骤140:在应用程序进入唤醒状态时,向应用程序发送待通知事件。
更优地,本实施例提供的阻塞式事件通知方法,还可以包括:
根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中无网络套接字,且内核的监听队列中待监听文件无待通知事件时,通过内核态接口使应用程序进入阻塞状态。
进一步地,在接口兴趣队列中无网络套接字,且内核的监听队列中待监听文件无待通知事件时,通过内核态接口使应用程序进入阻塞状态之后,还可以包括:
若内核的监听队列中待监听文件有待通知事件,则通过内核态接口唤醒应用程序;
向应用程序发送待通知事件。
需要说明的是,本实施例中内核态接口可以是内核态(阻塞式)事件聚合通知等待接口kernel_epoll_wait()。
本实施例针对的第一用户态接口、第二用户态接口以及内核态接口均指的是阻塞式接口,是指在未监听到感兴趣文件的新事件时,即没有需要向应用程序通知的事件时,就使应用程序进入阻塞状态,等待新事件的到来。而对于非阻塞式接口,则没有上述等待环节。
参见附图3,在应用程序调用用户态事件聚合通知等待接口epoll_wait()时,本实施例提供的阻塞式事件通知方法,具体执行以下流程:
步骤310:在应用程序调用第二用户态接口时,即调用用户态事件聚合通知等待接口epoll_wait();
步骤320:判断epoll兴趣队列(即接口兴趣队列)中是否有网络套接字;
步骤330:若epoll兴趣队列中有网络套接字,则判断用户态协议栈的监听队列中待监听文件是否已有新事件(即待通知事件);
若有新事件,则执行步骤390;
若没有新事件,则执行步骤340:创建FIFO(First Input First Output,先入先出队列);
步骤350:调用内核态事件聚合通知等待接口kernel_epoll_wait()监听先入先出队列,此时先入先出队列中无新事件;
步骤360:内核态事件聚合通知等待接口kernel_epoll_wait()使应用程序进入阻塞状态,以等待新事件;
步骤370:若epoll兴趣队列中没有网络套接字,则调用内核态事件聚合通知等待接口kernel_epoll_wait();
步骤380:判断内核的监听队列中的待监听文件是否已有新事件(即待通知事件),若有新事件,则执行步骤390;若没有新事件,则执行步骤360;
步骤390:返回新事件给应用程序,事件通知流程结束。
参见附图4,当新事件到来时,本实施例提供的阻塞式事件通知方法,具体执行以下流程:
步骤410:当内核的监听队列中的待监听文件有新事件(即待通知事件)时,依次执行步骤440和步骤450;
步骤420:当用户态协议栈的监听队列中待监听文件有新事件时,依次执行步骤430、步骤440和步骤450;
步骤430:改变先入先出队列的当前状态,具体可以通过用户态协议栈将任意字符写入先入先出队列中,比如用户态协议栈可以通过将“1”写入先入先出队列中以产生一个新事件;
步骤440:通过内核态事件聚合通知等待接口kernel_epoll_wait()结束阻塞,使操作系统内核唤醒应用程序;
步骤450:通过用户态事件聚合通知等待接口epoll_wait()将新事件返回给应用程序。
这样的话,通过创建先入先出队列,利用先入先出队列与内核态事件聚合通知等待接口配合,能够实现对应用程序阻塞状态和唤醒状态的控制,可以解决传统事件通知过程中,用户态协议栈没有权限阻塞或唤醒应用程序,导致用户态协议栈提供的用户态事件聚合通知等待接口无法支持阻塞式语义的问题。
同时,本实施例提供的方法中待监听文件既可以是网络套接字,也可以是其他类型文件,这样的话,该方法既可以监听网络套接字的新事件,也可以监听其他类型文件的新事件,提高了用户态协议栈对现有应用程序的兼容性,进而降低了将现有应用程序移植到用户态协议栈上的难度。
下面对本发明提供的阻塞式事件通知装置进行描述,下文描述的阻塞式事件通知装置与上文描述的阻塞式事件通知方法可相互对应参照。
图5示出了本发明实施例提供的阻塞式事件通知装置,该装置包括:
第一处理模块510,用于根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中;
第二处理模块520,用于根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中有网络套接字,且用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,先入先出队列中无待通知事件;
第三处理模块530,用于对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;
通知模块540,在应用程序进入唤醒状态时,向应用程序发送待通知事件。
在示例性实施例中,上述第一处理模块510,具体还可以用于:将为非网络套接字的待监听文件添加至内核的监听队列中。
在示例性实施例中,上述第三处理模块530具体可以用于:通过内核态接口监听先入先出队列;若先入先出队列无待通知事件,则通过内核态接口使应用程序进入阻塞状态;若用户态协议栈的监听队列中待监听文件有待通知事件,则改变先入先出队列的当前状态,以向操作系统内核发出结束阻塞指令;操作系统内核用于通过内核态接口接收结束阻塞指令,根据结束阻塞指令使应用程序结束阻塞并进入唤醒状态。
更优地,本实施例提供的阻塞式事件通知装置,还可以包括:
第四处理模块,用于根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中无网络套接字,且内核的监听队列中待监听文件无待通知事件时,通过内核态接口使应用程序进入阻塞状态。
进一步地,上述第四处理模块还用于:在内核的监听队列中待监听文件有待通知事件时,通过内核态接口唤醒应用程序;向应用程序发送待通知事件。
需要说明的是,本实施例中第一接口调用请求为对第一用户态接口的调用请求,第一用户态接口可以是用户态事件聚合通知控制接口;
第二接口调用请求为对第二用户态接口的调用请求,第二用户态接口可以是用户态事件聚合通知等待接口,内核态接口可以是内核态事件聚合通知等待接口。
由此可见,本实施例提供的阻塞式事件通知装置,当应用程序调用用户态事件聚合通知等待接口监听文件事件时,首先需要判断这个文件是否为网络套接字,如果不是网络套接字,则调用内核态事件聚合通知等待接口来监听该套接字。如果是网络套接字,则借助先入先出队列和内核态事件聚合通知等待接口来监听网络套接字。从而可以获取网络套接字、先入先出队列等多种类型文件的新事件,并支持阻塞式语义,实现了用户态阻塞式事件的聚合通知功能。
图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行阻塞式事件通知方法,该方法包括:根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中;根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中有网络套接字,且用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,先入先出队列中无待通知事件;对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;在应用程序进入唤醒状态时,向应用程序发送待通知事件。
此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的阻塞式事件通知方法,该方法包括:根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中;根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中有网络套接字,且用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,先入先出队列中无待通知事件;对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;在应用程序进入唤醒状态时,向应用程序发送待通知事件。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的阻塞式事件通知方法,该方法包括:根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中;根据应用程序发起的第二接口调用请求,判断接口兴趣队列中是否有网络套接字,在接口兴趣队列中有网络套接字,且用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,先入先出队列中无待通知事件;对先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;在应用程序进入唤醒状态时,向应用程序发送待通知事件。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (9)

1.一种阻塞式事件通知方法,其特征在于,包括:
根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中,所述第一接口调用请求为对第一用户态接口的调用请求,所述第一用户态接口为用户态事件聚合通知控制接口;
根据应用程序发起的第二接口调用请求,判断所述接口兴趣队列中是否有网络套接字,在所述接口兴趣队列中有网络套接字,且所述用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,所述第二接口调用请求为对第二用户态接口的调用请求,所述第二用户态接口为用户态事件聚合通知等待接口,所述先入先出队列中无待通知事件;
对所述先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;
在应用程序进入唤醒状态时,向应用程序发送待通知事件;
向接口兴趣队列中添加待监听文件,并确定待监听文件的监听队列的步骤,具体包括:
确定应用程序调用第一用户态接口;
将所述待监听文件的文件描述符添加至所述接口兴趣队列中;
判断所述待监听文件是否为网络套接字;
若是,则将所述待监听文件的文件描述符添加至用户态协议栈的监听队列中;
若否,则将所述待监听文件的文件描述符添加至内核的监听队列中。
2.根据权利要求1所述的阻塞式事件通知方法,其特征在于,对所述先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态,包括:
通过内核态接口监听所述先入先出队列;
若所述先入先出队列无待通知事件,则通过所述内核态接口使应用程序进入阻塞状态;
若所述用户态协议栈的监听队列中所述待监听文件有待通知事件,则改变所述先入先出队列的当前状态,以向操作系统内核发出结束阻塞指令;
所述操作系统内核用于通过所述内核态接口接收所述结束阻塞指令,根据所述结束阻塞指令使应用程序结束阻塞并进入唤醒状态。
3.根据权利要求1所述的阻塞式事件通知方法,其特征在于,向接口兴趣队列中添加待监听文件之后,还包括:
将为非网络套接字的待监听文件添加至内核的监听队列中。
4.根据权利要求3所述的阻塞式事件通知方法,其特征在于,还包括:
根据应用程序发起的第二接口调用请求,判断所述接口兴趣队列中是否有网络套接字,在所述接口兴趣队列中无网络套接字,且所述内核的监听队列中所述待监听文件无待通知事件时,通过内核态接口使应用程序进入阻塞状态。
5.根据权利要求4所述的阻塞式事件通知方法,其特征在于,在所述接口兴趣队列中无网络套接字,且所述内核的监听队列中所述待监听文件无待通知事件时,通过内核态接口使应用程序进入阻塞状态之后,还包括:
若所述内核的监听队列中所述待监听文件有待通知事件,则通过所述内核态接口唤醒应用程序;
向应用程序发送所述待通知事件。
6.根据权利要求2、4或5所述的阻塞式事件通知方法,其特征在于,所述内核态接口为内核态事件聚合通知等待接口。
7.一种阻塞式事件通知装置,其特征在于,包括:
第一处理模块,用于根据应用程序发起的第一接口调用请求,向接口兴趣队列中添加待监听文件,并将为网络套接字的待监听文件添加至用户态协议栈的监听队列中,所述第一接口调用请求为对第一用户态接口的调用请求,所述第一用户态接口为用户态事件聚合通知控制接口;
第二处理模块,用于根据应用程序发起的第二接口调用请求,判断所述接口兴趣队列中是否有网络套接字,在所述接口兴趣队列中有网络套接字,且所述用户态协议栈的监听队列中待监听文件无待通知事件时,创建先入先出队列;其中,所述第二接口调用请求为对第二用户态接口的调用请求,所述第二用户态接口为用户态事件聚合通知等待接口,所述先入先出队列中无待通知事件;
第三处理模块,用于对所述先入先出队列进行监听,根据监听结果,使应用程序进入阻塞状态或唤醒状态;
通知模块,在应用程序进入唤醒状态时,向应用程序发送待通知事件;
向接口兴趣队列中添加待监听文件,并确定待监听文件的监听队列的步骤,具体包括:
确定应用程序调用第一用户态接口;
将所述待监听文件的文件描述符添加至所述接口兴趣队列中;
判断所述待监听文件是否为网络套接字;
若是,则将所述待监听文件的文件描述符添加至用户态协议栈的监听队列中;
若否,则将所述待监听文件的文件描述符添加至内核的监听队列中。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述阻塞式事件通知方法的步骤。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述阻塞式事件通知方法的步骤。
CN202210146335.9A 2022-02-17 2022-02-17 阻塞式事件通知方法及装置 Active CN114697194B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210146335.9A CN114697194B (zh) 2022-02-17 2022-02-17 阻塞式事件通知方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210146335.9A CN114697194B (zh) 2022-02-17 2022-02-17 阻塞式事件通知方法及装置

Publications (2)

Publication Number Publication Date
CN114697194A CN114697194A (zh) 2022-07-01
CN114697194B true CN114697194B (zh) 2023-07-14

Family

ID=82136763

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210146335.9A Active CN114697194B (zh) 2022-02-17 2022-02-17 阻塞式事件通知方法及装置

Country Status (1)

Country Link
CN (1) CN114697194B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115473761B (zh) * 2022-09-14 2024-03-15 国核自仪系统工程有限公司 基于dcs系统的can总线的通信方法、系统、设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110535813A (zh) * 2018-05-25 2019-12-03 网宿科技股份有限公司 内核态协议栈与用户态协议栈并存处理方法和装置
CN112905357A (zh) * 2021-01-27 2021-06-04 清华大学 一种数据读取方法、系统、电子设备及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2497076A (en) * 2011-11-23 2013-06-05 Skype Delivering only selected communication events to a user terminal or to a user
CN103312625B (zh) * 2012-03-09 2016-02-03 深圳市腾讯计算机系统有限公司 一种网络通信的方法和系统
CN112698963A (zh) * 2020-12-22 2021-04-23 新华三技术有限公司成都分公司 一种事件通知方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110535813A (zh) * 2018-05-25 2019-12-03 网宿科技股份有限公司 内核态协议栈与用户态协议栈并存处理方法和装置
CN112905357A (zh) * 2021-01-27 2021-06-04 清华大学 一种数据读取方法、系统、电子设备及存储介质

Also Published As

Publication number Publication date
CN114697194A (zh) 2022-07-01

Similar Documents

Publication Publication Date Title
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
CN107046508B (zh) 报文接收方法及网络设备
JP4051703B2 (ja) シングルプロセッサ向けosによる並列処理システム、並列処理プログラム
WO2021088419A1 (zh) 一种多业务请求进程调用fpga设备的方法及相关装置
CN102693162A (zh) 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法
US10417062B2 (en) Method and apparatus of unloading out of memory processing flow to user space
CN115361451B (zh) 一种网络通信并行处理方法及系统
CN114697194B (zh) 阻塞式事件通知方法及装置
WO2023046141A1 (zh) 一种数据库网络负载性能的加速框架、加速方法及设备
CN111209123A (zh) 一种本地存储io协议栈数据交互方法和装置
US7765548B2 (en) System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock
CN113641410A (zh) 一种基于Netty的高性能网关系统的处理方法及系统
CN110851276A (zh) 一种业务请求处理方法、装置、服务器和存储介质
CN111984402A (zh) 一种线程池统一调度监控方法及系统
WO2021046932A1 (zh) 基于实时操作系统的消息驱动方法和装置
CN111586140A (zh) 一种数据交互的方法及服务器
US11157312B2 (en) Intelligent input/output operation completion modes in a high-speed network
CN107479900B (zh) 一种适用于实时操作系统的热插拔软件方案
CN113535341B (zh) Linux下CPU核间中断通信的实现方法及装置
CN116107774A (zh) Io请求处理方法、装置、电子设备和存储介质
CN110018782B (zh) 一种数据读/写方法及相关装置
CN113778714B (zh) 一种Linux兼容Android的共享剪切板方法及装置
US20230096015A1 (en) Method, electronic deviice, and computer program product for task scheduling
WO2022133656A1 (zh) 一种数据处理装置、方法及相关设备
US8359602B2 (en) Method and system for task switching with inline execution

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
GR01 Patent grant