0

我需要在 Linux(CentOS) 下的 Java 和 C++ 程序之间传输大量数据。性能是第一个关注点。什么会是最好的选择?RAMDisk (/dev/shm/) 还是本地套接字?

4

1 回答 1

2

套接字是最快的,因为在您完成发送数据之前,另一端可以开始处理数据(在单独的 cpu 内核上)。

假设您要发送 100KB 的数据,另一端可以在收到几 KB 后立即开始处理。而当100KB全部发送完毕时,大概已经处理完90KB左右,所以只剩下10KB了。

使用 RAM 磁盘时,您必须先写入整个 100KB,然后它才能开始处理数据。假设两端需要做大约相同数量的工作,使用套接字比使用 ram 磁盘快 10 倍。

也许将 100KB 写入 RAM 磁盘需要 1 毫秒,然后处理它需要 1 毫秒。使用套接字发送数据需要 1 毫秒,但在发送完所有数据后只需 0.1 毫秒即可完成处理。

发送的数据量越大,套接字的性能增益就越大。10秒写完所有数据,再0.1毫秒在所有数据发送完毕后完成处理。

但是,RAM 磁盘更易于使用。套接字使用数据流,这在编写代码和调试/测试方面更耗时。

另外,不要假设您需要一个 ram 磁盘。根据操作系统的配置,将 100MB 写入旋转盘片硬盘驱动器可能只是将其写入 RAM 缓存,然后稍后将其放入硬盘驱动器。您可以立即从临时 RAM 缓存中读取它,而无需等待数据写入 HDD。在做出性能假设之前始终进行测试。不要假设 HDD 比 RAM 慢,因为它可能会默默地为您优化。

我正在输入这个的 Mac,它是 UNIX,就像 CentOS,目前有大约 8GB 的​​ RAM 专用于保存它猜测我将在不久的将来某个时候阅读的文件的副本。我不必手动创建 RAM 磁盘,它只是将它们启发式地放入 RAM 中。CentOS 做同样的事情,你必须对其进行测试,看看它实际上有多快。

但是套接字绝对是最快的选择,因为您不需要写入所有数据来开始处理它。

于 2014-01-06T06:36:25.940 回答