服务器程序框架

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数量);避免使用锁

posted @ 2021-02-20 17:19  zzlj  阅读(130)  评论(0)    收藏  举报