c++ - 文件 I/O 与 TCP 套接字,同一机器内数据传输哪个更快?

标签 c++ file sockets tcp io

我有大约 10MB 的数据要从服务器程序发送到客户端程序,这两个程序都在同一硬盘驱动器中运行。

服务器端是用C++编写的,客户端是用python编写的。

我已经创建了一个架构,其中服务器将数据写入临时二进制文件,然后通过 TCP 将文件的名称发送到客户端,让客户端知道数据已写入文件并且现在已写入准备好被检索。然后Python客户端从这些文件中检索数据。

这比我预期的要慢。我想知道如果我直接通过 TCP 将数据(二进制格式,而不是字符串)发送到客户端而不是写入/读取文件,是否会更快并使用更少的内存?

最佳答案

假设您的软件被编写为有效使用 TCP,TCP 会更快,因为在 TCP 传输期间,数据永远不需要发送到硬盘驱动器然后再返回。相反,它会一直保留在 RAM 中,并且 RAM 比旋转磁盘或固态磁盘快得多。

通过 TCP 发送数据还允许您的两个程序并行运行,即您的消费者程序甚至可以在生产者程序完成生成数据之前开始消费数据。这可以提供一些额外的加速(与读者在编写者完成写入文件之前无法安全地读取文件的方法相比)

如果您认为您不想通过实际网络(即您的两个程序将始终在同一主机上运行),那么您可能会考虑使用 pipe而不是 TCP 套接字,因为它比 TCP 效率稍高。 (不过,TCP 套接字也可以正常工作)。

(顺便说一句,避免将临时文件写入磁盘方法的另一个原因是,您不必担心磁盘已满或只读或者您的程序不这样做该怎么办有权限写入它想要写入的文件夹)

关于c++ - 文件 I/O 与 TCP 套接字,同一机器内数据传输哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65444777/

相关文章:

c++ - VS2012 中的 strtof() 在哪里?

c++ - 如何使用OpenAL录制声音

c++ - 求两个 x1,x2 之间的质数总数,找不到错误?

file - 如何处理 wix 源路径中的空格?

java - 连续文件读取

c++ - 如何正确设置标志

excel - VBA - 如何从 Excel 2007 中的最近文档列表中删除文件?

c - 我的程序挂起,不会爆发

c# - Java Socket 与 C# TcpClient

java - 套接字客户端卡在用户输入上