我用的是三星Galaxy S3,它使用的是自己的Exynos 4 Quad处理器。所以我想优化我的应用程序,它可以使用所有4核处理器。
所以我做了一些测试:
-
单线程运行任务。处理时间- 8秒
-
以四线程运行任务。处理时间-仍为8秒
new Thread() { public void run() { // do 1/4 of task } }.start(); new Thread() { public void run() { // do 1/4 of task } }.start(); new Thread() { public void run() { // do 1/4 of task } }.start(); new Thread() { public void run() { // do 1/4 of task } }.start();
-
在ExecutorService中运行任务。处理时间-仍然是8秒。
ExecutorService threadPool = null; threadPool = Executors.newFixedThreadPool(4); threadPool.execute(new Runnable() { @Override public void run() { // do 1/4 of task }}); threadPool.execute(new Runnable() { @Override public void run() { // do 1/4 of task }}); threadPool.execute(new Runnable() { @Override public void run() { // do 1/4 of task }}); threadPool.execute(new Runnable() { @Override public void run() { // do 1/4 of task }});
看起来所有的工作都是同步完成的。为什么不并行呢?
你可以试试我的测试,用C或Java:
http://bigflake.com/cpu-spinner.c.txt
http://bigflake.com/MultiCore.java.txt
当MultiCore.java在Nexus 4上运行时,我看到:
Thread 1 finished in 1516ms (1267234688)
Thread 3 finished in 1494ms (1519485328)
Thread 0 finished in 1530ms (51099776)
Thread 2 finished in 1543ms (-1106614992)
All threads finished in 1550ms
更新:有系统地观看测试是有用的。作为回答类似问题的一部分,我设置了一个页面,其中显示了该测试的系统输出。您可以看到线程是如何调度的,并观察其他两个内核的运行情况。