unix/linux 套接字中的阻塞模式如何工作?

2024-03-30

阻塞模式是否将该特定任务置于“进程等待”状态,因为我认为非阻塞套接字需要用户明确的“忙等待”或“自旋锁”实现。或者阻塞模式套接字只不过是内核忙等待的隐式实现。

在信号量/互斥体/监视器等锁定机制中,通常通过将任务推入阻塞状态来实现锁定。我认为如果锁定可以实现这些事情,那么套接字锁定也可以通过相同的方式实现。

我不确定,我认为轮询不是一种有效的方法,特别是对于内核来说,因为内核总是忙于处理这么多任务。

thx.


不,阻塞套接字是在内核中实现的。该进程处于非执行状态,不消耗任何CPU时间。

内核可以自由地运行其他任务,直到某些外部活动导致它唤醒该任务。例如,网卡的硬件中断让其知道有数据要读取。内核读取它并将其推送到网络堆栈,最终唤醒应用程序来处理数据。

定时器的工作方式相同,但有定时器中断。

内核might实际上是在后台轮询硬件,但不一定是……这完全取决于硬件的设计方式。

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

unix/linux 套接字中的阻塞模式如何工作? 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 使用反射调用方法

    是否可以通过类的反射来调用方法 class MyObject some methods public void fce call another method of this object via reflection 谢谢 绝对地 imp
  • 播放 2.3.8 sbt 不包括 logback

    我很难排除logback从我的play 2 3 8测试运行来看 我尝试了很多排除规则 但似乎没有任何效果 我在我的依赖树中也找不到它 我的 sbt 文件中的片段 resolvers Seq Typesafe repository snaps
  • CMake 构建工具链中“strip”命令的 Android NDK 路径变量

    我正在尝试添加一个去除调试符号我的 Android 库的步骤 其中包括不同 ABI 的本机共享库 例如x86 native lib so x86 64 native lib so arm64 v8a native lib so etc 我明
  • 如何阅读 PostgreSQL 命令的文档语法?

    我想从数据库 B 中的多个表在数据库 A 中创建一个表 我查阅了 PostgreSQL 的文档here http www postgresql org docs 9 1 static sql createtable html弄清楚命令的用法
  • 如何从 int 转换为 hex

    我想在 Golang 中将 int 转换为 hex 在strconv中 有一个将字符串转换为十六进制的方法 是否有类似的方法从 int 获取十六进制字符串 由于十六进制是整数文字 https golang org ref spec Inte
  • 我可以更改 POST 值而不重新 POST 吗?

    这是在 IIS 6 世界中使用 ASP NET 2 0 我有一个用户提交一个表单 通过 POST 发送数据 接收数据的页面会进行一些简单的验证 如果验证通过 则运行黑盒代码例程 该例程基本上使用 Request Form NameHere
  • 在R中删除国家地图边界之外的数据

    我知道这很简单 但无法让它发挥作用 我想删除下面地图上多余的数据点 我该怎么做 下面的代码给了我结果 ggplot geom polygon data rwa2 aes x long y lat group group colour bla
  • Travis-CI“Android 28 许可证尚未被接受”

    我正在尝试使用 Travis 构建 android 项目android 28 and build tools 28 0 0但无论我做什么我都会得到 gt Failed to install the following Android SDK
  • Excel VBA SQL - 多个数据源

    我有一个相当简单的问题 我找不到答案 我有以下 SQL Select a from filea where a in select b from fileb 我正在尝试使用 VBA 在 Excel 中运行它 我遇到的问题是 filea 是
  • WordPress 导航栏中的自定义短代码

    我只想在我的 WordPress 主题菜单栏中添加一个短代码按钮来处理bootstrap modal view功能 我试过 Shortcodes in Menus 插件 但它不起作用 我在菜单中找不到短代码的替代插件 所以我安装了 Boot
  • 验证 FRAMA-C 中的矩阵转置函数

    我有一个简单的矩阵转置函数 我想用后置条件来验证它 matrix transpose matrix transpose original matrix original matrix 其语法是什么 我试过了 ensures result r
  • shell32 copyhere 在.Net 和 powershell 脚本中都不起作用

    有一个 powershell 脚本可以通过 MTP 以编程方式在 PC 和 Android 之间复制文件 请参阅针对 mtp 连接访问文件系统 http www pstips net access file system against m
  • PHP GET 变量数组注入

    我最近了解到可以将数组注入 PHP GET 变量来执行代码 php a asd a asdasd b a 这就是我得到的例子 我不知道它是如何工作的 并且想知道这是否可能 PHP 将解析查询字符串 并将这些值注入到 GET超全局数组 同样适
  • 如何在 VB NET 中读取控制台缓冲区?

    我见过一个使用 ConsoleRead API 函数的 C 示例 但是当我尝试将其转换为 VBNET 时 出现了很多错误 在其他网站 如 pinvoke 中 独特的示例也是针对 C 的 我找不到任何好的示例ConsoleRead API 函
  • 可展开的树形菜单列表

    我想要实现的目标如下 我想要一个树视图列表 它将出现在页面的左侧 当展开一个项目时 它的项目是从数据库加载的 我可以做这部分 所以基本上它会像这样 Category1 Category2 Category3 Category4 当用户点击
  • 我可以让 clang 对 Objective-C 文字对象使用自定义类吗?

    gcc 文档参考了 fconstant string class http gcc gnu org onlinedocs gcc Constant string objects html参数 它允许您更改用于的类 Objective C s
  • PrintWriter 未打印出完整的字符串

    我有以下代码 FileWriter F new FileWriter out txt PrintWriter H new PrintWriter F H print split split length 2 H print END 然而 当
  • 如何在 TinyMCE 中允许自闭合标签?

    我的视频元素内的源标签需要自动关闭 这样 iPad 才不会开始抱怨 我输入
  • 如何在 android 的 logcat 中查看数组

    我想在 logcat 中记录原始数据 例如数组 这样我就知道输出是什么 假设我有一个数组 就像这样 File mp3List Log v test mp3List 为什么我不能将数组记录到控制台 我该怎么做 您无法记录该数组 因为它只是一个
  • unix/linux 套接字中的阻塞模式如何工作?

    阻塞模式是否将该特定任务置于 进程等待 状态 因为我认为非阻塞套接字需要用户明确的 忙等待 或 自旋锁 实现 或者阻塞模式套接字只不过是内核忙等待的隐式实现 在信号量 互斥体 监视器等锁定机制中 通常通过将任务推入阻塞状态来实现锁定 我认为