服务器程序框架
1.服务器模型
1.1 c/s模型

服务器编程框架
| 模块 | 单个服务器程序 | 服务器机群 |
| IO处理单元 | 处理客户连接,读写网络数据 | 作为接入服务器实现负载均衡 |
| 逻辑处理单元 | 业务进程或线程 | 逻辑服务器 |
| 网络存储单元 | 本地数据库、文件 | 数据库服务器 |
| 请求队列 | 各单元之间的通信 | 各服务器之间永久的TCP连接 |
2.IO模型
| IO模型 | 读写操作和阻塞阶段 |
| 阻塞IO | 程序阻塞于读写函数 |
| IO复用 | 程序阻塞于IO复用系统调用,可同时监听多个IO事件 |
| SIGIO信号IO | 信号触发读写就绪事件,用户程序执行读写操作 |
| 异步IO | 内核执行读写操作并触发读写完成事件 |
3.事件处理模式
3.1 Reactor模式
epoll_wait实现Reactor模式
1.主线程往内核事件表中注册socket读就绪事件
2.调用epoo_wait等待读就绪事件
3.读事件触发,主线程通知工作线程处理客户请求,往内核事件表中注册写就绪事件
4.主线程调用epoll_wait等待socket可写
5.写事件触发,主线程通知工作线程写入数据
3.2 Proactor模式
1.主线程往内核事件表中注册socket读就绪事件
2.调用epoo_wait等待读就绪事件
3.读事件触发,主线程循环从socket中读取数据直到没有数据可读,将读到数据封装成对象插入请求队列
4.工作线程处理数据对象,注册写就绪事件
5.主线程调用epoll_wait等待socket可写
6.写事件触发,主线程往socket上写入数据
4.并发模式
4.1 半同步/半异步
主线程(异步线程)处理IO,同步线程处理逻辑,主线程监听到客户请求后将其插入请求队列,工作线程通过竞争来获取连接对象处理请求

4.2 领导者/追随者
多个工作线程轮流获得事件源集合,轮流监听、分发并处理事件的一种模式,同一时间,程序只能用一个领导者线程,负责处理IO事件,其余线程为追随者,等待成为新的领导者
提高性能服务器的其它建议:
有限状态机;避免不必要的内存复制,尤其是用户代码和内核之间;避免并发编程时的上下文切换(线程数量不大于CPU数量);避免使用锁

浙公网安备 33010602011771号