有关实时数据传输性能的服务和流程

时间:2011-12-30 16:42:01

标签: android service garbage-collection ipc

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

现在至关重要的是,数据在到达时加上时间戳,尽可能精确,这就是我遇到gc问题的地方。如果gc在读取数据和加时间戳之间起作用,即使20毫秒也会导致难看的结果。同样重要的是数据永远不会有较大的间隙,因为我在相同的数据类型之间已经有200毫秒。

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

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

问题2:使用IPC是否会降低我的性能?因为我可以简单地让服务在同一个过程中运行,并且更容易共享数据10次。

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

该服务仅适用于一个应用程序,但应尽可能不间断地运行并尽可能实时地提供其数据。那么把它放在自己的过程中呢?

1 个答案:

答案 0 :(得分:1)

  

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

请使用RTOS达到这种精确度。 Android不是RTOS。

  

问题1:如果我创建这样的对象并通过IPC将它们发送到应用程序,那么它们是否存在?

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

  

问题2:使用IPC是否会降低我的性能?

绝对。 IPC价格昂贵。

  

因为我可以简单地让服务在同一个过程中运行,并且更容易共享数据10次。

请做。

  

该应用程序将具有GC,因此如果服务在同一进程中运行,则存在GC破坏实时数据处理的危险。

任何过程中的任何GC都可能“破坏实时数据处理”。 任何过程中的任何工作都可能“破坏实时数据处理”。目前使用的绝大多数Android设备都是单核,而且一个核心一次只能做一件事。即使对于多核设备,您也无法控制与核相关的进程和线程调度,因为它仅由固件管理。

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

  

所以把它放在自己的过程中?

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

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