高级服务器设计和实现1

2,097 views
1,910 views

Published on

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,097
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
117
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

高级服务器设计和实现1

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

×