IPC的实现方式

2023-12-11

在 Windows 上实现 IPC 的首选方法是什么?

我知道几个类似的:命名管道,共享内存,信号量? ,也许是COM(虽然我不知道如何)...

我想知道什么被认为是最强大、最快速、最不容易出错并且易于维护/理解的。


几年前,我们针对客户端/服务器情况研究了这个特定问题,其中客户端和服务器都在同一台计算机上运行。当时,即使客户端和服务器位于同一台机器上,我们也使用套接字(UDP)。对于我们来说,“最好的”结果是使用命名信号量来共享内存来同步它。当时,我主要研究管道与原始共享内存实现。我测试了具有重叠 I/O 和 I/O 完成端口的管道。

我测试了多种数据大小。在客户端和服务器来回回显 1 字节的低端,原始共享内存实现的速度最快,是原来的 3 倍。当我来回传递 10,000 字节时,管道实现和原始共享内存实现都是最快的。大约相同的速度。如果我没记错的话,我使用的是 4K 缓冲区和共享内存实现。

对于所有数据大小,共享内存测试的速度比使用套接字快 2 倍到 6 倍(与 TCP 相比)。

在管道实现之间,当传递少量数据时,重叠 I/O 版本比 I/O 完成端口版本快约 30%。同样,对于较大的数据块,差异很小。

管道实现的编码当然要简单得多。但是我们处理了相当多的来回传递的小数据块,因此使用命名信号量实现共享内存版本的额外复杂性是值得的。

当然,正如前面提到的,这是几年前的事,你不知道我是否正确实施了所有不同的测试。另请注意,这是针对单个客户的。我们的共享内存通信的最终实现确实可以很好地扩展数百个“客户端”的运行。但我不知道在这种规模上它是否比管道实现更好。

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

IPC的实现方式 的相关文章

  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • FCM 主题限制以及旧的未使用主题的过期/失效?

    我使用 FCM 主题已经有一段时间了 但文档非常有限 大多数搜索都会指向相同的页面 所以我在这里询问 希望有人在该主题上有足够的经验来回答我的问题 我想知道允许的主题数量是否有限制以及不再使用的主题会怎样 我的意思是 什么时候主题会无效 我
  • IBM Worklight 6.1 - 项目无法初始化,因为项目数据库模式来自 N/A 版本

    当我尝试将 war 文件部署到应用程序服务器时 收到以下错误消息 错误 500 javax servlet ServletException Worklight 控制台 初始化失败 记录的异常 java lang RuntimeExcept
  • strsplit 和 lapply

    我在表单的某些文本中有一个字符串 12 34 77 包括引号 我需要将每个数字的值放入列表中 我尝试使用lapply and strsplit control2 lapply strsplit data values as numeric
  • 从 aria-label selenium webdriver 中提取文本 (python)

    现在我正在开发一个程序 该程序接受用户输入的问题和答案 将它们分成单独的 q 和 a 列表 然后根据问题或答案自动回答问题 由于使用 机器人 的地方是在线的 我使用的是 Selenium Web 驱动程序 这在尝试读取 aria 标签时给我
  • 是否可以使用图像代替 SVG 路径的笔画?

    首先 我知道这个问题是very如同this问题 但我尝试用一 个来实现该解决方案SVG PATH但它不起作用 我还知道另一种解决方案是循环PATH并设置FILL of the PATH如上所述here以及网络上的其他地方 不过 我已经动画化
  • 在 Angularjs 中使用 GeoChart

    如何在 Angular 中使用 Google GeoChart 我想在 geoChart 中注入角度数据 就像 Javascript 中的示例一样https developers google com chart interactive d
  • 获取由向量组成的矩阵表示的矩阵的第一列

    假设我代表一个矩阵foo值使用std vector int rows 5 int cols 10 auto foo vector
  • 使用flask_security时,flask_sqlalchemy对象没有添加属性

    我正在尝试使用flask security添加一些角色 用户 但是当我尝试使用以下命令创建用户时遇到了这个问题SQLAlchemySessionUserDatastore 所以我首先从创建开始user datastore像guide db
  • 模式也与连字符匹配

    我有一段像这样的 Perl 代码 模式匹配 var
  • 如何在 MacBook 上使用并行命令来利用多核并行性?

    我经常使用findLinux 和 macOS 上的命令 我刚刚发现了这个命令parallel 我想将它与find如果可能的话命令因为find当我们在大目录中搜索特定文件时 命令需要很长时间 我搜索过这些信息 但结果不够准确 似乎有很多可能的
  • 让 Facebook 好友参加活动?

    我如何才能看到我的哪些朋友参加了 Facebook 活动 我可以使用 Facebook SDK 获取所有与会者的列表 其中 GraphPath eventId attending 使用 Graph API 是否可以实现我想要的功能 我阅读了
  • 导航栏与状态栏重叠

    我面临一个非常奇怪的问题iOS 6 0 iOS 6 0 1 每当我从任何视图控制器呈现模态视图然后关闭该模态视图时 父视图控制器的导航栏 从我呈现模态视图的位置 就会与状态栏重叠 这运行良好iOS 6 0 iOS 6 1模拟器 但在设备上它
  • 在 OpenGL ES 中绘制简单的曲线、直线和圆比在 Quartz 2D 中复杂多少?

    OpenGL ES 真的那么快吗 为什么 与在 Quartz 2D 中绘制这些简单的东西相比 在 OpenGL ES 中绘制如此简单的东西真的那么复杂吗 例如 我有一个实现了 drawRect 的 UIView 子类 我在其中绘制了一些直线
  • 是否可以使用扩展超类方法参数的参数来重写超类方法?

    假设我有一堂这样的课 abstract class Something 它有一个层次结构 其中有类扩展它 class FirstSomething extends Something class SecondSomething extend
  • 在 Headless Chrome Selenium 上检测到

    我试图在使用最新的 UserAgent 进行无头运行时抓取 Amazon 但我的速率受到限制 当我退出无头线路时 我不会被检测到或受到速率限制 下面是我的代码 options Options options add experimental
  • 在 Woocommerce 单一产品页面和购物车上有条件地设置特定产品价格

    在 Woocommerce 中 我想更改单个产品页面和相关购物车项目上特定产品 在本例中 ID 为 87 的价格 产品价格需要增加 10 美元 但仅限于单个产品页面且仅在外部 以便内部价格或 Woocommerce 中设置的价格不会改变 此
  • 每个请求发送两个 servlet 响应

    我写 因为我无法解决以下问题 我有一个处理一些信息的 servlet 作为响应 我添加了文本和二进制内容 如何从同一个请求开始获得两个响应 然后是两个 html 页面 有可能吗 第一个响应应该继续做他现在所做的事情 而第二个响应将出现一个弹
  • Django ImageField“上传有效的图像。您上传的文件要么不是图像,要么是损坏的图像。”

    我安装了 PIL 但是每当我尝试通过模型的 Django 管理将 png 文件上传到图像字段时 都会收到此错误 上传有效的图像 您上传的文件要么不是图像 要么是损坏的图像 其他图像类型工作正常 我尝试过几个不同的 PNG 文件 我在安装 p
  • PHPExcel 返回损坏的二进制文件

    I want to write a reference xls file and retrieve the result When I tested with a single file it works but when the refe
  • IPC的实现方式

    在 Windows 上实现 IPC 的首选方法是什么 我知道几个类似的 命名管道 共享内存 信号量 也许是COM 虽然我不知道如何 我想知道什么被认为是最强大 最快速 最不容易出错并且易于维护 理解的 几年前 我们针对客户端 服务器情况研究