c# - 适用于 Windows 和 Linux 的同一台机器上的套接字

标签 c# linux networking sockets tcp

与 Windows 和 Linux 上的命名管道和其他方法相比,在执行 IPC 时使用套接字的效率如何?

现在,我在 4 个需要通信的独立盒子上有 4 个独立的应用程序。两个是在 Windows Server 2003 R2 上运行的 .NET 3.5 应用程序。两个是 Linux (Suse Linux 10)。它们通常不受 CPU 限制。流量不是那么大,但低延迟非常重要。我们现在正在使用禁用 nagle 的套接字,并在 linux 机器上安装 sles10 慢启动补丁。

您认为只要在同一个 windows 机器上运行两个 windows 应用程序并在同一个 linux 机器上运行两个 linux 应用程序并且不做任何代码更改(即仍然使用套接字),我们会得到多少速度提升。

操作系统会意识到端点在同一台机器上并且知道不要将数据包传到以太网吗?他们的数据包是否仍然需要通过整个网络堆栈?如果我们花时间更改为命名管道或内存映射文件或其他东西,速度会快多少?

最佳答案

至于 TCP 性能,我最近在 HP-UX 服务器(8 个 Intel Itanium 2 处理器 1.5 GHz 6 MB,400 MT/s 总线)和 Red Hat Linux(2 IA-64 1 ,6 GHz)。我用了iperf为了测试TCP性能。我发现,与在两台不同机器上运行 iperf 相比,在同一台机器上运行 iperf 时,TCP 交换速度要快十倍以上。

您也可以尝试一下,因为其中有您可能感兴趣的选项 - 读取或写入的缓冲区长度、设置 TCP 无延迟等。您还可以比较 Windows 机器上的 TCP 交换速度,因为有一个用于 Winddws 的 iperf 版本。

这是一个更详细的比较:

1) 在不同 HP-UX 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,默认 TCP 窗口 32K:387 Mbits/sec

2) 在不同 HP-UX 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,TCP 窗口 512K:640 Mbits/sec

3) 在同一 HP-UX 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,默认 TCP 窗口 32K:5.60 Gbits/sec

4) 在同一台 HP-UX 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,默认 TCP 窗口 512K:5.70 Gbits/秒。

5) 在同一 Linux 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,TCP 窗口 512K:7.06 Gbits/sec

6) 在 HP-UX 和 Linux 上运行的两个 iperf 应用程序之间的 TCP 交换速度,TCP 窗口 512K:699 Mbits/sec

关于c# - 适用于 Windows 和 Linux 的同一台机器上的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644851/

相关文章:

c# - 如何使用 Azure TableClient 2.0 BeginExecuteQuerySegmented

java - Simple Injector 中是否有相当于 Guice Providers 的东西?

java - 如何使用 Java 索引整个硬盘/文件系统?

c - 如何从 C 程序刷新 Linux 中的 CPU 缓存?

linux - Netcat反向shell

go - 没有 Docker 的 Traefik v2 反向代理

c# - 如何使用单个文本框搜索多列)

java - 安装 jdk 8 后 JVM 的时区不正确

php - 数据未插入生产站点的数据库

c++ - 确定未绑定(bind)套接字的地址族