| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 高并发IO的底层原理 -> 正文阅读 |
|
[系统运维]高并发IO的底层原理 |
2.1IO 读写的基础原理 2.1.1内核缓冲区与进程缓冲区 我们平时的系统调用read其实只是将数据从内核缓冲区读取到进程缓冲区,而write系统调用也仅仅是从进程缓冲区写到内核缓冲区中,不直接与硬件交互,内核缓冲区通过linux内核操作系统层面来同步到硬件中 2.1.2详解典型的系统调用流程 read调用的时候,首先等待硬件将对应的数据传输到内核缓冲区,然后再将内核缓冲区的数据复制到进程缓冲区中 write调用的时候,首先是将进程缓冲区中的数据写到内核缓冲区中,操作系统再根据内核缓冲区中的量达到一定阈值时才会同步到硬件中 2.2四种主要的IO 模型 2.2.1 同步阻塞IO 比如read调用的时候需要等待数据从硬件传输到内核缓冲区,再从内核缓冲区复制到进程缓冲区中,此时才会停止阻塞状态,继续进入待运行状态 2.2.2 同步非阻塞io 比如read调用的时候,我们发下read调用,此时硬件把数据传输到内核缓冲区中,这段时间内,不会阻塞,而是直接返回,但是需要不断的轮询是否已经传输完毕,直至传输到内核缓冲区完毕后,就会进入阻塞状态,等待数据从内核缓冲区复制到进程缓冲区中线程才能继续执行 2.2.3 io多路复用模型 通过select/epoll 调用来实现硬件将数据传输到内核缓冲区这段时间内零等待,零轮询,调用了select/epoll之后直接返回,也不需要轮询,因为此时已经注册了读取事件,当操作系统监听到某个读取到内核缓冲区的操作完毕后就会主动通知对应的读取线程,线程再来等待数据从内核缓冲区复制到进程缓冲区中 以上三种模型都是同步io,因为都需要等待数据从内核缓冲区复制到进程缓冲区的过程 2.2.4 异步io模型 ?只需要一开始调用系统调用的读取操作就能立即返回,由操作系统层面来完成数据从硬件传输到内核缓冲区,再从内核缓冲区复制到进程缓冲区中,再回调读取线程注册的方法让线程处理已经准备好的数据,真正实现零等待。不过现操作系统的支持还不够完善,所以主流的还是io多路复用 2.3 通过合理配置来支持百万级并发连接 ? ? ? ? 通过配置操作系统的最大文件打开数完成设置 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/4 17:27:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |