| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux服务器开发人员必须要彻底理解的关于【Linux】IO的线程模型 -> 正文阅读 |
|
[系统运维]linux服务器开发人员必须要彻底理解的关于【Linux】IO的线程模型 |
关于IO模型参考:【Linux】五种IO模型 reactor模型应用视频讲解:epoll原理剖析以及reactor模型应用 c/c++linux服务器开发高级架构师免费学习视频点击:C/C++Linux服务器开发高级架构师/Linux后台开发架构师 一、线程模型介绍为了应对高并发的服务器端开发,微软在2009年提出了一种更优雅地实现异步编程的方式Reactive Programming即反应式编程。随后其他技术紧随其后,比如ES6通过引入类似的异步编程方式等。 在高性能的I/O设计中,有两个比较著名的模式Reactor(反应堆模式)和Proactor模式(前摄器模式),其中Reactor模式用于同步I/O,Proactor用于异步I/O操作。 Reactor 模式称之为反应器模式,Reactor 模式使用event loop 阻塞等在io上,一但io可以读或写,通过分发器,遍历事件注册队列,将事件分发到指定注册的处理器。由应用的处理器来再将流读取到缓冲区或写入操作系统,完成io操作。 Proctor 模式下读和写的方法是异步的,只需调用读和写即可。当有流可读取的时候,操作系统会将流传入read方法缓存区,并通知应用程序。对于写,当操作系统将writer 写入完毕时,操作系统会主动通知应用程序。 proactor模式的Aio,流的读取和写入由操作系统完成,省去了遍历事件通知队列selector 的代价。 Windows上的iocp实现了aio,linux目前只有基于epoll模拟实现的aio。 二、传统阻塞I/O服务模型特点
存在问题
三、Reactor模式针对传统传统阻塞I/O服务模型的2个缺点,比较常见的有如下解决方案:
I/O复用结合线程池,这就是Reactor模式基本设计思想 Reactor模式,是指通过一个或多个输入同时传递给服务处理器的服务请求的事件驱动处理模式。 服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor模式也叫Dispatcher模式,即I/O多了复用统一监听事件,收到事件后分发(Dispatch给某进程),是编写高性能网络服务器的必备技术之一 Reactor模式中有2个关键组成:
根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现:
C/C++Linux服务器开发高级架构师学习视频 点击 linux服务器学习资料 获取,内容知识点包括Linux,Nginx,ZeroMQ,MySQL,Redis,线程池,MongoDB,ZK,Linux内核,CDN,P2P,epoll,Docker,TCP/IP,协程,DPDK等等。 下面详细介绍这3种实现 3.1 单Reactor单线程其中,select是前面I/O复用模型介绍的标准网络编程API,可以实现应用程序通过一个阻塞对象监听多路连接请求,其他方案示意图类似 方案说明
优点 缺点
使用场景 3.2 单Reactor多线程方案说明
优点 缺点
3.3 主从Reactor多线程针对单Reactor多线程模型中,Reactor在单线程中运行,高并发场景下容易成为性能瓶颈,可以让Reactor在多线程中运行 方案说明
优点
这种模型在许多项目中广泛使用,包括Nginx主从Reactor多进程模型,Memcached主从多线程,Netty主从多线程模型的支持 3.4 总结3种模式可以用个比喻来理解:
Reactor模式具有如下的优点:
3.3 Proactor模型在Reactor模式中,Reactor等待某个事件或者可应用或个操作的状态发生(比如文件描述符可读写,或者是socket可读写),然后把这个事件传给事先注册的Handler(事件处理函数或者回调函数),由后者来做实际的读写操作,其中的读写操作都需要应用程序同步操作,所以Reactor是非阻塞同步网络模型。如果把I/O操作改为异步,即交给操作系统来完成就能进一步提升性能,这就是异步网络模型Proactor Proactor是和异步I/O相关的,详细方案如下:
可以看出Proactor和Reactor的区别:Reactor是在事件发生时就通知事先注册的事件(读写在应用程序线程中处理完成);Proactor是在事件发生时基于异步I/O完成读写操作(由内核完成),待I/O操作完成后才回调应用程序的处理器来处理进行业务处理 理论上Proactor比Reactor效率更高,异步I/O更加充分发挥DMA(Direct Memory Access,直接内存存取)的优势,但是有如下缺点:
因此在Linux下实现高并发网络编程都是以Reactor模型为主 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 11:12:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |