Android 4.4和5.0中multithreading加速的效率完全不同
我写了一段C代码来在Android中进行一些图像处理(密集计算)(由NDK编译并由jni.h使用)。 为了加速图像处理,我在C代码中使用了pthread_create和pthread_join函数来利用4个线程同时处理图像。 multithreading加速在Android 4.4手机中是成功的,但在所有Android 5.0手机中都失败了。 假设在单线程环境中image_processing函数的处理时间是1s。 我们利用4个线程来加速image_processing函数,如下所示:
void image_processing_multiply_threads() { int i; pthread_t pt[4]; for(i = 0 ; i < 4; i++) { if ( pthread_create(pt + i , NULL, image_processing, (void *)(arg + i)) != 0 ) { return; } } for (i = 0; i < 4; i++) { pthread_join(pt[i], NULL); } }
在Android 4.4中,每个线程的处理时间约为300ms,因此image_processing_multiply_threads的总时间为300ms,换句话说,我们获得了3.3倍的加速度。 但我们在Android 5.0中使用相同的代码,每个线程的处理时间变为1.1s,这意味着multithreading版本的影响甚至比一个线程版本还要差。 在Android 5.0中,我们检查每个线程的状态。 每个线程都是由pthread_create成功创建的,每个线程的堆栈大小与4.4中的大小相同。 我们还测试了具有相同硬件但操作系统版本不同的两款手机,在4.4版本中,multithreading代码成功,但在5.0中失败。 Android 5.0有什么问题? 我们怎样才能解决这个问题? 谢谢!