【发布时间】:2014-01-06 06:27:46
【问题描述】:
我需要在 Linux(CentOS) 下的 Java 和 C++ 程序之间传输大量数据。性能是第一个关注点。 什么会是最好的选择? RAMDisk (/dev/shm/) 还是本地套接字?
【问题讨论】:
-
您进行过任何测试吗?
-
/dev/shm 不是 ramdisk,ramdisk 是一块被视为磁盘驱动器的内存。 /dev/shm 是共享内存。
-
好的,/dev/shm 不是 ram 磁盘,但它非常相似——至少性能相似。我的情况是有 16 个客户端会生成很多小文件(小于 1MB)并将这些文件发送到服务器(客户端和服务器在同一主机中)。数据总量约为1TB。如果我使用 /dev/shm 进行 IPC,文件将被写入子文件夹,当文件夹大于 100MB 时,客户端将创建另一个文件夹并将新数据文件写入新文件夹。当文件夹已满(超过 100MB)时,客户端会通知服务器进行处理。
-
好的,16 个客户端,正在写入 /dev/shm V.S.通过套接字发送。令我惊讶的是,socket 版本比 /dev/shm 版本慢了大约 10%(socket 为 120 分钟,/dev/shm 为 110 分钟)。另外需要注意的是,服务器处理输入数据会消耗大量 CPU 资源。
-
@avhacker 毫不奇怪 - 共享内存需要较少的复制操作,并且只需要发送者和接收者之间的基本同步。