select,poll,epoll优缺点及比较

2023-11-01

在之前我已经分析了这三个函数,请看我之前的文章:
IO多路复用之select函数详解
IO多路复用之poll函数详解
IO多路复用之epoll函数详解
  这篇文章只总结优缺点,以便面试时回答。

select优点

1)select()的可移植性更好,在某些Unix系统上不支持poll()
2)select() 对于超时值提供了更好的精度:微秒,而poll是毫秒。

select缺点

1) 单个进程可监视的fd数量被限制。
2) 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大。
3) 对fd进行扫描时是线性扫描。fd剧增后,IO效率较低,因为每次调用都对fd进行线性扫描遍历,所以随着fd的增加会造成遍历速度慢的性能问题
4)select() 函数的超时参数在返回时也是未定义的,考虑到可移植性,每次在超时之后在下一次进入到select之前都需要重新设置超时参数。

poll

  poll与select不同,通过一个pollfd数组向内核传递需要关

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

select,poll,epoll优缺点及比较 的相关文章

  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 如何从 Unix 命令行递归解压目录及其子目录中的档案?

    The unzip命令没有递归解压缩档案的选项 如果我有以下目录结构和档案 Mother Loving zip Scurvy Sea Dogs zip Scurvy Cures Limes zip 我想将所有档案解压缩到与每个档案同名的目录
  • BASH 中带有千位分隔符的数字格式

    我有一个号码12343423455 23353 我想用千位分隔符格式化数字 所以输出将是12 343 423 455 23353 printf 3f n 12345678 901 12 345 678 901
  • gpg:抱歉,根本没有请求终端 - 无法获取输入

    解密时出现以下错误 eyaml decrypt s ENC and the key goes on here gnupg quiet no secmem warning no permission warning no tty yes de
  • 如何在C程序中直接改变显存映射来绘制像素(无需库函数)

    是否可以通过使用 C 程序更改 RAM 中屏幕 视频即监视器 内存映射中的值来显示黑点 我不想使用任何库函数 因为我的主要目标是学习如何开发简单的操作系统 我尝试访问起始屏幕内存映射 即 0xA0000 在 C 中 我尝试运行该程序 但由于
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 是否可以在unix cut 命令中使用字符串作为分隔符?

    如果我想使用字符串作为分隔符来剪切文本列表 这可能吗 例如 我有一个目录 其中一系列 shell 脚本调用相同的 perl 脚本 abc pl 所以当我这样做时 grep abc pl 在该目录中 它给了我以下结果 xyz sh abc p
  • 在 bash 中快速引用 stdout(即上一个命令的输出)?

    有没有办法快速 例如通过键盘快捷键等 引用写入到 stdout 的上一个命令的输出 例如 如果我这样做 which rails 它回来了 usr local bin rails然后我想在 textmate 中打开该文件 我可以像这样重新输入
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • bash "&" 不打印 "[1]+ Done "

    我在 bashrc 中调用一个脚本来打印打开终端时收到的新消息数 我希望该调用在访问网络时是非阻塞的 有时需要几秒钟 这意味着我无法使用终端直到完成 但是如果我输入 mailcheck 在我的 bashrc 中 它工作正常 但然后打印一个空
  • VSCODE 在 Linux 上不适用于我

    刚刚了解 VSCODE 很高兴尝试一下 我下载 解压并运行可执行文件 我得到 Code 2183 0429 201254 ERROR browser main loop cc 170 Running without the SUID san
  • 如何使用 Perl 在 Unix 中获取文件创建时间

    如何使用 perl 在 unix 中获取文件创建时间 我有这个命令显示文件的最后修改时间 perl MPOSIX le print strftime d b Y H M localtime lstat 9 for ARGV file txt
  • 将 bash 脚本作为守护进程运行

    我有一个脚本 它每 X 次运行我的 PHP 脚本 bin bash while true do usr bin php f my script php echo Waiting sleep 3 done 我怎样才能将它作为守护进程启动 要从
  • 如何从命令行执行 PHP 代码?

    我想执行单个 PHP 语句 例如if function exists my func echo function exists 直接使用命令行 无需使用单独的 PHP 文件 这怎么可能 如果您要在命令行中执行 PHP 我建议您安装phpsh
  • 有没有办法让 Linux CLI IO 重定向持久化?

    我有多个管道命令 如下所示 find options grep options xargs grep options 它们中的每一个都可能产生我不感兴趣的错误 权限错误 文件名空格错误等 因此 我想将所有错误重定向到 dev null 我知
  • OS X 对 /usr/local/lib 的权限被拒绝

    我正在寻找有关权限问题的任何建议 直觉 线索 答案 自从我切换到新的 Macbook Pro 以来 这个问题一直困扰着我 这就是困境 某些程序在安装期间复制 usr local lib 下的库 并且在运行这些程序时出现崩溃 我认为这与此文件
  • 如何创建路径别名?

    那么 cs 将映射到 College 以便我可以运行命令 cd cs 我相信您在问如何创建符号链接 或符号链接 例如 ln s College cs 不过 还有其他方法可以加快工作流程 例如设置 CDPATH export CDPATH C

随机推荐

  • Android开发:实现APP自动填写注册验证码功能

    http blog csdn net xiong it article details 50997084 前言 此技术的实现原理是 广播接收者 和 内容观察者 利用接收到短信时的系统发出的广播进行短信的读取 并利用正则表达式解析出短信中的验
  • 柔性数组 +结构体中数组名与指针的区别

    柔性数组 一 柔性数组 1 柔性数组的特点 2 柔性数组的使用 3 柔性数组的替代形式 二 结构体中数组名与指针的区别 一 柔性数组 柔性数组是指在结构体中定义一个为指定大小的数组 1 柔性数组的特点 1 在结构体中 柔性数组的前面至少有一
  • WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建

    文章目录 1 系统环境要求 2 WSL2操作 大多是命令行 2 1 安装wsl 2 2 建议直接将默认版本设置为WSL 2 但可能不做这一步默认也是2 2 3 检查版本或状态信息 2 4 安装Linux子系统 2 5 修改安装位置 2 6
  • Eureka Client Instance status DOWN - SpringCloud Eureka 实例状态为DOWN时如何排查问题

    Eureka Client Instance status DOWN SpringCloud Eureka 实例状态为DOWN时如何排查问题 Eureka Client Instance status DOWN SpringCloud Eu
  • ios 手机浏览器,点击输入框页面会放大

    一个普通的h5静态页面 在ios手机上用浏览器打开 发现每次聚焦输入框的时候整个页面都会放大 解决办法在html的头部meta标签中设置 user scalable no viewport meta 标记 HTML 超文本标记语言 MDN
  • C++STL之List容器

    C STL之List容器 1 再谈链表 List链表的概念再度出现了 作为线性表的一员 C 的STL提供了快速进行构建的方法 为此 在前文的基础上通过STL进行直接使用 这对于程序设计中快速构建原型是相当有必要的 这里的STL链表是单链表的
  • 【Linux】进程间通信(无名/有名管道及System V共享内存)

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 通信的相关概念 二 管道 半双工 1 管道的概念 三
  • vue-router学习总结

    vue router学习 vue router介绍 vue router借鉴了react router和ui router中所有的优点 官方文档 https router vuejs org 路由的快速开始 定义各页面容器组件 定义路由配置
  • Git把本地内容push到远程仓库

    第一次提交本地项目代码到github仓库 一 所需的命令 git init 1 初始化项目文件夹 git add 2 将所有文件添加到暂存区 git commit m first commit 3 提交到本地仓库 双引号内是提交的备注信息
  • 【已解决】libcef.dll怎么修复?libcef.dll丢失怎么办电脑上总显示

    libcef dll怎么修复 libcef dll丢失怎么办电脑上总显示 我们在日常使用电脑的时候 有些情况下可能会遇到出现提示计算机丢失libcef dll文件的情况 对于这种问题小编觉得我们可以先尝试使用第三方软件进行扫描下载 或者还可
  • Typescript学习(1)

    安装typescript 查看本机是否安装了node npm install g typescript 全局安装typescript tsc v 查看安装的typescript版本 使用vs code新建一个文件夹 进入该文件夹创建一个te
  • 为什么Collection不从Clone和Serializable接口继承

    Collection表示一个集合 包含了一组对象 如何存储和维护这些对象是由具体实现来决定的 因为集合的具体形式多种多样 例如list允许重复 set则不允许 而克隆 clone 和序列化 serializable 只对于具体的实体 对象有
  • Halcon和Opencv 的区别

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 OpenCV Halcon 开发语言 C C emgu Python Ruby MATLAB等语言 C C C Visual basic和Delphi等语言 应用场合 侧
  • 使用若依分离版实现Excel导入功能

    使用若依分离版实现导入功能 1 后台代码 controller层 导入学生数据 下载模板 GetMapping importTemplate ResponseBody public AjaxResult importTemplate Exc
  • 【C++】友元函数、友元类、内部类

    文章目录 一 友元函数 二 友元类 三 内部类 四 小结 一 友元函数 友元函数是定义在类外的普通函数 但是可以访问类的所有成员 包括私有和保护成员 它不是类的成员函数 但是要在类里声明 例子 class A 友元函数可以在类中任何地方声明
  • 基于SpringBoot的单点登录实现

    一 实现原理 本单点登录原理是基于SpringBoot的HandlerInterceptor拦截器实现的 大致思路如下 SP提供单点登录接口 并通过HandlerInterceptor对该地址进行拦截 统一平台访问该SP时携带认证Token
  • blender学习记录2--常见的问题

    视图问题 镜头无法放大 有两个体积相差较大的物体 滚轮无法将较小的那个很好的显示出来 解决方法 将鼠标放到较小的物体上 按照 不放 选择查看所选 就能进行正常缩放 视图问题 视图旋转偏移 选中了一个相距较远的物体 旋转并非以当前物体为中心
  • MATLAB——最小二乘法拟合指数函数“y=Ae^Bx”

    一 相关函数 1 MATLAB中polyfit函数是用来进行多项式拟合的 其数学原理是基于最小二乘法进行拟合的 具体使用语法是 p polyfit x y n 其中x y表示需要拟合的坐标点 大小需要一样 n表示多项式拟合的次数 返回值p表
  • Google也裁员啦!!

    国外媒体报道 在谷歌 要不就不下雨 要下就是倾盆大雨 google宣布首次裁员 裁减内部员工100个 合同工和劳务工都将裁掉 挪威 瑞典 奥斯汀 得克萨斯 等分部将全部关闭 分部员工全部回美国总部 谷歌还发表数篇博客 详细说明了即将关闭的多
  • select,poll,epoll优缺点及比较

    在之前我已经分析了这三个函数 请看我之前的文章 IO多路复用之select函数详解 IO多路复用之poll函数详解 IO多路复用之epoll函数详解 这篇文章只总结优缺点 以便面试时回答 select优点 1 select 的可移植性更好