2012-12-07 29 views
0

我試圖在谷歌Nexus 7上運行多線程Java程序(在MapReduce的風格),以及測量的執行時間與什麼導致Android系統上多線程Java程序的性能變化?

System.currentMillis(); 

我發現,性能差異很大(W/4線程上的Tegra 3 w ^/4芯),如下:

704 872 729 729 1086 778 1214 1045 749 768

然而,當我使用的順序版本,我得到這樣穩定的數據:

928 851 850 842 863 917 873 905 853 870

我認爲垃圾收集器併發所以它也需要一個核心,就是它的原因造成的大的變化?

爲什麼有時性能甚至遠不如串行版本?

+0

這真的取決於線程的效率有多高是......不知道的是,這是很難說。但總的來說,你不想有太多的線程。 – PearsonArtPhoto

回答

0

我以爲垃圾收集器也是多線程的,它是導致大變化的原因嗎?

IMO,它不太可能是GC是變異的原因。

爲什麼有時性能比串行版本甚至更糟糕?

我們需要看看你的代碼或SSCE。然而,我猜測的原因是:

  • 這是這是一個不合身的Java線程的性能特性(例如創建線程的成本高),或
  • 你的多線程解決的問題具有顯着的併發瓶頸和/或負載平衡。
+0

如果是由你猜測的原因引起的,那麼表現總是會變差。但是,大多數時候,它明顯更好。 – JackWM

+0

@JackWM - *「的表現總是會更糟」 * - 不一定。線程調度效果通常會導致瓶頸等以非確定性的方式顯示*。無論如何,底線是我們不能在沒有看到你的代碼的情況下給你一個真正的解釋......或者更好的是SSCE。 –

相關問題