linux中的轮询机制select/poll/epoll特点分析
select机制
select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:
1 单个进程可监视的fd数量被限制
2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大
3 对socket进行扫描时是线性扫描
poll机制
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。
它没有最大连接数的限制,原因是它是基于链表来存储的,但是同样有一个缺点:大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义。
poll还有一个特点是“水平触发”,如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd。
epoll机制
epoll支持水平触发和边缘触发,最大的特点在于边缘触发,它只告诉进程哪些fd刚刚变为就需态,并且只会通知一次。
在前面说到的复制问题上,epoll使用mmap减少复制开销。
还有一个特点是,epoll使用“事件”的就绪通知方式,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似callback的回调机制来激活该fd,epoll_wait便可以收到通知
在选择select,poll,epoll时要根据具体的使用场合以及这三种方式的自身特点。表面上看epoll的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。
linux中的轮询机制select/poll/epoll特点分析相关推荐
- linux中dns轮询,linux实现DNS轮询实现负载平衡
linux实现DNS轮询实现负载平衡 DNS轮询机制会受到多方面的影响,如:A记录的TTL时间长短的影响:别的DNS服务器Cache的影响:windows客户端也有一个DNS Cache.这些都会影响 ...
- RocketMQ 消息消费 轮询机制 PullRequestHoldService
1. 概述 先来看看 RocketMQ 消费过程中的轮询机制是啥.首先需要补充一点消费相关的前置知识. 1.1 消息消费方式 RocketMQ 支持多种消费方式,包括 Push 模式和 Pull 模式 ...
- (原创)Linux设备轮询机制分析
一. 设备轮询机制的基本思想 所谓的设备轮询机制实际上就是利用网卡驱动程序提供的NAPI机制加快网卡处理数据包的速度,因为在大流量的网络环境当中,标准的网卡中断加上逐层的数据拷贝和系统调用会占用大量的 ...
- MCDF中arbiter的轮询机制
更新的MCDF的仲裁器采用的是Round Robin轮询的一个仲裁机制,简单来说就是最先被授权的通道在下一次仲裁中优先级会变为最低,这样可以保证每个通道都能够获得授权,而不是一个通道长时间连续的进行数 ...
- Node中的事件轮询机制
文章目录 2 node中的事件循环模型 2-1 一些属性 2-2 循环模型 node事件循环总共有==六个阶段== process.nextTick()函数 __实例__ 2 node中的事件循环模型 ...
- IO多路复用select/poll/epoll详解以及在Python中的应用
IO multiplexing(IO多路复用) IO多路复用,有些地方称之为event driven IO(事件驱动IO). 它的好处在于单个进程可以处理多个网络IO请求.select/epoll这两 ...
- linux网络编程--select/poll/epoll 详解
目录 参考链接 epoll函数 close epoll event EL/LT ET Edge Trigger 边沿触发工作模式 LT Level Trigger 水平触发工作模式 epoll 源码解 ...
- linux poll函数 实现,Linux select/poll/epoll 原理(一)实现基础
本序列涉及的 Linux 源码都是基于 linux-4.14.143 . 1. 文件抽象 与 poll 操作 1.1 文件抽象 在 Linux 内核里,文件是一个抽象,设备是个文件,网络套接字也是个文 ...
- linux主备dns切换时间,linux实现DNS轮询实现负载平衡
导读 DNS 轮询机制会受到多方面的影响,如:A记录的TTL时间长短的影响:别的 DNS 服务器 Cache 的影响:windows 客户端也有一个DNS Cache.这些都会影响 DNS 轮询的效果 ...
- ajax定时轮询机制图解,通过Ajax调用的轮询机制
我需要添加轮询机制来通过我的网页调用Web服务.为此,我尝试在javascript页面内使用ajax呼叫.我对ajax和javascript很新.我写了下面的代码.通过Ajax调用的轮询机制 func ...
最新文章
- java中的Executors简介与多线程在网站上逐步优化的运用案例
- fmod实现声音波形_“老张说数理化”—中考物理专题02-声音与环境(收藏可打印)...
- 被劝退的学渣,逆袭成高级语言之父,改变编程方式却说“不喜欢写代码”!...
- 集合详解(三)----Map的两种遍历方式
- Vue.js 对比其他框架
- 【AI基础】OpenCV,PIL,Skimage你pick谁
- Struct复杂数据类型的UDF编写、兼容HIVE的GenericUDF编写
- mysql 按照条件计数_灵活的CASE...WHEN:SQL同时按条件计数按条件加和
- leetcode python3 简单题121. Best Time to Buy and Sell Stock
- 页面字符编码不一致的处理
- Flink流处理中的表
- Hive 动态分区入门
- 在使用体验上,VS远远不如Eclipse
- HP服务器远程管理工具iLO详细介绍
- 自驱力超强的羊驼?斯坦福微调LLaMa
- 控件、组件和插件的区别
- 五 . css系列之文本段落属性及应用
- 赋值运算符和赋值表达式
- 怎么转换CAD图纸格式?三种方法帮你搞定CAD转PDF格式操作!
- SpringMVC(三)——响应