0

我想在Android設備中複製一點RTOS條件,而不必重新安裝整個內核(就像RTDroid一樣)。其中一個條件是確保關鍵線程在每次需要CPU或內存時都會優先於普通線程。用NDK超速max_priority

我知道用C/C++編寫的使用NDK的代碼是在linux內核級別執行的。這意味着它應該具有與DVM過程(Dalvik虛擬機)相同的優先級。因此,我感到C/C++代碼的執行優先於在DVM上運行的任何「MAX_PRIORITY」線程。

我可以使用Renderscript複製相同的行爲嗎?我的直覺說不,因爲Renderscript腳本中的主要執行線程是由Java應用程序控制的。

在此先感謝您提供給我的任何見解!

回答

3

總之,沒有。這裏還有幾個錯誤的假設/陳述:

...用C/C++編寫的代碼,使用NDK,在Linux內核級執行。

這是不正確的。您使用NDK構建的任何C/C++代碼都是從您的Java代碼中調用的,並且在執行VM的相同流程和線程(Dalvik或ART)的上下文中運行。沒有什麼特別的優先級。您也可以在本機級別創建線程(pthreads)。這些都是在同一個用戶空間進程的上下文中運行的,並且由爲系統供電的Linux內核進行調度。

在Java層面的Thread對象本質上是圍繞虛擬機實現中的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