這里就不去管細節,簡單來談一下,ARM和X86之間為什么不太具有可比性的問題。要搞清楚這個問題首先要明白什么是架構,之前也有很多人提到了架構不同,但架構是什么意思?它是一個比較抽象的概念,不太容易用幾句話就解釋清楚。
我們要明白CPU是一個執行部件,它之所以能執行,也是因為人們在里面制作了執行各種功能的硬件電路,然后再用一定的邏輯讓它按照一定的順序工作,這樣就能完成人們給它的任務。也就是說,如果把CPU看作一個人,首先它要有正常的工作能力(既執行能力),然后又有足夠的邏輯能力(能明白做事的順序),最后還要聽的懂別人的話(既指令集),才能正常工作。而這些集中在一起就構成了所謂的“架構”,它可以理解為一套“工具”、“方法”和“規范”的集合。不同的架構之間,工具可能不同,方法可能不同,規范也可能不同,這也造成了它們之間的不兼容——你給一個意大利泥瓦匠看一份中文寫成的烹飪指南,他當然不知道應該干什么了。
如果還看不懂,沒關系,我們繼續。從CPU發明到現在,有非常多種架構,從我們熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它們之間的差距都非常大。但是如果從最基本的邏輯角度來分類的話,它們可以被分為兩大類,即所謂的“復雜指令集”與“精簡指令集”系統,也就是經常看到的“CISC”與“RISC”。屬于這兩種類中的各種架構之間最大的區別,在于它們的設計者考慮問題方式的不同。我們可以繼續舉個例子,比如說我們要命令一個人吃飯,那么我們應該怎么命令呢?我們可以直接對他下達“吃飯”的命令,也可以命令他“先拿勺子,然后舀起一勺飯,然后張嘴,然后送到嘴里,最后咽下去”。從這里可以看到,對于命令別人做事這樣一件事情,不同的人有不同的理解,有人認為,如果我首先給接受命令的人以足夠的訓練,讓他掌握各種復雜技能(即在硬件中實現對應的復雜功能),那么以后就可以用非常簡單的命令讓他去做很復雜的事情——比如只要說一句“吃飯”,他就會吃飯。但是也有人認為這樣會讓事情變的太復雜,畢竟接受命令的人要做的事情很復雜,如果你這時候想讓他吃菜怎么辦?難道繼續訓練他吃菜的方法?我們為什么不可以把事情分為許多非常基本的步驟,這樣只需要接受命令的人懂得很少的基本技能,就可以完成同樣的工作,無非是下達命令的人稍微累一點——比如現在我要他吃菜,只需要把剛剛吃飯命令里的“舀起一勺飯”改成“舀起一勺菜”,問題就解決了,多么簡單。