Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows和Linux的同一台计算机上的套接字_C#_Linux_Networking_Sockets_Tcp - Fatal编程技术网

C# Windows和Linux的同一台计算机上的套接字

C# Windows和Linux的同一台计算机上的套接字,c#,linux,networking,sockets,tcp,C#,Linux,Networking,Sockets,Tcp,与Windows和Linux上的命名管道和其他方法相比,在执行IPC时使用套接字的效率如何 现在,我在4个单独的盒子上有4个单独的应用程序需要通信。两个是运行在WindowsServer2003R2上的.NET3.5应用程序。两个是Linux(Suse Linux 10)。它们通常不受CPU限制。流量并没有那么大,但它必须具有低延迟,这一点非常重要。我们现在正在使用sockets,在linux机器上安装nagle dis和sles10慢速启动补丁 您认为,只要在同一个windows设备上运行两个

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

现在,我在4个单独的盒子上有4个单独的应用程序需要通信。两个是运行在WindowsServer2003R2上的.NET3.5应用程序。两个是Linux(Suse Linux 10)。它们通常不受CPU限制。流量并没有那么大,但它必须具有低延迟,这一点非常重要。我们现在正在使用sockets,在linux机器上安装nagle dis和sles10慢速启动补丁

您认为,只要在同一个windows设备上运行两个windows应用程序,在同一个linux设备上运行两个linux应用程序,并且不进行任何代码更改(即仍然使用套接字),我们就能获得多大的速度提升


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

本地命名管道将更快,因为它们在内核模式下运行

至于TCP性能,我最近在HP-UX服务器(8个英特尔安腾2处理器1.5 GHz 6 MB,400 MT/s总线)和红帽Linux(2 IA-64 1,6 GHz)上进行了此类测试。我用它来测试TCP性能。我发现在同一台机器上运行iperf时,TCP交换的速度比在两台不同的机器上运行iperf快十倍多

您也可以尝试一下,因为您可能会对一些选项感兴趣—读取或写入缓冲区的长度、设置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/sec

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


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

这很容易测试。只是测试一下。+1,jeffamaphone:这里没有模糊的评论或轶事证据很重要。重要的是Michael的程序如何运行。同意,我应该测试一下。考虑到网络、设置等方面的差异,这是唯一确定答案的方法。但我只是希望有人能链接到已经做过类似测试的人。我无法想象,严格比较这些东西的性能是一个新的想法——它可能被比我更了解网络的人做了100次。我没有可用的数据,所以你必须相信我的话。但是Linux上的Unix域套接字要比TCP over loopback快得多。但就数量而言,从(不同机器上的套接字)-->(同一机器上的套接字)-->(命名管道)开始,哪个跳跃更大?在同一台机器上运行应用程序与花时间转换为命名管道相比,能为您带来多少好处?在同一台机器上运行应用程序将为您带来巨大的性能提升,因为以太网延迟将大大减少。如果您需要,迁移到命名管道可能会给您带来更多的帮助。我建议您首先尝试使用TCP/IP堆栈,如果您确实需要这种提升,那么可以使用命名管道。很可能你不会,但我不能确定,因为我对你的情况了解得不够。使用UNIX域套接字!这些管道在性能上与命名管道相当或接近,但在使用上与TCP套接字几乎相同。我听说它们很好。但是你有没有网站,他们会比较使用以太网上的常规套接字、同一台机器、unix域套接字和管道进行的相同数据传输?这太完美了。将在我的安装程序上运行它作为开始。谢谢