有关实时数据交付性能的服务和流程

Posted

技术标签:

【中文标题】有关实时数据交付性能的服务和流程【英文标题】:Service and processes regarding performance for real-time data delivery 【发布时间】:2011-12-30 16:42:00 【问题描述】:

我有一个读取实时传感器数据的服务。数据按顺序读取,4 种不同的类型,每一种相隔约 50 毫秒。实际上,传感器数据来自蓝牙,但由服务从 inputStream 中读取。

现在至关重要的是,在数据到达时以尽可能最精确的时间戳标记数据,这就是我遇到 gc 问题的地方。如果 gc 在读取数据和时间戳之间启动,即使 20 毫秒也会导致丑陋的结果。同样至关重要的是,数据永远不会有更大的差距,因为我在相同的数据类型之间已经有 200 毫秒。

另一方面,我希望将数据实时传输到应用程序(小延迟是可以的)。 我设法编写了该服务,以便它在开始时分配其所有对象,并且永远不会为 GC 产生任何垃圾。但是对于 IPC,我需要创建 parcelable 对象以将它们发送到应用程序。

问题 1:如果我创建此类对象并通过 IPC 将它们发送到应用程序,它们存在于谁的内存中?由于 2 个进程不共享内存。

问题 2:使用 IPC 会降低性能吗?因为我可以简单地让服务在同一个进程中运行,并且更轻松地共享数据 10 倍。

应用程序会有 GC,因此如果服务在同一进程中运行,则存在 GC 破坏实时数据处理的危险。但是,如果我将它们分成 2 个进程,我担心 IPC 会花费我一些性能,这可能会超过 GC 的麻烦。

该服务仅适用于单个应用,但应尽可能不间断地运行并尽可能实时地传送其数据。那么是否将其放入自己的进程中?

【问题讨论】:

【参考方案1】:

现在至关重要的是,在数据到达时以尽可能最精确的方式为数据加上时间戳,这就是我遇到 gc 问题的地方。

请使用RTOS 以获得该精度。 android 不是 RTOS。

问题 1:如果我创建此类对象并通过 IPC 将它们发送到应用程序,它们存在于谁的内存中?

在这两个过程中。这就是为什么你应该去掉第二个过程,因为你不需要它。

问题 2:使用 IPC 会降低性能吗?

当然。 IPC 很贵。

因为我可以简单地让服务在同一个进程中运行,并且更轻松地共享数据 10 倍。

请做。

应用会有 GC,所以如果服务在同一个进程中运行,则存在 GC 破坏实时数据处理的危险。

任何进程中的任何 GC 都可能“中断实时数据处理”。 任何流程中的任何工作都可能“破坏实时数据处理”。当今使用的绝大多数 Android 设备都是单核的,一个核一次只能做一件事。即使对于多核设备,您也无法控制与内核相关的进程和线程调度,因为这是由固件专门管理的。

同样,您的项目似乎需要 RTOS,而 Android 不是 RTOS。

所以是否将其放在自己的进程中?

您应该使用合适的 RTOS 而不是 Android。

如果您出于某种原因选择坚持使用 Android,请不要将其置于自己的进程中,因为它对您没有帮助,只会浪费 RAM 和 CPU 时间。但是你的延迟通常会超过你认为“丑陋”的 20 毫秒。

【讨论】:

也许我有点过激了,但我真的希望从进入系统到在 GUI 上输出的延迟最小。我必须坚持使用 android,因为整个应用程序已经存在,我正在重写一个数据源,我想让它尽可能快和完美。但将其与应用程序放在同一进程中应该是朝着该目标迈出的一大步。

以上是关于有关实时数据交付性能的服务和流程的主要内容,如果未能解决你的问题,请参考以下文章

GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

猿创征文|GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

如何兼顾性能+实时性处理缓冲数据?

实时镜像的服务器数据在线备份方法与流程

实时镜像的服务器数据在线备份方法与流程