了解libuv/epoll/非阻塞网络IO

2024-03-21

我试图了解非阻塞网络 IO 是如何工作的Node.js/libuv。我已经发现了fileIO 是使用完成的libuv工作线程(因此,在后台线程中)。不过很多地方都说networkIO 是使用系统调用以非阻塞方式完成的,例如epoll, kqueue等(取决于操作系统)。

现在我想知道这是否意味着实际的 IO 部分(read()) is still在主线程上完成,因此会阻塞,即使 e. G。epoll用来?就我的理解而言,epoll仅通知可用事件,但实际上并不执行读/写操作。至少在我发现的例子中(例如http://davmac.org/davpage/linux/async-io.html http://davmac.org/davpage/linux/async-io.html) epoll总是与read系统调用,这是一个阻塞IO操作。

换句话说,如果libuv使用单线程并且epoll,要在数据可供读取时收到通知,接下来的读取操作是否正在主线程上执行,从而可能阻塞主线程上的其他操作(考虑网络请求)?


引用文件的文件描述符始终报告为可供读/写epoll/poll/select, 然而,read/write可能会阻塞等待数据读/写。这就是为什么文件 I/O 必须在单独的线程中完成的原因。

而非阻塞send/recv使用管道和套接字确实是非阻塞的,因此可以在 I/O 线程中完成,而不会有阻塞线程的风险。

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

了解libuv/epoll/非阻塞网络IO 的相关文章

随机推荐

  • 忽略正则表达式匹配中的换行符

    我正在尝试使用以下脚本将所有匹配的事件替换为标题大小写 当过滤词之间有换行符 在本例中为 ABC 和 DEF 时 该行不会按预期被替换 在这种情况下如何忽略换行符 编辑 我不想从字符串中完全删除所有换行符 而只想删除过滤词之间的换行符 Ed
  • 加载 YouTube 视频并收听 onPlayerStateChange

    单击链接后 我尝试播放 YouTube 视频 并在播放完毕后用图像替换该视频 上半场很轻松 然而我在下半场遇到了麻烦 最初我只是简单地附加了一个iframe嵌入 然而要听ENDED事件中 我尝试遵循 YouTube 开发文档 现在 我似乎什
  • DB2 v9.5 类型 2 驱动程序的 JPA 2.0 Provider Hibernate 3.6 在配置准备中抛出异常

    JPA 2 0 Provider Hibernate 在为实体管理器工厂准备配置时抛出异常 我正在使用 DB2 v9 5 数据库和 DB2 v9 5 JDBC 类型 2 驱动程序 java sql SQLException IBM JDBC
  • Python 有同步吗?

    The 同步手册页 http linux die net man 2 sync says sync 导致对文件元数据和数据的所有缓冲修改 写入底层文件系统 Python 是否有调用来执行此操作 附 不是fsync http docs pyt
  • 在运行时更改 AR core 中对象的纹理

    我正在创建一个应用程序 我需要在其中更改 3d 对象的纹理 图案 我正在使用 AR Core SDK 和 android 我已经使用了下面的代码 但它不起作用 Texture builder setSource this R drawabl
  • Clojure 中的块注释

    如何在 Clojure 中注释多行 其实 还有办法 comment 定义嘿 嘿 对我进行检查
  • 使用 DT(DataTables 按钮扩展)导出表格时保持格式

    我制作了一个闪亮的应用程序 有人上传文件 计算一些比率 并且可以使用阈值滑块来格式化这些比率 我用DT formatStyle为此 它工作得非常好 据我了解这个函数 它创建一个回调来处理条件格式 然后 我想使用按钮扩展导出数据DT 我想在导
  • 正则表达式在 if 语句中将字符串与空格匹配(使用引号?)

    我将如何进行如下所示的正则表达式匹配 但在 This 周围加上引号 就像在现实世界中 This 将是一个可以在其中包含空格的字符串 bin bash text This is just a test string if text This
  • 分布式事务:.NET Framework 与 .NET Core

    我有以下代码示例 static void Main string args TransactionManager DistributedTransactionStarted sender eventArgs gt Console Write
  • SSE 和 AVX MoveMask 的用途是什么

    问题 MoveMask 的目的或意图是什么 学习如何使用 x86 x86 64 汇编 SSE AVX 的最佳地点是哪里 我可以更有效地编写代码吗 提问原因 我有一个用 F for NET 编写的使用 SSE2 的函数 我使用 AVX2 写了
  • 仅检索 Java 类中声明的静态字段

    我有以下课程 public class Test public static int a 0 public int b 1 是否可以使用反射来仅获取静态字段的列表 我知道我可以获得所有字段的数组Test class getDeclaredF
  • Android Google 地图 v2 删除默认标记

    我在我的 Android 应用程序中实现了 Android Google Maps v2 没有任何问题 但是 地图包含一些我未包含的 默认标记 我的意思是 一些私人营业地点 是否可以从地图上删除这些标记 以便我只获得城市名称和街道名称 只需
  • 捕获 Camera2 预览帧返回空缓冲区

    我一直在开发一个简单的 Android 应用程序 旨在将流式相机帧从 Android Camera2 API 管道传递到我的算法 我已经制作了几个应用程序 忠实地使用 Android Camera1 API 执行此操作 但即使在检查 Goo
  • 设置证书验证位置时出错

    OS Ubuntu 16 01 PHP 7 0 根据一些谷歌搜索以及 StackOverflow 上问题的输入 我设置以下 Curl 选项 CURLOPT SSL VERIFYPEER gt true CURLOPT SSL VERIFYH
  • 在emacs中使用flymake和tramp远程运行pyflakes?

    我正在尝试使用 Flymake 来运行 pyflakes 如建议的那样here http www emacswiki org cgi bin wiki PythonMode toc9 这对于本地文件来说效果很好 并且几乎可以通过一些调整来处
  • Bootstrap网格系统-如何使两列高度相等? [复制]

    这个问题在这里已经有答案了 如何在 Bootstrap 网格列中使两列具有相同的高度 item text padding 30px important Flex center display flex align items center
  • 获取文件的扩展名而不在路径中提供扩展名

    当您指定除扩展名之外的整个路径时 是否可以获得文件的扩展名 例如 C Users Administrator Pictures BlueHillsTest Thanks Directory GetFiles http msdn micros
  • Selenium 2 和 JUnit4:如何捕获异常屏幕截图?

    我只想在意外异常时捕获屏幕截图 Note This answer could be outdated The answer is based on Selenium 2 15 Using 测试观察者 http kentbeck github
  • 正则表达式匹配所有字母数字和某些特殊字符?

    我正在尝试让正则表达式工作 该正则表达式将允许所有字母数字字符 大写字母和非大写字母以及数字 但也允许空格 正斜杠 破折号 并加上 我已经开始了 但到目前为止还没有成功 如果你想允许only那些 你还需要使用锚点 and a zA Z0 9
  • 了解libuv/epoll/非阻塞网络IO

    我试图了解非阻塞网络 IO 是如何工作的Node js libuv 我已经发现了fileIO 是使用完成的libuv工作线程 因此 在后台线程中 不过很多地方都说networkIO 是使用系统调用以非阻塞方式完成的 例如epoll kque