这里的“DMA”是指:直接内存访问,“RDMA”是:远程直接内存访问。
我使用 Java 创建了一个应用程序来传输股票数据,但我发现延迟比我预期的要大。听说有人开发同类型的应用程序使用“DMA/RDMA”,性能不错,不知道能不能在Java中使用“DMA/RDMA”?
如果没有,我应该使用什么语言,是否有任何好的库可以使用?
IBM 开发人员的这篇文章很好地概述了如何使用 java 实现 DMA 访问
你有两个选择(我知道):
据我所知,RDMA 是网络基础设施(以及相关内核模块等)的属性,而不是应用程序级编程语言的属性。
换句话说,您必须获得专门的工具包来利用 RDMA 来减少网络延迟。以下是支持 RDMA 的 10GbE 网卡示例:link。
Java 7 支持 Solaris 和 Linux 上的 SDP 协议(使用 OpenFabrics.org 驱动程序)。不幸的是,SDP 协议在 OFED 的 2.x 版本中已被弃用。人们求助于像 jVerbs 这样的 JNI 包装器。
Java 应用程序能够通过 nio 包映射文件。那些映射文件可以被多个程序访问——我担心这是关闭 java 中可用的 DMA 的东西