我试图在Android设备上复制一定程度的实时操作系统条件,而不必重新安装整个内核(就像RTDroid一样)。这些条件之一是确保关键线程在每次需要CPU或内存时都会优先于普通线程。
我理解使用NDK用C/C++编写的代码是在linux内核级别上执行的。这意味着它应该具有与DVM进程相同的优先级(Dalvik虚拟机)。因此,我推断C/C++代码的执行优先级高于在DVM上运行的任何"MAX_PRIORITY“线程。
我可以使用Renderscript复制相同的行为吗?我的直觉说不行,因为Renderscript脚本中的主要执行线程是由java应用程序控制的。
谢谢你能提供给我的任何见解!
发布于 2017-02-22 17:34:32
总之,没有。这里也有一些错误的假设/陈述:
用C/C++编写的...code使用NDK在Linux内核级别执行。
这是错误的。使用NDK构建的任何C/C++代码都是从Java代码中调用的,并且运行在同一个进程和执行VM (Dalvik或ART)的线程的上下文中。优先顺序没什么特别的。您也可以在本机级别创建线程(p线程)。所有这些都在同一个用户空间进程的上下文中运行,并由为系统提供动力的Linux内核进行调度。
Java级别的Thread对象本质上是VM实现中的线程包装器(当然,在Dalvik的情况下,ART可能尝试做一些不同的事情--但我对此表示怀疑),所以这里没有什么特别的或花哨的东西。
在Renderscript的例子中,它如何实现并行化是非常依赖于设备/平台的。在某些设备上,这可以只使用CPU上的线程来完成。在其他设备上,它可以利用车载DSP或(通常) GPU。但是,它不是一个通用的线程环境,也不是可以指定/管理优先级的东西。它特别适合以并行、异步(相对于CPU上的Java )的方式处理数据。
https://stackoverflow.com/questions/42378461
复制相似问题