0

전체 커널을 다시 설치할 필요없이 (RTDroid 에서처럼) 안드로이드 장치에서 약간의 RTOS 조건을 복제하려고합니다. 이러한 조건 중 하나는 중요한 스레드가 CPU 또는 메모리가 필요할 때마다 정상 스레드보다 기본 설정을 갖도록 보장하는 것입니다.NDK로 max_priority를 ​​추월

나는 NDK를 사용하여 C/C++로 작성된 코드가 리눅스 커널 레벨에서 실행된다는 것을 알고 있습니다. DVM 프로세스 (Dalvik Virtual Machine)와 동일한 우선 순위를 가져야한다는 것을 의미합니다. 따라서 C/C++ 코드는 DVM에서 실행되는 "MAX_PRIORITY"스레드보다 우선 순위가 높은 것으로 간주됩니다.

Renderscript를 사용하여 동일한 동작을 복제 할 수 있습니까? 제 직관은 Renderscript 스크립트의 주요 실행 스레드가 Java 응용 프로그램에 의해 제어되므로 아니오라고 말합니다.

미리 알려 주시면 감사하겠습니다.

답변

3

간단히 말해서, 아니오. 여기에도 몇 가지 잘못된 가정/진술이 있습니다 :

... NDK를 사용하여 작성된 코드는 Linux 커널 수준에서 실행됩니다.

올바르지 않습니다. NDK를 사용하여 빌드 한 모든 C/C++ 코드는 Java 코드에서 호출되며 VM (Dalvik 또는 ART)을 실행하는 동일한 프로세스 및 스레드의 컨텍스트 내에서 실행됩니다. 우선 순위에 대해 특별한 것은 없습니다. 기본 레벨에서 스레드 (pthread)를 작성할 수도 있습니다. 이들은 모두 동일한 사용자 공간 프로세스의 컨텍스트 하에서 실행되며 시스템에 전원을 공급하는 Linux 커널에 의해 스케줄됩니다.

자바 레벨의 객체는 본질적으로 VM 구현에서 pthreads를 감싸는 래퍼입니다 (확실히 Dalvik의 경우 ART는 다른 것을하려고 시도 할 수는 있지만 의심 스럽습니다.) 그래서 특별한 것이나 환상적인 것은 없습니다.

Renderscript의 경우 병렬화를 달성하는 방법은 매우 장치/플랫폼에 따라 다릅니다. 일부 장치에서는 CPU에서 pthread 이상을 사용하여 수행 할 수 있습니다. 다른 장치에서는 온보드 DSP 또는 (일반적으로) GPU를 활용할 수 있습니다. 하지만, 일반적인 목적의 스레딩 환경이 아니거나 우선 순위를 지정/관리 할 수있는 곳이 아닙니다. 특히 병렬, 비동기 (CPU상의 Java와 관련됨) 방식으로 데이터를 처리하는 데 중점을 둡니다.

+0

정말 고마워요! 나는 크게 착각했다. [전경 프로세스] (https://medium.com/google-developers/who-lives-and-who-dies-process-priorities-on-android-cb151f39044f#.gu81uajep) 만들기 및 집중적 인 작업에 Renderscript 사용 , 나를위한 최선의 선택입니다. – juanma2268

관련 문제