IPC:Ramdisk V.S.插座

时间:2014-01-06 06:27:47

标签: sockets ipc ramdisk

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

1 个答案:

答案 0 :(得分:2)

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

假设您正在发送100KB数据,另一端可以在收到几千字节后立即开始处理。当所有100KB都被发送时,它可能已经完成了90KB左右的处理,因此它只剩下10KB。

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

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

发送的数据量越大,套接字的性能提升就越大。所有数据都写入10秒钟,所有数据发送后再处理0.1毫秒进行处理。

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

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

Mac我正在键入这个,就像CentOS一样是UNIX,目前有大约8GB的RAM专用于保存我将在不久的将来读取的文件副本。我没有手动创建RAM磁盘,它只是启发式地将它们放入RAM中。 CentOS做同样的事情,你必须测试它以确定它实际上有多快。

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