几种高性能网络模型
Posted 后端技术指南针
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几种高性能网络模型相关的知识,希望对你有一定的参考价值。
IO复用技术
事件处理模型
几种并发模型
Memcache的网络模型
1.IO复用技术
网络设计模式中,如何处理各种I/O事件是其非常重要的一部分,Reactor 和Proactor两种事件处理模型应运而生,可以使用同步I/O实现Reactor模型,使用异步I/O实现Proactor模型。
Reactor事件处理模型
多路复用器:由操作系统提供接口,Linux提供的I/O复用接口有select、poll、epoll
事件分离器:将多路复用器返回的就绪事件分发到事件处理器中
事件处理器:处理就绪事件处理函数
Handle:标示文件描述符
Event Demultiplexer:对操作系统内核实现I/O复用接口的封装等待发生事件发生
Event Handler:事件处理接口
Event Handler A/B:实现应用程序所提供的特定事件处理逻辑
Reactor:反应器定义一个接口,注册和删除关注的事件句柄、运行事件处理循环、等待就绪事件触发,分发事件到注册的回调函数。
Proactor事件处理模型
Handle:socket句柄;
Async Operation Processor:异步操作处理器执行异步操作,一般由内核实现
Async Operation:异步操作
Completion Event Queue:完成事件队列
Proactor:主动器 为应用程序进程提供事件循环,从完成事件队列中取出异步操作的结果,分发调用相应的后续处理逻辑
Completion Handler:完成事件接口,一般由回调函数组成
Completion Handler A/B:实现接口定义特定的应用处理逻辑。
3.并发模式
同步和异步概念
并发模式中同步指程序按照代码顺序执行,异步指程序依赖事件驱动
I/O模型中同步异步用来区分是主动读取数据结构,还是内核帮忙完成数据的读取再返回给线程
半同步/半异步HAHS模式
异步线程监听到事件后,由内核完成读取数据,异步将其封装为请求对象插入到请求队列中
请求队列有新的请求对象,通知同步线程获取请求对象,这个对象是包含了数据的结构,并不是fd
同步线程处理请求对象,实现业务逻辑
半同步/半反应堆HSHR模式
半同步/半反应堆模式的改进版
主线程实现连接监听,只处理网络I/O连接事件
新的连接fd分发至工作线程中,这些fd上的I/O事件都由该工作线程处理,工作线程都可以处理多个fd的读写事件
工作线程独立维护自己的事件循环,监听不同连接fd的I/O事件
处理任务可以使用线程池或者从线程自己处理
领导者/追随者LF模式
当前Leader Thread监听到就绪事件后,从Follower 线程集中推选出 空闲Thread成为新的Leader
新的Leader Thread继续I/O监听
之后继续处理I/O就绪事件,执行完后加入到Follower 线程集中,等待成为Leader
Leader:线程处于领导者状态,负责监听I/O事件;
Processing:线程处理就绪I/O事件;
Follower:等待成为新的领导者或者可能被当前Leader指定处理就绪事件。
4.Memcache网络模型分析
核心的共享数据是消息队列,主线程会把收到的事件请求放入队列,随后调度程序会选择一个空闲的Worker线程来从队列中取出事件请求进行处理Memcached使用libevent实现事件循环,如图:
5.参考资料
https://tech.youzan.com/yi-bu-wang-luo-mo-xing/
https://zhuanlan.zhihu.com/p/58860015
http://xiaobaoqiu.github.io/blog/2014/11/03/memcachedwang-luo-mo-xing/
《Linux高性能服务器编程》游双
6.往期精彩
以上是关于几种高性能网络模型的主要内容,如果未能解决你的问题,请参考以下文章