高级服务器设计和实现 1 —— 基础与进阶 余锋
基本套接字 API socket bind listen accept read/recv write/send close
Tcp 状态变迁和 socket API
IO 模型 阻塞 I/O 非阻塞 I/O I/O 多路复用 (select and poll) 事件驱动 I/O (SIGIO) 异步 I/O (POSIX aio_ 函数 )
IO 模型之间的区别
IO 策略 多客户一线程,非阻塞(水平触发) o select() o poll() o /dev/poll o kqueue
IO 策略 多客户一线程,非阻塞(改变通知) o epoll() o kevent o realtime signal o kqueue
IO 策略 每服务器线程一客户 o NGPT o NPTL o FreeBSD 线程
IO 策略 内核中的服务器 o TUX
异步 IO Linux aio 不支持网络 io 比较难编程
多线程 如有可能 不要尝试多线程 用原语高级点的库 想清楚了 再做 很难调试 做好诊断设施
多线程 VS 事件派遣方式 多线程 模型简单 难编程 事件派遣 性能高
C10K Problem C10K 是很难跨越的 上了一个台阶
制约性能的杀手 数据拷贝 上下文切换 内存分配 锁竞争
其他制约性能因素 存储子系统 协议参数 o TCP_CORK/MSG_PUSH/Neagle 缓存情况 o readv/writev 可用否 ? 系统页大小( page size ) 系统调用代价
可供学习的优秀代码 Lighty Nginx Mysql-proxy Haproxy Shttpd
Q & A