為什麼同一台電腦上 iPhone Simulator 比 Android Emulator 快這麼多?!
答案其實就在字面上的意義,首先讓我們瞭解一下 Simulator 跟 Emulator 各代表什麼意思?大家中文上雖然都通稱模擬器,但是實際上是略有不同的:
Emulator
中文翻譯為「仿真器」。那麼仿真器的定義是什麼呢?讓我們來看看 Wiki 怎麼說:
仿真器,指的是幾乎能夠百分之百地模擬某硬件或軟件系統的全部特性、
行為的裝置或程序。仿真是儘可能做到全方位的模擬,而且力求逼真,
有點欲將原型或模仿對象取而代之的味道。仿真更具體,接近實物
(也有說接近硬件的,但肯定不侷限於硬件)。
(參考自 http://www.cn-cuckoo.com/2009/12/08/emulator-and-simulator-1300.html)
Simulator
Wiki 上沒有明確的「Simulator」定義,但我們還是可以瞭解一下什麼是 Computer Simulation:
模擬器,指的是仿照真實的硬件、軟件、環境、條件,能夠在某種程
度上再現這些硬件、軟件、環境、條件的裝置或程序。模擬只是表面
上做做樣子,不會有真實的過程發生;但能夠給出反饋,多用於研究
和培訓。模擬更抽象,側重建模。
(參考自 http://www.cn-cuckoo.com/2009/12/08/emulator-and-simulator-1300.html)
讓我們來想想:Android 的整個系統都是開放原始碼的,也就是說開發者可能包含應用程式開發、框架開發、或是硬體驅動開發。代表說從軟體到硬體,我們都需要可以模擬出與真實裝置一模一樣的「正確」執行結果。
反過來看 iPhone ,會在 iPhone 上做開發的就只能應用程式的開發者,唯一目的就是程式最後可以在 App Store 上架,也就是說,開發者是在意我這個程式所呈現出來的畫面是什麼,底層硬體是如何運作都與我無關。
因為目的不同,所以採用的實作不同,因此導致最後的效能表現也大大不同!
兩者之間的綜合比較
關於兩者的比較,有興趣的也可以看看這篇文章。
iPhone Simulator:
- 執行在 native x86 環境之上,也就是說,電腦越快,你的模擬器效能就相對地越高。
- 一般來說,在模擬器上的表現都會比手機上還好。
- 有可能安裝到手機上後才發現表現不如預期,或甚至因為裝置上的記憶體配置不同才發現模擬器上沒發現的錯誤。
Android Emulator:
- 執行在 QEMU 模擬出的硬體之上,以就是說,電腦越快,你的仿真器效能也未必較高!端看你模擬出來的硬體極限而定。(一般在 Android Emulator 中,都是模擬 ARM926EJ-S rev 5)
- 一般來說,手機上的表現大多比仿真器上還好,尤其是在有圖形硬體加速的裝置上。
- 撰寫驅動程式(HAL)的開發者,可以保證在仿真器上的執行結果幾乎會與裝置上相同。
- 唯一會比裝置上還快的就是 I/O ,因為仿真器上直接存取磁碟,而裝置上則是存取 Flash,詳細的比較可以參考 Google I/O 上的議程。
瞭解了這些原因之後,以後用 Android Emulator 就稍微忍一下吧!(苦笑)
**備註:**QEMU 可以支援 binary translation (for kernel code) 以及 native execution (for user code),但是為什麼 Android Emulator 還是跑不快,這可能是因為:
- Android 的 QEMU 版本未必是最新
- QEMU 並沒有模擬出 GPU
- QEMU 只看單顆核心的頻率高低,因為目前尚未支援多核心(也就是說不會因為核心數變多而變快),參考 wiki :「For full system emulation, QEMU uses a single thread to emulate all the virtual CPUs and hardware. 」