文件 I/O 与 TCP 套接字,同一台机器内的数据传输哪个更快?
File I/O vs TCP socket, which is faster for data trasnfer within same machine?
我有大约 10MB 的数据要从服务器程序发送到客户端程序,两者 运行 在同一个硬盘中。
服务器是用C++写的,客户端是用python写的。
我已经创建了一个架构,其中服务器将数据写入临时二进制文件,然后通过 TCP 将文件的名称发送给客户端,让它知道数据已写入文件并且它现在可以检索了。然后 python 客户端从这些文件中检索数据。
这比我预期的要慢。我想知道如果我直接通过 TCP 将数据(二进制格式,而不是字符串)发送到客户端而不是 writing/reading 文件,是否会更快并且使用更少的内存?
假设您的软件是为有效使用 TCP 而编写的,TCP 会更快,因为在 TCP 传输过程中,数据永远不需要传出到硬盘驱动器然后再返回。相反,它会一直保留在 RAM 中,并且 RAM 比旋转磁盘或固态磁盘快得多。
通过 TCP 发送数据还允许您的两个程序并行 运行,即您的消费者程序甚至可以在您的生产者程序完成生产之前开始使用数据。这可以提供一些额外的加速(与 reader 在编写器完成写入文件之前无法安全读取文件的方法相比)
如果您认为自己永远都不想通过实际网络(即您的两个程序将始终 运行 在同一台主机上运行),那么您可能会考虑使用 pipe 而不是 TCP 套接字,因为它比 TCP 更有效。 (不过,TCP 套接字也可以正常工作)。
(顺便说一句,避免将临时文件写入磁盘方法的另一个原因是,您不必担心磁盘已满或只读,或者您的程序没有'有权限写入它想写入的文件夹)
我有大约 10MB 的数据要从服务器程序发送到客户端程序,两者 运行 在同一个硬盘中。
服务器是用C++写的,客户端是用python写的。
我已经创建了一个架构,其中服务器将数据写入临时二进制文件,然后通过 TCP 将文件的名称发送给客户端,让它知道数据已写入文件并且它现在可以检索了。然后 python 客户端从这些文件中检索数据。
这比我预期的要慢。我想知道如果我直接通过 TCP 将数据(二进制格式,而不是字符串)发送到客户端而不是 writing/reading 文件,是否会更快并且使用更少的内存?
假设您的软件是为有效使用 TCP 而编写的,TCP 会更快,因为在 TCP 传输过程中,数据永远不需要传出到硬盘驱动器然后再返回。相反,它会一直保留在 RAM 中,并且 RAM 比旋转磁盘或固态磁盘快得多。
通过 TCP 发送数据还允许您的两个程序并行 运行,即您的消费者程序甚至可以在您的生产者程序完成生产之前开始使用数据。这可以提供一些额外的加速(与 reader 在编写器完成写入文件之前无法安全读取文件的方法相比)
如果您认为自己永远都不想通过实际网络(即您的两个程序将始终 运行 在同一台主机上运行),那么您可能会考虑使用 pipe 而不是 TCP 套接字,因为它比 TCP 更有效。 (不过,TCP 套接字也可以正常工作)。
(顺便说一句,避免将临时文件写入磁盘方法的另一个原因是,您不必担心磁盘已满或只读,或者您的程序没有'有权限写入它想写入的文件夹)