用 NDK 超越 max_priority

Overtaking max_priority with NDK

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

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

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

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

简而言之,没有。这里还有几个错误的assumptions/statements:

...code written in C/C++, using NDK, is executed at the Linux kernel level.

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

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

就 Renderscript 而言,它如何实现并行化非常 device/platform 依赖。在某些设备上,这可能仅使用 CPU 上的 pthreads 即可完成。在其他设备上,它可能会利用板载 DSP 或(通常)GPU。但是,它不是通用线程环境,也不是您可以 dictate/manage 优先级的东西。它专门用于以并行、异步(相对于 CPU 上的 Java)方式处理数据。