Android ndk 使用NDK超越最大优先权

Android ndk 使用NDK超越最大优先权,android-ndk,arm,real-time,renderscript,android-renderscript,Android Ndk,Arm,Real Time,Renderscript,Android Renderscript,我试图在Android设备中复制一点RTOS条件,而不必重新安装整个内核(就像RTDroid一样)。其中一个条件是确保关键线程在每次需要CPU或内存时都优先于正常线程 我知道使用NDK用C/C++编写的代码是在linux内核级别执行的。这意味着它应该具有与DVM进程(Dalvik虚拟机)相同的优先级。因此,我推断C/C++代码的执行优先级高于在DVM上运行的任何“最高优先级”线程 我可以使用Renderscript复制相同的行为吗?我的直觉是否定的,因为Renderscript脚本中的主执行线程

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

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

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


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

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

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

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

Java级别的
Thread
对象本质上是虚拟机实现中pthreads的包装器(当然在Dalvik的例子中,ART可能会尝试做一些不同的事情,但我对此表示怀疑),因此没有什么特别或奇特之处


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

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

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

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

Java级别的
Thread
对象本质上是虚拟机实现中pthreads的包装器(当然在Dalvik的例子中,ART可能会尝试做一些不同的事情,但我对此表示怀疑),因此没有什么特别或奇特之处


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

非常感谢!我大错特错了。似乎创建并使用Renderscript进行密集操作是我的最佳选择。非常感谢!我大错特错了。似乎创建并使用Renderscript进行密集操作是我的最佳选择。