kqueue
BSD/macOS内核提供的通用高性能事件通知框架,设计比epoll更为抽象和通用,能监听socket、文件、信号、进程等多类事件,通过kqueue和kevent两个系统调用实现
时间轴 (近 90 天)
libevent在Linux上封装epoll,在BSD/macOS上封装kqueue,在Solaris上使用/dev/poll或event ports,在Windows上使用select或IOCP,并对外提供统一的event_base事件循环接口。
kqueue 是 BSD/macOS 上的事件通知机制,具有过滤器机制。
监控文件夹功能在技术上依赖 macOS 提供的 FSEvents 或 kqueue 等文件系统事件通知机制,无需应用持续轮询磁盘
kqueue诞生于FreeBSD,通过kqueue和kevent两个系统调用工作,kevent同时承担注册与获取事件的职责
epoll与kqueue遵循相同哲学:注册一次多次等待、只返回活跃事件、内核主动通知,使单机支撑百万级并发连接成为现实
kqueue通过kevent结构体的filter字段区分事件类型,如EVFILT_READ/WRITE、EVFILT_VNODE、EVFILT_PROC、EVFILT_SIGNAL、EVFILT_TIMER,可统一处理socket读写、文件变化、进程状态、信号和定时器
macOS上的FSEvents、Grand Central Dispatch以及libuv在BSD/macOS平台的实现均以kqueue为基础构建
全部知识事实 (7)
libevent在Linux上封装epoll,在BSD/macOS上封装kqueue,在Solaris上使用/dev/poll或event ports,在Windows上使用select或IOCP,并对外提供统一的event_base事件循环接口。
50%待验证kqueue 是 BSD/macOS 上的事件通知机制,具有过滤器机制。
50%待验证监控文件夹功能在技术上依赖 macOS 提供的 FSEvents 或 kqueue 等文件系统事件通知机制,无需应用持续轮询磁盘
50%待验证kqueue诞生于FreeBSD,通过kqueue和kevent两个系统调用工作,kevent同时承担注册与获取事件的职责
50%待验证epoll与kqueue遵循相同哲学:注册一次多次等待、只返回活跃事件、内核主动通知,使单机支撑百万级并发连接成为现实
50%待验证kqueue通过kevent结构体的filter字段区分事件类型,如EVFILT_READ/WRITE、EVFILT_VNODE、EVFILT_PROC、EVFILT_SIGNAL、EVFILT_TIMER,可统一处理socket读写、文件变化、进程状态、信号和定时器
50%待验证macOS上的FSEvents、Grand Central Dispatch以及libuv在BSD/macOS平台的实现均以kqueue为基础构建
50%