数智学习中心 计科随机库
学习专区 Linux专栏 博客圈 计科之路 登录
下 kqueue 的用法,kqueue 也需要先创建一个名叫 kqueue 的对象

epoll 的历史

早在 Linux 实现 epoll 之前,Windows 系统就已经在 1994 年引入了 IOCP,这是一个异步 I/O 模型,用来支持高并发的网络 I/O,而著名的 FreeBSD 在 2000 年引入了 Kqueue——一个 I/O 事件分发框架。

Linux 在 2002 年引入了 epoll,不过相关工作的讨论和设计早在 2000 年就开始了。如果你感兴趣的话,可以http://lkml.iu.edu/hypermail/linux/kernel/0010.3/0003.html"> 点击这里看一下里面的讨论。

为什么 Linux 不把 FreeBSD 的 kqueue 直接移植过来,而是另辟蹊径创立了 epoll 呢?

让我们先看下 kqueue 的用法,kqueue 也需要先创建一个名叫 kqueue 的对象,然后通过这个对象,调用 kevent 函数增加感兴趣的事件,同时,也是通过这个 kevent 函数来等待事件的发生。

————————————————

版权声明:本文为CSDN博主「_Rye_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_37756660/article/details/133906106

int kqueue(void);
int kevent(int kq, const struct kevent *changelist, int nchanges,
      struct kevent *eventlist, int nevents,
      const struct timespec *timeout);
void EV_SET(struct kevent *kev, uintptr_t ident, short filter,
      u_short flags, u_int fflags, intptr_t data, void *udata);

struct kevent {
 uintptr_t ident;   /* identifier (e.g., file descriptor) */
 short    filter;  /* filter type (e.g., EVFILT_READ) */
 u_short   flags;   /* action flags (e.g., EV_ADD) */
 u_int    fflags;  /* filter-specific flags */
 intptr_t   data;   /* filter-specific data */
 void     *udata;   /* opaque user data */
};
评论留言

一共0条留言