Unp结课—读书笔记(0.3)
Io复用细节
n select函数的设计问题
– 受限于FD_SETSIZE
– 拷贝数据、O(n)的检查、多次检查
n poll解决了FD_SETSIZE的问题,但是设计仍然低效
n 最佳的选择是:epoll、kqueue
– epoll当前只支持文件上的读、写等事件,eventfd、signalfd、timerfd
– kqueue支持文件添加、删除,AIO,进程fork、终止等,是一种更一般的事件通知机制。
超时处理
n 三种方法
– alarm
– select
– SO_RCVTIMEO与SO_SNDTIMEO选项
n alarm采用异步信号机制
n select是同步机制
n alarm和select在多客户连接的情况下,如何管理?参考ACE
n 简单的方法,推荐采用SO_RCVTIMEO与SO_SNDTIMEO,可惜与实现相关
零拷贝技术
n 应用程序àß内核àß网卡,报文零拷贝
n 底层硬件scatter-gather支持
n 内核mbuf/skbuf
n readv、writev、sendfile、TCP_CORK (Linux), TCP_NOPUSH (BSD)
更多的参考
n C10K网站、《Scalable Network Programming》、libevent、lighttpd、Boost asio库、ACE库。