Linux 和 I/O 完成端口?

2023-11-30

使用winsock,您可以将套接字或单独的I/O 操作配置为“重叠”。这意味着执行 I/O 的调用会立即返回,而实际操作则由单独的工作线程异步完成。

Winsock 还提供“完成端口”。据我了解,完成端口充当句柄(套接字)的多路复用器。如果句柄不在 I/O 操作中间,即如果它的所有 I/O 操作都在进行,则它可以被多路分离。完全的.

那么,关于我的问题...Linux 是否支持完成端口甚至套接字的异步 I/O?


如果您正在寻找与 IOCP 完全相同的东西,您将找不到它,因为它不存在。

Windows 使用完成通知模型(因此 I/O完成端口)。您异步启动某些操作,并在该操作完成时收到通知。

Linux 应用程序(以及大多数其他 Unix 类似应用程序)通常使用就绪通知模型。您会收到一条通知,表明可以在不阻塞的情况下读取或写入套接字。然后,您进行 I/O 操作,这不会阻塞。

使用此模型,您无需need异步 I/O。数据立即被复制到套接字缓冲区中/从套接字缓冲区中复制出来。

这种编程模型有点棘手,这就是为什么有像 libevent 这样的抽象库。它提供了更简单的编程模型,并抽象了支持的操作系统之间的实现差异。

Windows 中还有一个关于就绪模型的通知(select 或 WSAWaitForMultipleEvents),您之前可能已经看过。它无法扩展到大量套接字,因此不适合高性能网络应用程序。

不要因此而失望 - Windows 和 Linux 是完全不同的操作系统。在一个系统上无法很好扩展的东西可能在另一个系统上工作得很好。这种方法实际上在 Linux 上效果很好,性能与 Windows 上的 IOCP 相当。

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

Linux 和 I/O 完成端口? 的相关文章

  • 如果是 PrintWriter,为什么我应该在循环中刷新而不是在循环之后刷新?

    我的小演示程序中有一个服务器和客户端 我将一些字符串数据从客户端发送到服务器 然后为客户端重新发送这些数据 客户端也将其写入控制台 我对 PrtintWriter 的刷新方法感到困惑 根据 JAVA 文档 该方法刷新流 经过一些研究 我逐渐
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • 启动任务和等待任务有什么区别?

    开始和等待有什么区别 下面的代码取自 Stephen Cleary 的博客 包括评论 public async Task DoOperationsConcurrentlyAsync Task tasks new Task 3 tasks 0
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • 使用 Thread.Sleep() 时,异步编程如何与线程一起工作?

    假设 前言 在之前的问题中 我们注意到Thread Sleep阻塞线程参见 什么时候使用Task Delay 什么时候使用Thread Sleep https stackoverflow com questions 20082221 whe
  • 如何从标准输入读取一行,阻塞直到找到换行符?

    我试图从命令行的标准输入一次读取任意长度的一行 我不确定是否能够包含 GNU readline 并且更喜欢使用库函数 我读过的文档表明getline应该可以工作 但在我的实验中它不会阻塞 我的示例程序 include
  • 无法执行'x86_64-conda_cos6-linux-gnu-gcc':没有这样的文件或目录(pysam安装)

    我正在尝试安装 pysam 执行后 python path to pysam master setup py build 这个错误的产生是 unable to execute x86 64 conda cos6 linux gnu gcc
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • 为什么 Mac OS 上的 C 运行时允许预组合和分解的 UTF-8?

    所以我们都知道 Mac OS 上的文件系统具有使用完全分解的 UTF 8 的古怪功能 如果您调用 POSIX API 例如realpath 例如 您将从 Mac OS 返回这样一个完全分解的 UTF 8 字符串 当使用像这样的 API 时f
  • Async.StartChild是否存在内存泄漏?

    当我运行以下测试 使用 F 2 0 构建 时 我得到 OutOfMemoryException 在我的系统上大约需要 5 分钟才能达到异常 如果它作为 x86 进程运行 则为 i7 920 6gb ram 但无论如何我们都可以在任务管理器中
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw

随机推荐

  • 在 Tkinter 中使用按钮调用函数后返回值

    from Tkinter import from tkFileDialog import askopenfilename from PIL import Image def main filename askopenfilename fil
  • 查找与给定数字最接近的数字之和

    假设我有一个列表 1 2 3 4 5 6 7 我想找到最接近给定数字的数字之和 抱歉 这个解释很糟糕 但这里有一个例子 假设我有一个列表 1 2 3 4 5 6 7 我想找到最接近 10 的数字 那么该方法应该返回 6 和 4 或 7 和
  • 我们如何在 Android 上的 HttpClient 4.4+ 中启用 SNI?

    我正在尝试制定在现代版本的 Android 上将 SNI 与主要 HTTP 堆栈结合使用的方法 这包括 Apache 的单独 HttpClient 库 not该版本嵌入到 Android 本身中 但 Android 已经死亡并消失了 最新版
  • 在路由子集上激活的 Express.js 会话

    我正在使用expressjs 并希望使用会话对用户登录进行身份验证 站点 应用程序一方面应允许用户在无状态网页中浏览和调查不同的产品和信息 从而允许缓存这些页面 但另一方面应具有让用户登录和访问使用会话获取的不同内容的功能 因此 对于我的路
  • 听到来自麦克风的传入音频

    我只想听听我使用 NAudio 对麦克风说的话 这是我到目前为止的代码 但问题是我听不到任何声音 任何帮助 将不胜感激 public partial class frmMain Form private WaveIn waveIn Gets
  • Spring Security CSRF 令牌不适用于同一 JSP 中的 AJAX 调用和表单提交

    我正在尝试通过参考以下链接在我的项目中实现 spring security 版本 3 2 3 CSRF 令牌 http docs spring io autorepo docs spring security 4 0 0 CI SNAPSH
  • 应用程序无法从 Android Marketplace 安装在 Motorola Xoom 上

    我的 Android 应用程序无法从 Android Marketplace 安装在 Motorola Xoom 上 我已按照可用的说明进行操作here 无济于事 这是我的清单
  • 在 VSTS 上使用 GAC_MSIL 程序集时出现错误

    我有一个 ASP Web 表单项目存储在 VSTS 中 我正在尝试构建它 突然我在构建部分遇到了这个错误 2017 04 18T22 01 20 3859517Z Build FAILED 2017 04 18T22 01 20 38595
  • 对于给定的遍历 gremlin 查询,如何在所有访问过的节点/边上应用静态步骤

    我们将用户权限标记为每个节点和边上的属性 SET 基数 想知道对于给定的遍历 gremlin 查询 在所有访问过的节点 边上应用 has 步骤的最佳方法是什么 就像一个非常简单的遍历查询 从伦敦希思罗机场 LHR 飞往美国机场的航班 g V
  • apply() 并计算所有数据帧行的第一行的比例

    我有一个数据框 如下所示 列出了按车辆类型划分的受伤人数 trqldnum lt data frame motorveh c 796 912 908 880 941 966 989 984 motorcyc c 257 295 326 31
  • 从 UIView 制作 UIImage 但不在主线程中

    我正在使用众所周知的模式来创建一个UIImage从一个UIView UIImage imageWithView UIView view UIGraphicsBeginImageContextWithOptions view bounds s
  • 从远程 Git 存储库检索特定提交

    有没有办法从远程 Git 存储库中仅检索一个特定提交 而不将其克隆到我的 PC 上 远程仓库的结构与我的完全相同 因此不会有任何冲突 但我不知道如何做到这一点 而且我不想克隆那个巨大的存储库 我是git新手 有什么办法吗 从 Git 版本
  • XMLWriter (PHP) 的编码问题

    采用这个简单的 PHP 代码 xmlWriter new XMLWriter xmlWriter gt openURI php output xmlWriter gt startDocument 1 0 utf 8 xmlWriter gt
  • 如何在 C 代码中转到上一行

    如果对于下面的代码 printf HEllo n do not change this line printf b bworld 我需要一个输出 Helloworld 在一行中 但这效果不太好 有人可以解释一下原因吗 以及其他转义序列 如果
  • 如何获取mongodb中子文档之间的日期差异?

    下面是数组 CDF UTILITYTYPE D1 G1 12387835 G22 NAME L1 D5 EVENT CODE 13 TIME 29 05 2022 13 26 00
  • 来自 PreferenceActivity 的 webview.clearCache

    我有preferences xml 它在我的PreferencesActivity 扩展中使用 我在 xml 中有另一个首选项 我想用它来清除 webview 的缓存 它有一个键 但我无法通过按我的首选项中的条目来弄清楚如何触发 webvi
  • 我希望我的 RecyclerView 不回收某些项目

    我正在使用一个RecyclerView里面有异质的景色 如本教程所示 我在 RecyclerView 中有一些项目也是 RecyclerView 太难想象了 假设我想复制 Play 商店的布局 一个大的 RecyclerView 具有垂直线
  • docker 构建期间名称解析失败

    我遇到一个问题 在发出 docker build 命令时收到以下错误 curl 6 Could not resolve host dl yarnpkg com gpg no valid OpenPGP data found 这是我的 Doc
  • iOS 上某些页面的背景图像模糊

    我有一个网站http basement recordings com 使用 wordpress 构建 我对背景图像有一个问题 在 iO 上 在某些页面 例如娱乐和活动 上 背景图像看起来模糊 不清晰 Chrome 和 Safari 上都会出
  • Linux 和 I/O 完成端口?

    使用winsock 您可以将套接字或单独的I O 操作配置为 重叠 这意味着执行 I O 的调用会立即返回 而实际操作则由单独的工作线程异步完成 Winsock 还提供 完成端口 据我了解 完成端口充当句柄 套接字 的多路复用器 如果句柄不