Select、Poll、Epoll 有什么区别?
部分图片来源于:https://www.cnblogs.com/yanguhung/p/10145755.html
I/O模型
- BIO:同步阻塞IO

应用程序发起调用以后,一直阻塞,等待结果返回
2. NIO:同步非阻塞IO.

IO多路复用:IO 多路复用模型中,线程首先发起 select 调用,询问内核数据是否准备就绪,等内核把数据准备好了,用户线程再发起 read 调用。read 调用的过程(数据从内核空间 -> 用户空间)还是阻塞的。
3. AIO:异步IO
应用程序发起调用以后,直接返回,等处理完成后,进行通知回调。
IO多路复用
文件描述符:

- 用户线程调用select,将fd_set从用户空间拷贝到内核空间
- 内核在内核空间对fd_set遍历一遍,检查是否有就绪的socket描述符,如果没有的话,就会进入休眠,直到有就绪的socket描述符
- 内核返回select的结果给用户线程,即就绪的文件描述符数量
- 用户拿到就绪文件描述符数量后,再次对fd_set进行遍历,找出就绪的文件描述符
- 用户线程对就绪的文件描述符进行读写操作
select:底层bitmap,最大保存1024个文件描述符,需要O(n)遍历判断哪一个文件描述符是就绪的。
poll:优化select中文件描述符限制,使用了链表的数据结构,但是还需要遍历链表,判断哪个是就绪的。
epoll:优化epoll只需要判断活跃的文件描述符。
信号驱动模型
Select、Poll、Epoll 有什么区别?的更多相关文章
- select poll epoll之间的区别
1.select poll每次循环调用时都需要将文件描述符和事件拷贝到内核空间,epoll只需要拷贝一次: (这种情况在对于描述符数量不大的情况下还可以,但是当描述符的数量达到十几万甚至上百万的时候, ...
- 哪5种IO模型?什么是select/poll/epoll?同步异步阻塞非阻塞有啥区别?全在这讲明白了!
系统中有哪5种IO模型?什么是 select/poll/epoll?同步异步阻塞非阻塞有啥区别? 本文地址http://yangjianyong.cn/?p=84转载无需经过作者本人授权 先解开第一个 ...
- select.poll,epoll的区别与应用
先讲讲同步I/O的五大模型 阻塞式I/O, 非阻塞式I/O, I/O复用,信号驱动I/O(SIGIO),异步I/O模型 而select/poll/epoll属于I/O复用模型 select函数 该函数 ...
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...
- select,poll,epoll的归纳总结区分
Select.Poll与Epoll比较 以下资料都是来自网上搜集整理.引用源详见文章末尾. 1 Select.Poll与Epoll简介 Select select本质上是通过设置或者检查存放fd标志位 ...
- select, poll, epoll的实现分析
select, poll, epoll都是Linux上的IO多路复用机制.知其然知其所以然,为了更好地理解其底层实现,这几天我阅读了这三个系统调用的源码. 以下源代码摘自Linux4.4.0内核. 预 ...
- 转--select/poll/epoll到底是什么一回事
面试题:说说select/poll/epoll的区别. 这是面试后台开发时的高频面试题,属于网络编程和IO那一块的知识.Android里面的Handler消息处理机制的底层实现就用到了epoll. 为 ...
- IO多路复用select/poll/epoll详解以及在Python中的应用
IO multiplexing(IO多路复用) IO多路复用,有些地方称之为event driven IO(事件驱动IO). 它的好处在于单个进程可以处理多个网络IO请求.select/epoll这两 ...
- python 套接字之select poll epoll
python下的select模块使用 以及epoll与select.poll的区别 先说epoll与select.poll的区别(总结) select, poll, epoll 都是I/O多路复用的具 ...
- Select/Poll/Epoll异步IO
IO多路复用 同步io和异步io,阻塞io和非阻塞io分别是什么,有什么样的区别? io模式 对于一次io 访问(以read为例),数据会先拷贝到操作系统内核的缓冲区,然后才会从操作系统内核的缓冲区拷 ...
随机推荐
- JAVA基础之5-函数式接口的实现
之所以单独把这个列出来,是因为本人被一个源码给震撼了. 所以,本人目的是看看这个震撼实现,并模仿,最后把常规的实现也贴上,让读者可以看到相对完整的实现 注:本文代码基于JDK17 一.让人震撼的代码 ...
- 深度学习/NLP中的Attention注意力机制
首先是整体认知,Attention的位置: 传送门1:Attention 机制 传送门2:Attention用于NLP的一些小结 一句话概括:Attention就是从关注全局到关注重点. 借鉴了人类视 ...
- 工具 – Vitest 与单元测试
前言 Vitest 是一款配搭 Vite 的前端单元测试工具,可以用于取代 Jasmine 和 Jest. 我先聊一下测试,每当添加新代码或修改旧代码后,我们多少都得测试一下,以确保功能正确才能交付. ...
- OData – API Versioning
前言 先看这 3 篇 ASP.NET Core – Web API Versioning ASP.NET Core – Swagger OpenAPI (Swashbuckle) ASP.NET Co ...
- async/await和Grand Central Dispatch代码切换
很多iOS开发开始学习结构化并发时已经用过了很多年Grand Central Dispatch,虽然从思想上二者区别很大,但是利用熟悉的东西去理解新的事物有助于提升学习理解的效率,接下来是这Grand ...
- 2022年7月中国数据库排行榜:墨天轮榜单榜眼易主,PolarDB得分涨幅最大
信创元年,后起之秀,大有可为.2022年7月的 墨天轮中国数据库流行度排行榜 风起云涌,本月排行榜共有232个数据库参与排名,相比上月,新增 ShuangzhaoDB 数据库.榜单前十名的唯一变化是达 ...
- CSharp的Where底层实现
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...
- springboot 启动慢分析
JVM参数设置 1. 生成GC日志并网站在线分析 生成gc日志命令 -Xloggc:./gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps 在线分析网站 ...
- KubeSphere 部署 Zookeeper 实战教程
前言 知识点 定级:入门级 如何利用 AI 助手辅助运维工作 单节点 Zookeeper 安装部署 集群模式 Zookeeper 安装部署 开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生 ...
- 《使用Gin框架构建分布式应用》阅读笔记:p77-p87
<用Gin框架构建分布式应用>学习第5天,p77-p87总结,总计11页. 一.技术总结 1.Go知识点 (1)context 2.on-premises software p80, A ...