java 应用程序和 java 脚本应用程序在单台计算机上的高性能通信
high performance communication between a java app and javascript application on a single computer
我们想在单台计算机上将大量数据 (> 1GB) 从 java 程序发送到 Electron.js 程序(在 java 脚本中)。
这种通信的最高性能(最短响应时间)实现是什么? (某种消息队列或共享内存或数据库)
与 Java 应用程序共享内存很棘手。 (它通常涉及本机代码。)我不知道 Java 脚本,但我希望它同样困难,甚至更难。
消息队列...将取决于您选择的消息队列技术。典型的消息队列是为发送相对较小的消息并可靠地发送而设计的。 (而且他们通常依赖数据库来确保可靠性。)
数据库...可靠,但不是为此而设计的。首先,他们确保数据在可以被另一个事务读取之前安全地存储在磁盘上。 (这是 ACID 中的 D)。
我的建议是使用以下其中一项:
- File I/O 如果您一次性发送数据而不是 "messages".
,则使用 RAM 文件系统
- 一个 UNIX 域套接字。
- UNIX 管道或等同物。
套接字和管道的问题在于 OS 中的缓冲量有限。这可能会导致上下文切换。如果发送和接收速度不匹配,您很可能会导致一端停止。
最后,无论您如何操作,移动 1GB 的数据都将花费大量时间。处理它可能需要更长的时间......除非处理是微不足道的。 (如果它是微不足道的,你最好不要发送它)。因此无论您如何移动数据,响应时间都不可能是 "fast"。
我们想在单台计算机上将大量数据 (> 1GB) 从 java 程序发送到 Electron.js 程序(在 java 脚本中)。
这种通信的最高性能(最短响应时间)实现是什么? (某种消息队列或共享内存或数据库)
与 Java 应用程序共享内存很棘手。 (它通常涉及本机代码。)我不知道 Java 脚本,但我希望它同样困难,甚至更难。
消息队列...将取决于您选择的消息队列技术。典型的消息队列是为发送相对较小的消息并可靠地发送而设计的。 (而且他们通常依赖数据库来确保可靠性。)
数据库...可靠,但不是为此而设计的。首先,他们确保数据在可以被另一个事务读取之前安全地存储在磁盘上。 (这是 ACID 中的 D)。
我的建议是使用以下其中一项:
- File I/O 如果您一次性发送数据而不是 "messages". ,则使用 RAM 文件系统
- 一个 UNIX 域套接字。
- UNIX 管道或等同物。
套接字和管道的问题在于 OS 中的缓冲量有限。这可能会导致上下文切换。如果发送和接收速度不匹配,您很可能会导致一端停止。
最后,无论您如何操作,移动 1GB 的数据都将花费大量时间。处理它可能需要更长的时间......除非处理是微不足道的。 (如果它是微不足道的,你最好不要发送它)。因此无论您如何移动数据,响应时间都不可能是 "fast"。