WEB开发网
开发学院操作系统Linux/Unix 使用 kqueue 在 FreeBSD 上开发高性能应用服务器 阅读

使用 kqueue 在 FreeBSD 上开发高性能应用服务器

 2010-05-21 00:00:00 来源:WEB开发网   
核心提示: 等待事件通知将 nchangelist 设置成 0,当然要传入其它合法的参数,使用 kqueue 在 FreeBSD 上开发高性能应用服务器(2),当 kevent 非错误和超时返回时,在 eventlist 和 neventlist 中就保存可用事件集合, 返回值:可用事件的个数, struc

等待事件通知

将 nchangelist 设置成 0,当然要传入其它合法的参数,当 kevent 非错误和超时返回时,在 eventlist 和 neventlist 中就保存可用事件集合。

kqueue()

 int kqueue(void) 

生成一个内核事件队列,返回该队列的文件描述索。其它 API 通过该描述符操作这个 kqueue。生成的多个 kqueue 的结构类似图 1 所示。

图 1. kqueue 队列结构
使用 kqueue 在 FreeBSD 上开发高性能应用服务器

查看原图(大图)

kevent()

 int kevent(int kq, const struct kevent *changelist, int nchanges, 
 struct kevent *eventlist, int nevents, 
 const struct timespec *timeout); 

kevent 提供向内核注册 / 反注册事件和返回就绪事件或错误事件: kq: kqueue 的文件描述符。 changelist: 要注册 / 反注册的事件数组; nchanges: changelist 的元素个数。 eventlist: 满足条件的通知事件数组; nevents: eventlist 的元素个数。 timeout: 等待事件到来时的超时时间,0,立刻返回;NULL,一直等待;有一个具体值,等待 timespec 时间值。 返回值:可用事件的个数。

struct kevent

 struct kevent { 
   uintptr_t ident;    /* 事件 ID */ 
   short   filter;    /* 事件过滤器 */ 
   u_short  flags;    /* 行为标识 */ 
   u_int   fflags;    /* 过滤器标识值 */ 
   intptr_t data;     /* 过滤器数据 */ 
   void   *udata;    /* 应用透传数据 */ 
 }; 
在一个 kqueue 中,{ident, filter} 确定一个唯一的事件。 

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 kqueue FreeBSD

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接