poll() 与 select()比较
比较poll() 与select()
尽管poll()和select()所做的是相同的工作,不过poll()优于select(),原因:
1.poll()不需要用户计算并传递作为参数的最高编号的文件描述符的值+1
2.poll()的效率优于采用最大值的文件描述符的做法.例如,你以select()来查看单一文件描述符的最大值为900----内核必须为每个分组检查900个位的设定状态.
3.select(0的文件描述符分子的大小是固定的,这导致两难的权衡:如果太小,select()可查看的文件描述符数目就会大受限制;如果太大,就会没有效率,大型位掩码的处理很没有效率,特别是在不知道位掩码设定的位是否太稀疏时,使用poll()则可以创建一个大小刚好的数组.只要你查看一条数目,而且只需要传递单一结构.
4.使用select()会在返回时重构文件描述符分组,所以每个随后调用必须重新初始化.poll()系统调用则把输入(events字段)与输出(revents字段)分离,并允许重复使用十足而不许需要变更.
5.返回后,select()的timeout参数会变成未定义.所以具有可以执行的程序代码需要重新对他进行初始化.然后使用pselect()则不会遇到此问题.
select()系统调用的优点:
select()具有可以执行,因为有些Unix系统并不指出poll().
select()提供了较佳的timeout分辨率:可以精确到微妙.尽管ppoll()与pselect()理论上可提供纳秒分辨率,但实际上他们甚至无法可靠提供微秒级分辨率
poll() 与 select()比较的更多相关文章
- 【Pyhton Network】使用poll()或select()实现非阻塞传输
通常情况下,socket上的I/O会阻塞.即除非操作结束,否则程序不会照常进行.而以下集中情况需要在非阻塞模式下进行:1. 网络接口在等待数据时是活动的,可以做出相应:2. 在不使用线程或进程的情况下 ...
- poll和select
都允许进程决定是否可以对一个或者多个打开的文件做非阻塞的读取或写入.这些调用也会阻塞进程,直到给定的文件描述符集合中的任何一个可读取或写入.常常用于那些要使用多个输入或输出流而又不会阻塞与其中任意一个 ...
- linux epoll,poll,select
epoll函数用法,还有点poll和select 1,LT的epoll是select和poll函数的改进版. 特点是,读完缓冲区后,如果缓冲区还有内容的话,epoll_wait函数还会返回,直到把缓冲 ...
- 四、poll()、select()和epoll()
在用户程序中,poll()和select()系统调用用于对设备进行无阻塞访问.poll()和select()最终会调用设备驱动中的poll()函数,在我所使用的Linux内核中,还有扩展的poll() ...
- poll 和 select 底层的数据结构
poll 和 select 系统调用的真正实现是相当地简单, 对那些感兴趣于它如何工作的人; epoll 更加复杂一点但是建立在同样的机制上. 无论何时用户应用程序调用 poll, select, 或 ...
- linux poll 和 select
使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll, select 和 epoll 本质上有相同的功能: 每个允许一个进程来决定它是否可读或者写一 ...
- 多路转接之poll和select
先看poll(): #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...
- [转] Epoll 相对Poll和Select的优点
http://blog.csdn.net/summerhust/article/details/18260117 PS: 相对select来说,Poll的监听列表比select更短,并且Poll的监听 ...
- Linux中的sleep、usleep、nanosleep、poll和select
在进行Linux C/C++编程时,可调用的sleep函数有好多个,那么究竟应当调用哪一个了?下表列出了这几个函数间的异同点,可作为参考: 性质 精准度 线程安全 信号安全 sleep libc库函数 ...
随机推荐
- MyBatis.Net 配置
假设我们现在有这样的需求,要对学生信息进行管理 学生表有要以下要求 字段名称 数据类型 说明 stuNo 字符 学号,该列必填,为主键递增 stuName 字符 学生姓名,该列必填,要考虑姓氏可能是两 ...
- Excel小技巧整理(持续更新)
合并某列中相同单元格 参考https://jingyan.baidu.com/article/9158e00006db70a25512286f.html 使用方法 先给需要合并的列排序,这样相同数据会 ...
- TensorFlow深度学习实战---MNIST数字识别问题
1.滑动平均模型: 用途:用于控制变量的更新幅度,使得模型在训练初期参数更新较快,在接近最优值处参数更新较慢,幅度较小 方式:主要通过不断更新衰减率来控制变量的更新幅度. 衰减率计算公式 : deca ...
- Python基本编程题
问题1:仅使用 Python 基本语法,即不使用任何模块,编写 Python 程序计算下列数学表达式的结果并输出,小数点后保留3位. ...
- Scrapy爬去哪儿~上海一日游门票并存入MongoDB数据库
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZwAAAGGCAYAAABPDDfEAAAgAElEQVR4nOy9C3Rb1Z3/+z1Hkm35mT
- v-model 双向数据绑定
通过v-model指令可以实现双向数据绑定 HTML部分: <div id="app"> <input type="text" v-model ...
- [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题
题目来源: Codeforces - 1110D 题意:你有n张牌(1,2,3,...,m)你要尽可能多的打出[x,x+1,x+2] 或者[x,x,x]的牌型,问最多能打出多少种牌 思路: 1.三组[ ...
- 53. [LeetCode] Maximum Subarray
Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...
- Python最简编码规范
前言 本文是阅读<Python Coding Rule>之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考. ...
- ES6的新特性(19)——Module 的语法
Module 的语法 概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能,比如 Ruby 的re ...