本文以了解总体的架构后,从每个类的责任以及功能入手,深入各个类的依赖关系,最终按照运行流程梳理,了解框架的运行机理.
目前的目标:
- 了解框架结构,各个类的职责,各个类的依赖关系,最终能够解释客户端一个连接到达后的运行流程
- 如何管理文件描述符
- 如何派发连接进行处理
- 如何设计不同的事件响应函数
- poll/epoll如何介入到框架中
后续目标:
- 多线程的并发同步
- 定时任务如何管理
- 性能效果测试
- 设计模式总结分析
架构分析
常见服务器模型
模型 | 阻塞I/O | 多核 | 开销 | 工作模式 | 备注 |
---|---|---|---|---|---|
accept+read/write | √ | × | 低 | 连接按顺序处理 | 无并发性,吞吐量很低 |
accept+fork | √ | √ | 高 | 一个连接一个进程 | 适合并发连接数不多的长连接,进程创建,切换,销毁时消耗的系统资源过多 |
prefork | √ | √ | 高 | 进程复用,一个连接一个进程 | 减少进程创建以及销毁的开销 |
accept+thread | √ | √ | 中 | 一个连接一个线程 | 对accept+fork版在创建,切换,销毁开销方面的优化 |
prethread | √ | √ | 中 | 线程复用,一个连接一个线程 | 减少线程创建以及销毁的开销 |
poll(单线程reactor) | × | × | 低 | I/O复用 | <