1

我正在尝试在 Android 设备中复制一定程度的 RTOS 条件,而无需重新安装整个内核(就像 RTDroid 一样)。这些条件之一是确保关键线程在每次需要 CPU 或内存时优先于普通线程。

我了解使用 NDK 用 C/C++ 编写的代码是在 linux 内核级别执行的。这意味着它应该具有与 DVM 进程(Dalvik 虚拟机)相同的优先级。因此,我推断 C/C++ 代码的执行优先级高于在 DVM 上运行的任何“MAX_PRIORITY”线程。

我可以使用 Renderscript 复制相同的行为吗?我的直觉说不,因为 Renderscript 脚本中的执行主线程是由 Java 应用程序控制的。

提前感谢您提供的任何见解!

4

1 回答 1

4

简而言之,没有。这里还有几个错误的假设/陈述:

...使用 NDK 以 C/C++ 编写的代码在 Linux 内核级别执行。

这是不正确的。您使用 NDK 构建的任何 C/C++ 代码都是从您的 Java 代码中调用的,并且在执行 VM(Dalvik 或 ART)的同一进程和线程的上下文中运行。优先级方面没有什么特别之处。您也可以在本机级别创建线程 (pthread)。这些都在同一个用户空间进程的上下文中运行,并由为系统供电的 Linux 内核调度。

Java级别的Thread对象本质上是VM实现中pthreads的包装器(当然在Dalvik的情况下,ART可能会尝试做一些不同的事情——但我对此表示怀疑),所以没有什么特别或花哨的。

在 Renderscript 的情况下,它如何实现并行化非常依赖于设备/平台。在某些设备上,这可能只使用 CPU 上的 pthreads 来完成。在其他设备上,它可以利用板载 DSP 或(通常)GPU。但是,它不是一个通用的线程环境,也不是你可以决定/管理优先级的东西。它专门用于以并行、异步(相对于 CPU 上的 Java)方式处理数据。

于 2017-02-22T17:34:32.840 回答