前言
鳥菜啊真是一個菜鳥,寫該系列的第一節,也就這節。內心十分虛。由於鳥菜啊深刻接觸的只有高級語言。彙編語言只是簡簡單單玩了下,機器語言就更不用說了,只是在網絡上看過,也只是看過,並且還不懂。可是爲了給你們能深刻理解計算及語言,找了不少資料,懂了點,厚着臉皮寫。有不足之處,歡迎指出html
計算機語言不少,按照發展來分類的話分爲 機器語言,彙編語言,高級語言。本節解析這三個語言與計算機語言。這個是隱節。主要是爲了第三節,作的鋪墊。程序員
如今鳥菜須要實現一個網絡庫編程
機械語言
當計算機被創造出來的時候,機器語言就誕生了。讀過計算機相關專業的人,接觸過編程的人,長期接觸網絡等計算機方面的人。都會知道機器語言就是0與1組合成的。0與1是硬件最容易識別的狀態。因此機械語言也被稱職硬件語言。那機械語言究竟是什麼了,就是一種指令集的體系。緩存
什麼是指令與指令集
深刻理解 加法指令。
分析 1+ 2=? 你們會說這有什麼分析的。不就是網絡
一加二等於幾嗎?多線程
這句解釋是錯誤的。是由於一加一更加適合和方便人類思惟與識別能力,並非按照邏輯方式得出的答案。按照邏輯是函數
一 與 二 相加 等於性能
計算機不是人類,不會按照人類的邏輯能力與識別能力來處理事情,只能按照他的方式即物理操做,邏輯邏輯 從邏輯方式,簡要分析 cpu如何實現一個加法指令的了學習
- 在某個地方拉取到 第一個計算的值 1
- 在某個地方拉取到 第二個計算的值 2
- 在把兩個值進行計算等到計算後的值,
- 而後把結果送到某個地方
物理操做比邏輯操做更加複雜。一個邏輯操做至關於多個物理操做 簡要(並可能有些錯誤的)分析。線程
列如 第一個邏輯操做 在某個地方拉取到 第一個計算的值 1
- 先識別是什麼地方。好比是cpu緩存,仍是內存
- 數據地址是
- 拉取的數據長度
- 拉回來
- 看下是否有空間存在值 ...
- 有,分配一個空間
- 把值放到分配的空間裏面
是否是很複雜。是啊。很複雜。怎麼辦。其實人類的文明早就有解決方案了。
用名字映射這個問題。好比忽然有人呼叫你的名字,也就是呼叫你這我的,人是多麼複雜的組合體
使用一個名字,這個名字在計算機裏面成爲指令 指令是有多個邏輯操做組成,每一個邏輯操做由多個物理操做組成。指令表明N個物理操做。當cpu執行某個指令的時候,會執行對應N個物理操做。
指令集
就是一大堆指令組合在一塊兒
分析
下面有一些二進制碼,你們知道什麼意思嗎?
1001010101 1001010101 00000011
1001010101 你們立刻會進行二進制轉十進制計算。
得出:597,597,3。一個簡單的數值識別須要很大代價。
這些二進制碼沒含義啊。不是沒有含義,而是菜鳥啊也不知道如何用二進制表達複雜的 597+597 這個加法操做
優勢
- 特定型號的計算機上面,運算效率也是很高的
- 最終的硬件操做全是二進制,須要給硬件指定一個二進制的指令。高效的二進制指令,能讓硬件操做更加高效
- 能夠直接操做硬件
缺點
- 大量繁雜瑣碎的細節牽制着程序員,使他們不可能有更多的時間和精力去從事創造性的勞動,執行對他們來講更爲重要的任務。如確保程序的正確性、高效性。
- 程序員既要駕馭程序設計的全局又要深刻每個局部直到實現的細節,即便智力超羣的程序員也經常會顧此失彼,屢出差錯,於是所編出的程序可靠性差,且開發週期長。
- 因爲用機器語言進行程序設計的思惟和表達方式與人們的習慣截然不同,只有通過較長時間職業訓練的程序員才能勝任,使得程序設計曲高和寡。
- 由於它的書面形式全是"密"碼,因此可讀性差,不便於交流與合做。
- 由於它嚴重地依賴於具體的計算機,因此可移植性差,重用性差。
項目如何
使用 機器語言實現一個類netty網絡庫,須要三十年。
參考資料
機械語言(百度百科) 指令集(百度百科) 精簡指令集(百度百科)
彙編語言
彙編語言是在機器語言的基礎上誕生的一門語言,用一些簡潔的英文字母、符號串來替代一個特定的指令的二進制串,這也提升了語言的記憶性和識別性。
彙編語言與機械語言的區別
一段彙編代碼
_add_a_and_b: ; 定義了函數 add_a_and_b push %ebx mov %eax, [%esp+8] mov %ebx, [%esp+12] add %eax, %ebx pop %ebx ret _main: ; 定義了函數main push 3 push 2 call _add_a_and_b ; 經過call指令調用 _add_a_and_b 函數 add %esp, 8 ret
- 沒有用字符指令代替二進制指令
- add 能夠表明 00000011
- 基本類型的出現
- 字節型(DB)
- 字類型(DW)
- 雙字類型(DD)
- 三字類型(DF)
- 四字類型(DQ)
- 五字類型(DT)
- 字符串
- 函數出現,實現代碼結構化
- 代碼更加容易分類
- 代碼更加容易組合,複用
- 代碼更加容易管理
- 棧的出現
- 沒有棧,函數沒法實現。這是最主要的區別。爲計算機及計算機語言的發展作了最基礎的,最重要,最核心的基點
- push 就是把數字壓入棧
- include關鍵字具備代碼文件引用能力
- 提供了最強的組織能力
- 還有更多地方
先進體如今什麼地方
- 更加讓人理解,識別
- 出現了代碼組織能力
項目如何
使用 機械語言實現一個類netty網絡庫,須要五年。
參考資料
高級語言
目前98%的程序員只掌握了高級語言,對彙編
int c = 0; int add_a_and_b(int a, int b) { return a + b; } int main() { return add_a_and_b(2, 3); }
- 字段的出現
- 結構體的出現
- 類,函數,字段聲明的出現
- 面向過程
- 面向對象
- 類型的出現,
- 更多高級語言特性的增長。好比異常,枚舉
先進體如今什麼地方
- 面向對象的出現,接近了人的思想,識別,邏輯。讓人的思想,識別,邏輯與計算機邏輯,物理操做完美的結合
- 管理相對簡單
- 學習,開發,維護變得更加簡單
- 能勝任更加複雜,多變,龐大的項目
項目如何
使用 機械語言實現一個類netty網絡庫,須要一年。
看看語言發展的助攻
來深刻看下計算機另一個方面中一個核心的發展。硬件方面,每一個計算組成都是由兩個大的方面硬件與軟件組成的。語言是軟件....那麼簡要的分析下硬件。從cpu提及
發展
cpu,一共發展了六代,每代都有很大的區別,鳥菜啊沒法找到沒帶的性能差距圖,那麼以觀豹紋知全豹的方式以 intel 的第六代處理器 i3 i5 i7爲切入點。
性能對比
特性
- 多線程
- 多核心
- SMP
- NUMA技術
- 亂序執行
- 分枝技術
- 控制器
分析結論
- 性能愈來愈強
- 體積愈來愈小
- 容量愈來愈大,速度愈來愈快
- 特性愈來愈多
- 硬件的成本愈來愈低
參考資料
CPU 每一代之間的差距體如今什麼地方 intel i3 i5 i7 性能對比
總結
硬件是能夠進行量產的物質,而人才是沒法量產,培養也十分繁瑣。因此釋放人力資源。因此相對時間與人力資源來講,硬件的成本少得可憐
時代對軟件的需求愈來愈旺盛,各行各業基本每一個點都須要軟件。軟件在生活,生產,科技等等領域都帶來效率,快捷,服務等。 時代變化快,產出須要快速的跟上時代。 效率,產出,成本最低是計算機語言發展的基本趨勢
發展規律
- 更加能接近人的思想,邏輯,識別,
- 能夠用人的思想直接的描述(第四代語言的標準)
- 效率的提升
- 能勝任更加複雜,多變,龐大的項目
- 釋放人力資源
- 能快速產出