poll 和 select 有什么区别?

2024-01-11

我指的是 POSIX 标准select http://en.wikipedia.org/wiki/Select_(Unix) and poll http://linux.die.net/man/2/poll系统 C API 调用。


The select()调用让您创建三个位掩码来标记您想要监视哪些套接字和文件描述符的读取、写入和错误,然后操作系统标记哪些实际上已经进行了某种活动;poll()您创建了一个描述符 ID 列表,操作系统用以下标记标记每个描述符 ID:kind发生的事件。

The select()方法相当笨拙且低效。

  1. 通常有超过一千个可供进程使用的潜在文件描述符。如果一个长时间运行的进程只打开了几个描述符,但至少其中一个已被分配了较高的数字,则将位掩码传递给select()必须足够大才能容纳最高的描述符 - 因此数百位的整个范围将被扰乱,操作系统必须在每个select()打电话才发现它们没有设置。

  2. Once select()返回后,调用者必须循环遍历所有三个位掩码以确定发生了什么事件。在许多典型应用程序中,在任何给定时刻只有一两个文件描述符会获得新流量,但必须一直读取所有三个位掩码直至最后才能发现它们是哪些描述符。

  3. 由于操作系统通过重写位掩码向您发出有关活动的信号,因此它们会被破坏,并且不再用您要侦听的文件描述符列表进行标记。您要么必须从内存中保存的其他列表重建整个位掩码,要么必须保留每个位掩码的重复副本memcpy()每个之后的数据块位于损坏的位掩码之上select() call.

So the poll()方法效果更好,因为您可以继续重复使用相同的数据结构。

实际上,poll()启发了现代 Linux 内核中的另一种机制:epoll()这进一步改进了机制,以实现可扩展性的又一次飞跃,因为当今的服务器通常需要同时处理数万个连接。这是对这项工作的一个很好的介绍:

http://scotdoyle.com/python-epoll-howto.html http://scotdoyle.com/python-epoll-howto.html

虽然这个链接有一些很好的图表显示了好处epoll()(你会注意到select()到目前为止,它被认为是如此低效和过时,以至于它甚至在这些图表上都没有得到一条线!):

http://lse.sourceforge.net/epoll/index.html http://lse.sourceforge.net/epoll/index.html


Update:这是另一个 Stack Overflow 问题,其答案给出了有关差异的更多详细信息:

Twisted 中 select/poll 与 epoll 反应器的注意事项 https://stackoverflow.com/questions/2032598/caveats-of-select-poll-vs-epoll-reactors-in-twisted

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

poll 和 select 有什么区别? 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud

随机推荐

  • Python相当于node.js的npm链接使用本地开发版本的要求?

    在 Node js 中 我习惯使用npm link让项目使用依赖项的自定义版本 来自节点文档 First npm link在包文件夹中将创建一个全局安装的符号链接prefix package name到当前文件夹 接下来 在其他一些地方 n
  • 获取代数项的系数

    给定代数项的输入 我试图获取变量的系数 输入中唯一的运算符是 并且只有一个变量 例子 2x 2 3x 4 gt 2 3 4 3 x gt 1 3 x 2 x gt 1 1 0 x x 3 gt 1 0 1 0 输入无效 2x 2 2x 2
  • 在 Windows 上的 python 2.7.8 上安装 pip

    我正在尝试安装 python 2 7 8 的模块 pip 即 arcGIS 为您安装的模块 我正在使用安装 pip 的引导方法 当我运行时遇到错误get pip py使用命令提示符 我收到以下错误 Warning from warnings
  • 如何复制特征矩阵

    我有两个Eigen MatrixXd他们总是有一排 输入矩阵是A我想将这个矩阵复制到另一个矩阵中B 但矩阵之间的列数可以不同 下面是一个例子 A 0 5 我需要创建一个B1行4列的矩阵 因此它是 B 0 5 0 5 0 5 0 5 But
  • Angular 2:视图未在数组推送时更新

    我有两个子组件 他们正在共享我使用 http get subscribe 方法加载的 json 文件中的数据 由于某种原因 当我将数据推入数组时 它不会在视图中更新 但它在控制台中显示了更新后的数组 应用程序组件从服务加载数据 this d
  • 海龟图形颜色检测

    有什么方法可以检测python中乌龟站立的颜色吗 例如 如果乌龟在黑色空间上 他就会向前移动 快速扫了一眼turtle文档 不 没有办法检测颜色 您可能应该记录迄今为止绘制的空间 每当绘制新空间时将其添加到集合中 那么 当你想知道一个旧空间
  • InvalidArgumentError:loc 处需要可广播形状(未知)

    背景 我对 Python 和机器学习完全陌生 我只是尝试根据在互联网上找到的代码建立一个 UNet 并希望将其适应我正在处理的情况 当试图 fit将UNet训练数据 我收到以下错误 InvalidArgumentError required
  • Tensorflow.js:将图像大小调整为特定字节大小

    为了进行预测 我需要形状为 null 7 7 256 的图像 const image tf reshape tf fromPixels loadedImage resizeBilinear null 7 7 256 但我不知道如何将图像调整
  • flutter 应用程序中的 Google 地图

    嘿 我想问是否有办法在 flutter 应用程序中使用 google 地图 api 我想避免使用静态地图 如果有办法请告诉我 内联地图支持包含在issue 73 https github com flutter flutter issues
  • Rails、Devise - 管理员尝试编辑另一个用户配置文件,而是加载自己的配置文件

    作为使用 Rails 进行开发的新手 我正在尝试了解以下内容 我正在使用 Devise Cancan olify 应用程序来尝试创建身份验证和用户管理 我对一般用户行为进行了排序 并且我正在尝试实现管理员用户能够编辑另一个用户配置文件 目前
  • 在 python 中创建 Azure TimerTrigger 持久函数

    正如我在标题中所说 是否有可能拥有一个使用 TimerTrigger 而不仅仅是 httpTrigger 触发的天蓝色持久应用程序 我看到这里https learn microsoft com en us azure azure funct
  • 有没有办法枚举 vb6 类模块中的所有属性?

    在 Net 中 您可以使用反射来访问类的所有属性的枚举 这也可以用 VB6 类模块来完成吗 找到了 您需要设置对 TypeLib 库 tlbinf32 dll 的引用 然后您可以使用如下代码 这是类模块 编辑 不幸的是 虽然下面的代码在 V
  • 在dom-testing-library或react-testing-library中测试输入值的最佳方法

    测试产品价值的最佳方法是什么
  • 防止替换逗号分隔字符串中已替换的字符串

    我有一个字符串是 string mainstr NONSALE REVENUE SALE REVENUE 我正在尝试更换NONSALE REVENUE with SUM NONSALE REVENUE and SALE REVENUE wi
  • 自定义 Firebase 数据服务类:Swift 3

    我正在寻找一种干净的方法来在 Swift 中从 Firebase 检索 有时保存 数据 令我烦恼的是 我所有的数据库调用都写在视图控制器代码的中间 所以我正在寻找某种自定义数据服务类 我发现这个教程很接近我想要的 http www mobi
  • 在 Automapper 中展平自引用对象

    我有一个自引用模型 我想将其转换为平面列表 模型看起来像这样 public class Node public List
  • 返回数组第一个重复元素的最佳方法

    这是一道面试题 从整数数组中返回第一个重复元素的最佳方法是什么 Example 给定一个数组 12 46 244 0 12 83 48 98 233 83 26 91 119 148 98 本例中的返回值为12 如何才能做到这一点 我认为如
  • 在 Mac OS 10.7 上通过 pygame 使用 python 多处理模块进行 IO

    我使用 pygame 来运行认知科学实验 并且通常有大量的 I O 需求 因此我喜欢将这些任务分叉到单独的进程 当使用多核机器时 以提高代码的性能 但是 我遇到了这样的情况 某些代码可以在我同事的 Linux 机器 Ubuntu LTS 上
  • 集合流与新集合的交集

    有没有更好 更简单的方法来解决这个问题 Test public void testReduce Set
  • poll 和 select 有什么区别?

    我指的是 POSIX 标准select http en wikipedia org wiki Select Unix and poll http linux die net man 2 poll系统 C API 调用 The select