Я выполнял некоторые тесты на Android, чтобы проверить, насколько хороша производительность алгоритма (например, FFT), если он будет распараллелен. Я реализовал алгоритмы, используя pthread с JNI (FFTW) и потоками Java (из JTransforms). Вместо того, чтобы получать лучшую производительность, используя потоки, как ожидалось, у меня есть лучшие результаты с использованием последовательного алгоритма. Мне непонятно, почему у меня есть эти результаты, так как я выполнил эти тесты на многоядерных устройствах. Похоже, что алгоритм планирования, используемый системой Android, немного отличается от используемого Linux, и вам не повезло, если вы хотите использовать более одного процессора для многопроцессорности на Android.Многопроцессорное обслуживание на Android
Пример с FFTW: Код JNI находится в https://github.com/maxrosan/DspBenchmarking/blob/master/jni/fftw_jni.c и его интерфейс https://github.com/maxrosan/DspBenchmarking/blob/master/src/br/usp/ime/dspbenchmarking/algorithms/fftw/FFTW.java.
Метод, вызванный в тестах, является «исполнять».
Пример чистой Java: https://github.com/maxrosan/DspBenchmarking/blob/master/src/br/usp/ime/dspbenchmarking/algorithms/jtransforms/fft/DoubleFFT_1D2TAlgorithm.java
здесь метод, называемый как 'выполнить'.
«выполнить» и «выполнить» вызывается внутри другого потока.
Используйте ThreadPoolExecutor или AsyncTask с executeOnExecutor. –
Я не уверен в вашем последнем предложении, какие тесты вы пробовали? Можете ли вы показать нам какой-то код? – Desert
О, так вы используете многопоточность C++. Я предлагаю вам попробовать использовать многопоточность java или проконсультироваться с людьми, которые хорошо знают C++, просто чтобы проверить, все ли в порядке с ним. – Desert