使用进程间通信 (IPC) 的性能影响

问题描述 投票:0回答:1

IPC 的用途是什么?是否可以使用 IPC 在进程之间发送较大的 JSON 块(数百个字符)?我是否应该尝试使用 IPC 发送尽可能小的消息,或者减少消息大小所带来的性能提升是否不值得?

linux windows macos performance ipc
1个回答
7
投票

IPC 的用途是什么?是否可以使用 IPC 在进程之间发送较大的 JSON 块(数百个字符)?

IPC 的核心正如其表面所言。当您需要在进程之间传递信息(无论是什么)时,可以使用它。该主题非常广泛,从技术上讲包括分配共享内存和手动进行通信,但考虑到问题的语气和标签,我假设您正在谈论操作系统提供的设施。

Wikipedia 在讨论如何使用 IPC 方面做得非常好,我认为我不能做得更好,所以我将专注于第二个问题。

我是否应该尝试使用 IPC 发送尽可能小的消息,或者减少消息大小所带来的性能提升是否不值得?

这听起来有点像微优化。我不能明确地说,因为我不了解 Microsoft 和 Apple 的源代码,而且我真的不想深入研究 Linux 内核的 IPC 实现,但是,这里有几点:

  1. IPC 是一种常见操作,因此操作系统设计者可能会对其进行优化以提高效率。有一些工程师团队已经考虑了这个问题并找到了如何快速实现这一点的方法。
  2. 跨进程/线程通信的瓶颈几乎总是同步。延迟很糟糕,但竞争条件和僵局更糟糕。然而,操作系统设计者可以通过许多创造性的方法来加速该过程,因为系统控制着进程调度程序和内存管理器。
  3. 有很多方法可以加快数据传输速度。对于操作系统来说,如果数据需要跨进程边界,那么可能需要进行一些复制,但操作系统一直在各处复制内存。考虑一下命令行实用程序,例如
    netstat
    。当该可执行文件运行时,需要分配内存,需要从磁盘加载进程,并且操作系统需要执行的任何地址修复都需要在进程启动之前完成。这一切完成得如此之快,以至于你几乎没有注意到。在 Windows 上,
    netstat
    约为 40k,几乎立即加载到内存中。 (记事本,另一个快速加载程序的大小是该大小的 10 倍,但它仍然会在很短的时间内启动。)
  4. 上面#2 的一个大例外是,如果您正在讨论不在同一台计算机上的进程之间的 IPC。 (想想 Windows RPC)那么你确实会受到网络/通信堆栈速度的限制,但此时这里或那里几 kb 不会产生很大的差异。 (您可以将 AJAX 视为 IPC 的一种形式,其中“进程”是服务器和您的浏览器。现在考虑一下 Google Docs 的运行速度。)

如果 IPC 位于同一系统上的进程之间,我认为不值得花费大量精力从消息中删除字节。让您的消息易于调试。

如果通信发生在不同机器上的进程之间,那么您可能需要考虑一些事情,因为花费了大量时间来调试问题,而使用更好的数据格式、几十毫秒的额外传输时间本来可以很简单不值得让数据更难解析/调试。记住优化的三个规则1:

  1. 不要。
  2. 暂时不要……。 (对于专家)
  3. 先做个人资料。

1 前两条规则通常归因于迈克尔·杰克逊。 (这个不是这个)

© www.soinside.com 2019 - 2024. All rights reserved.