[Linux] 理解I/O多路复用
2023-02-18 15:41:17 时间
网络模型从最简单到后面的演进是这样的:
1. 普通socket模型
2. 多进程模型
3. 多线程模型
4. I/O多路复用 select poll
5. I/O多路复用 epoll
普通socket模型:
1对1的同步阻塞通信 , 一个进程只能处理一个连接 , 其他连接无法处理
多进程模型:
主进程监听socket , accept接收到请求后 , fork子进程进行处理 , 1个子进程一个连接
进程创建销毁上下文切换开销比较大
多线程模型:
主进程监听socket , accept接收到请求后 ,开启子线程进行处理 , 1个子线程一个连接
可以使用线程池 , 但是还是线程会太多了 , 开销大
I/O多路复用:
一个进程可以处理多个连接 , 多个请求复用了一个进程 , 在多个请求连接中切换处理
select / poll:
遍历所有的已连接socket , 查看是否有网络事件 , 进行处理 , 并且会受到文件描述符个数限制
epoll :
使用红黑树存储连接的socket , 并且使用事件驱动机制 , 有事件发生时内核会通知 , 不需要遍历所有socket集合
相关文章
- 快速入门Golang Fuzz模糊测试
- Git版本控制入门教程(一)
- Git版本控制教程之为项目打上标签(二)
- Git版本控制教程之分支(三)
- Git版本控制教程之在Visual Studio Code中如何使用(四)
- 如何托管你的项目到github上详细教程
- Git提交记录
- 无法下载 http://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages
- git提交报错does not match your user account
- 导出简书的文章生成gitbook上传到github通过xxx.github.io访问
- Git reset 之后 怎么恢复到 reset 之前的节点
- 准大三学生给想学习C++同学的学习路线
- 5000字用C++带你入门马氏链。
- Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)
- MongoDB从入门到实战之MongoDB简介
- vitepress+gitee pages搭建自己的博客网站
- git clone 拉取远程仓库
- mac 系统 homebrew 管理 PHP
- PHP 冒泡排序算法
- git tag 命令详解