Java架構師成長之道之計算機組成原理概述篇

Java架構師成長之道之計算機組成原理概述篇

1.1 信息技術發展趨勢

目前信息技術主要經歷了互聯網、移動互聯網以及以大數據、雲計算、人工智能和區塊鏈爲表明的新興技術三個階段。而5G網絡的到來則會加速物聯網、無人駕駛的應用場景落地。html

  • 互聯網
    凡是能彼此之間通訊的設備組成的網絡就叫互聯網,互聯網從20世紀90年代逐漸興起,主要是鏈接了世界各地的筆記本、臺式機以及背後提供後臺數據服務的服務器集羣,其中絕大多數筆記本、臺式機運行着Windows,macOS系統,而服務器主要是以類Unix(CentOS,Ubuntu)佔據主要市場。依靠互聯網崛起的硬件公司有Intel,軟件公司有微軟、谷歌、亞馬遜、阿里巴巴、騰訊、百度等等。
  • 移動互聯網
    移動互聯網自從2010年由智能手機的普及以及谷歌的Android系統和蘋果的IOS系統發展而使得移動互聯網將世界各地的移動設備(手機、電視、汽車等等)鏈接起來。依靠移動互聯網崛起的硬件公司有小米,三星,華爲,蘋果,軟件公司有美團、滴滴、字節跳動和螞蟻金服等等。
  • 雲計算、大數據
    隨着用戶規模的爆發式增加,以海量數據爲基礎的大數據(Hadoop,Spark,Flink)、雲計算(OpenStack)技術在大型互聯網公司(BAT)擁有普遍的落地場景。
  • 人工智能
    人工智能做爲目前煊赫一時的技術之一,國內的BAT紛紛開始佈局在各自的業務場景中,阿里巴巴最先將人工智能應用在電商和物流領域,百度開發出了對話式人工智能操做系統和自動駕駛平臺Apollo,騰訊則將人工智能應用在遊戲領域,目前國內著名的人工智能公司有商湯科技,曠視科技。
  • 區塊鏈
    區塊鏈經歷了數字貨幣、智能合約和超級帳本三個階段,區塊鏈技術能夠普遍使用在金融、供應鏈、物流以及公共服務領域,解決互聯網的信任問題,目前國內的螞蟻金服、京東有大量的區塊鏈應用落地。
  • 物聯網
    隨着5G技術的成熟,世界各地的智能設備都將會經過5G網絡鏈接起來,造成萬物互聯的時代,到時候就能夠實現經過終端控制物聯網的世界。

1.2 計算機的發展簡史

1.2.1 計算機發展的四個階段

自從1945年至今,計算機經歷了電子管計算機,晶體管計算機,集成電路計算機以及超大規模集成電路計算機。程序員

  • 電子管計算機(1945年-1957年)
    第二次世界大戰是電子管計算機產生的催化劑,而最著名的電子管計算機是來自美國的埃尼阿克(ENIAC),這一時期的計算機有以下特色:數據庫

    • 集成度小,佔用空間大
    • 功耗高,運行速度慢
    • 操做複雜,更換程序須要接線
  • 晶體管計算機(1957年-1964年)
    1948年,貝爾實驗室的三個科學家發明了晶體管,相比電子管而言,晶體管有着更小的體積,更低的功耗以及更高的運算效率。而全世界第一臺晶體管計算機TX-0誕生於麻省理工大學的MIT林肯實驗室,而當時性能最高的計算機是PDP-1,它具有4K的內存,每秒能夠執行20W條指令,同時配備了512*512的顯示器,晶體管相對於電子管計算機而言:編程

    • 集成度相對較高,佔用空間相對較小
    • 功耗相對較低,運行速度較快
    • 操做相對簡單,交互更加方便
  • 集成電路計算機(1964年-1980年)
    集成電路計算機出現的背景是德州儀器的工程師發明了集成電路(IC),windows

    • 計算機變得更小
    • 功耗相對較低,
    • 運行速度較快
    • 具有進入千家萬戶的條件
      在集成電路計算機階段,IBM有兩款暢銷的計算機 IBM 7094和IBM 1401 ,可是這兩款計算機主打的功能不一樣,而且相互沒法兼容,並且企業購買IBM 7094和IBM1401後也不肯意投入兩組人力開發,在此背景下IBM推出了兼容的產品System/360,也就是操做系統的雛形,它的出現使得不一樣的電子元器件,不一樣電路的計算機都能在同一個操做系統下運行。
  • 超大規模集成電路計算機(1980年-今)
    CPU就是超大規模集成電路的典型產品,一個芯片能夠集成上百萬的晶體管。
    並且超大規模集成電路計算機速度更快,體積更小,價格更低,更能被大衆接受,同時在此階段計算機用途也變得豐富起來,能夠用於文本處理,表格處理以及高交互的遊戲和應用。
    而喬布斯在這個階段推出了Apple,Apple二代。瀏覽器

  • 將來計算機
    隨着計算機的發展,將來會出現生物計算機和量子計算機。安全

生物計算機是以蛋白質分支做爲主要原材料,和人體結合起來進行相關的運算。並且生物計算機體積小,不易損壞,提供生物級別的自動修復以及不受信號干擾和無熱損耗。服務器

量子計算機是遵循量子力學的物理計算機,目前量子計算機已經有相關的研究成果微信

  • 2013年5月,谷歌和NASA發佈了D-Wave Tow
  • 2017年5月,中國科學院宣佈製造出光量子計算機。
  • 2019年1月,IBM展現了世界首款商業化量子計算機
    並且目前國內的阿里和騰訊在量子計算機領域進行相關的研究。

1.2.2 微型計算機的發展歷史

微型計算機主要是計算機發展你的第三個階段集成電路計算機開始。
微型計算機的發展主要是從計算能力區分的,在早期微型計算機是使用的單核CPU,而單核CPU的發展也經歷了以下幾個階段網絡

  • 1971年-1973年 500KHz頻率的微型計算機(字長8位)
  • 1973年-1978年 高於1M頻率的微型計算機(字長8位)
  • 1978年-1985年 500MHz頻率的微型計算機(字長16位)
  • 1985年-2000年 高於1GHz頻率的微型計算機(字長32位)
  • 2000年-今 高於2GHz頻率的微型計算機(字長64位)
    而關於CPU性能,還有一個著名的定律-摩爾定律:當價格不變的狀況下,集成電路元器件每隔18-24個月會提高一倍,性能就會提高一倍。
    可是到21世紀,單核CPU逐漸出現了性能的瓶頸。而多核CPU的出現是爲了解決單核CPU的性能瓶頸
  • 2005年CPU產商Intel發佈了奔騰系列CPU
  • 2006年CPU產商Intel發佈了酷睿四核CPU
  • 目前在我的電腦能夠選配Intel酷睿系列16核CPU,而服務器領域能夠選擇Intel至強系列56核CPU

1.2 .3計算機的分類

計算機能夠按照不一樣的用途分爲超級計算機,大型機,小型機,我的計算機。

  • 超級計算機
    超級計算機是功能最強,運算速度最快,存儲容量最大的計算機,主要用於國家高科技領域尖端技術研究,咱們使用每秒一萬億浮點數計算(1TFlop/s)指標來衡量超級計算機的性能。
    若是想要了解超級計算機的排名,能夠訪問網站 https://www.top500.org/。

  • 大型計算機
    大型計算機又稱爲大型機、大型主機、主機等等,大型計算機具備高性能。可處理大量數據與複雜運算,應用場景一般是銀行、證券等金融機構。在大型機市場領域,IBM佔據着很大的份額。
    因爲大型機造價高昂,不夠靈活,伸縮性弱,目前不少企業替換成小型機。
    阿里巴巴在2008年發起去IOE行動,I就是IBM大型機,O就是商業數據庫Oracle,E就是EMC存儲,IOE表明了高成本,高維護費用的存儲系統。去IOE就是將大型機換成了普通的服務器,將Oracle替換成了分佈式的MySQL,去IOE行動直接驅動了阿里雲的誕生。

  • 服務器
    服務器也被稱爲小型機,普通服務器,相對於大型機而言,不要特殊的空調場所,同時也具有不錯的算力。常見的服務器廠商包括戴爾,聯想,IBM。
    普通服務器已經替代了傳統的大型機,成爲大規模企業計算機的中樞紐,好比國內的阿里雲、騰訊雲、華爲雲都是基於服務器構建的。

  • 工做站
    工做站是高端的通用微型計算機,能夠提供比我的計算機更強大的性能,相似於普通臺式電腦,體積大,性能強勁,例如Mac Pro。

  • 微型計算機
    微型計算機又稱爲我的計算機,是最普通的一類計算機,能夠分爲臺式機、筆記本電腦、一體機,微型計算機是成本最低的,可是從構造本質來說,我的計算機與超級計算機、大型機、小型機、工做站沒有區別。

日常開發人員一般接觸的比較多的是微型計算機,例如筆記本、臺式機,而運維人員一般接觸的是服務器。

1.3 計算機的體系結構

1.3.1 馮諾依曼體系

馮諾依曼體系就是將程序指令和數據一塊兒存儲的計算機設計概念結構。

早期的計算機僅能運行固定用途的程序,若是想要運行別的程序,必需要更改計算機結構、從新設計電路。而馮洛伊曼是把程序存儲起來,並設計通用的電路。存儲程序指令,設計通用電路

馮諾依曼體系由如下部分組成
馮諾依曼結構.

  • 必須有存儲器,存儲運行的程序和數據,長期記憶程序、數據、中間結果和最終結果的運算能力
  • 必需要有控制器,控制程序的流程以及數據的流轉
  • 必需要有運算器,負責完成數據的算數、邏輯運算
  • 必需要有輸入設備,負責完成程序指令和數據的輸入
  • 必需要要輸出設備,負責完成程序的處理結果輸出
    現代計算機都是屬於馮諾依曼機。

CPU是由運算器和控制器組成,而馮諾依曼結構是將存儲器和CPU分開,會致使馮諾依曼瓶頸:CPU和存儲器速率之間的問題沒法調和,CPU常常空轉等待數據的傳輸,這樣沒法充分利用CPU。

1.3.2 現代計算機的體系結構

現代計算機結構由馮諾依曼結構基礎之上進行修改,主要是解決CPU和存儲器速度差別的問題:存儲器、運算器和控制器集中在一塊芯片上。

現代計算機結構
現代計算機結構

現代計算機結構以存儲器爲核心的結構,其核心組件包含了CPU,內存、磁盤和IO設備。

  • CPU:
    現代計算機結構的運算器和控制器、存儲器組成了CPU,主要功能負責數據的計算以及其餘設備的控制,程序運行時CPU負責從內存中讀取程序的指令和數據執行後將結果返回給內存或者是寫入磁盤。

  • 內存
    馮諾依曼體系結構中的存儲器就是指的內存和外存,其中內存是程序運行時的工做區,即程序運行時的指令和數據都會被加載到內存中,斷電後內存的數據容易丟失,內存是編址存儲的,一般32位操做系統只能尋址4G,而64位操做系統則會操過4G,一般按照計算機不一樣的用途是16G-128G之間。

  • 磁盤
    磁盤是馮諾依曼體系結構中存儲器的一種,負責永久性存儲大容量的數據(TB甚至是PB級別),按照不一樣的用途能夠分爲機械硬盤和固態硬盤兩大類。

  • IO設備
    顧名思義就是負責計算機數據的輸入輸出,經常使用的輸入設備有鼠標、鍵盤,經常使用的輸出設備有聲卡、顯卡。
    網卡也是IO設備的一種,主要是負責數據在網絡中的傳輸。

在後期程序排查異常時除了考慮程序自己的問題,還要考慮硬件問題,例如網絡不通、磁盤存儲空間以及內存運行空間不足等等。

1.3.3 計算機各組件IO性能彙總

每一個計算機組件的IO性能也各不相同,核心組件(CPU,內存,磁盤)都遵循容量越大,IO性能越差,以下圖所示,彙總了它們的IO性能,在後期程序優化時,一般須要考慮時間和空間的問題。

計算機各組件IO性能彙總
計算機各組件IO性能彙總

1.3.4 開發者必備硬件配置

開發者在購買筆記本或者臺式機時,一般須要關注CPU,內存、磁盤以及顯卡的相關配置。
和普通用戶不一樣,因爲開發時須要安裝許許多多相關的應用程序和配置各個集成開發環境,所以推薦購買高配置的電腦,若是你想購買MacBookPro,能夠參考以下配置。

組件名稱 配置
CPU i9 2.3HZ
內存 32G
磁盤 512SSD
顯卡 Radeon pro Vega 20

macOS
macOS

若是你想購買運行Windows的筆記本,參考以下配置。
windows

若是是想要成爲軟件開發人員,電腦最低配置不要低於Intel i7 CPU + 內存 16G+ 固態硬盤 256G,出色的硬件可以提升開發效率

1.4 計算機軟件系統

1.4.1 計算機軟件系統概述

計算機軟件就是運行在硬件之上的各類應用程序。軟件的出現改善了人和計算機的交互方式,軟是由開發者編寫的一系列計算機指令和不一樣業務邏輯產生的數據所組成。

軟件按照不一樣的用途分類能夠分爲系統軟件和應用軟件。
系統軟件:系統軟件有Unix,Linux,macOS,Windows,Android,IOS,編譯器、數據庫等等。
應用軟件:應用軟件有淘寶、京東、微信、支付寶等等。

不一樣平臺的軟件有不一樣的交互方式:
服務器端:運維開發人員基於命令行的字符界面實現人機交互。
PC桌面端:開發人員、普通用戶一般是基於圖形化界面實現人機交互。
移動端:用戶一般是經過語音,手勢觸控實現人機交互。

1.4.2 Windows系統經常使用命令

主流的操做系統(Windows,Linux(Ubuntu),MacOS)及大多數應用程序都提供了基於命令行和圖形化界面兩種交互方式,而移動端是採用手勢觸控、語音等進行交互。做爲普通用戶來說,圖形化界面容易上手,並且交互效果更加直觀。

可是做爲一個程序員來說,應該去熟悉各個操做系統的命令行的使用,由於命令行相對圖形化界面而言,絕大多數場景下使用更加高效。並且圖形化界面本質是對命令行的封裝,能用圖形化界面實現的基本均可以採用命令行實現。並且在服務器端(CentOS,RedHat)基本上是不會安裝圖形界面。

Windows系統能夠按下windows鍵而後輸入cmd,以下圖所示

windows鍵搜索cmd
windows鍵搜索cmd

回車以後,即可以進入Windows下的命令行終端,以下圖所示

dos命令窗口
dos命令窗口

Windows下經常使用的文件目錄和系統應用相關的命令以下所示,只要開啓了終端就能夠在終端內經過使用文件目錄相關和系統應用相關的命令實現快捷操做。

文件目錄相關

命令名稱 功能描述
dir 列出當前目錄列表
cd 切換目錄(只能在根盤符(例如C盤)內切換)
md 建立目錄
rd 刪除空目錄
echo 輸出提示信息 例如echo %PATH%查看環境變量
del 刪除文件
type 顯示文本文件內容
cls 清除屏幕內容
exit 退出終端

系統應用相關

命令名稱 功能描述
notepad 記事本
calc 計算器
mspaint 畫圖
explore 文件資源管理器
timedate.cpl 日期和時間
cleanmgr 磁盤清理
desk.cpl 分辨率設置
powercfg.cpl 電源設置
regedit 註冊表編輯器
msconfig 系統配置
mstsc 遠程鏈接
firewall.cpl 防火牆
appwiz.cpl 添加或修改程序
tasklist 查看進程列表
taskkill /f /im process.exe 關閉指定進程
msinfo 系統信息
sticky notes 便籤
ipconfig 查看ip
winver 查看windows版本
dxdiag DirectX診斷工具

1.4.3 經常使用應用的軟硬件協做實現

聊天:應用程序監聽鍵盤輸入的數據,放到內存,而後傳給網卡,經過網絡傳遞給另一個網卡,再從網卡傳到內存,顯示在顯示器上。
聽音樂:應用程序將音樂數據加載到內存以後,而後寫到聲卡上。
看視頻:應用程序將視頻數據加載到內存,而後寫到顯卡上。
讀文檔: 應用程序將磁盤中的文檔數據加載到內存後顯示到屏幕上。
寫文檔: 應用程序將內存中的數據寫入到磁盤上。

1.4.4 開發者經常使用軟件

以下列表展現了平常使用的開發工具和應用程序

  • 即時通信
    • 微信/企業微信
    • QQ
    • 釘釘
    • 阿里旺旺
  • 經常使用應用篇
    • 百度網盤
    • 迅雷下載
    • WPS/Office
    • 有道詞典
    • 網易郵箱大師
    • QQ音樂/網易雲音樂
  • 開發篇
    • JDK
    • Visual Studio
    • QT
    • XCode
    • Visual Studio Code
    • IntelliJ IDEA/Pycharm/Goland/WebStorm
    • Git/Github /Gitlab
    • Maven/Gradle
    • Navicat/DataGrip
    • Chrome/Firefox/Safari
    • SecureCRT
    • Xmind Zen
    • 億圖圖示
    • PowerDesigner
    • 印象筆記/剪藏
    • Typora/小書匠
    • 葫蘆加速器
  • macOS特供篇
    • Dash 幫助文檔
    • iTerm 終端
    • IINA 視頻播放
    • Screen Flow 錄屏
    • Parallels Desktop 虛擬機
    • iStat Menus 系統資源監控
    • Fantanstical 日曆
    • CleanMyMac X

1.4.5 操做系統

操做系統(Operating System)是實現通用目的的程序,其內核(Kernel)負責和底層硬件交互,應用軟件運行在操做系統之上。所以操做系統起着承上啓下的做用,操做系統提供的功能以下

  • 硬件驅動
  • 進程管理
  • 內存管理
  • 網絡管理
  • 安全管理
  • 文件管理

目前(2019/7/15)主流的操做系統包含運行在桌面端的Windows10,macOS10.14,Ubuntu18.04以及移動設備的Android 9, IOS12和服務器端的CentOS7.6,Ubuntu Server。

ABI(Application Binary Interface)描述了應用程序與OS之間的底層接口,容許編譯好的目標代碼在使用兼容ABI的系統中無需改動就能運行,ABI涉及了程序的各個方面,好比:目標文件格式、數據類型、數據對齊、函數調用約定以及函數如何傳遞參數、如何返回值、系統調用號、如何實現系統調用等。

API(Application Programming Interface)定義了源代碼和庫之間的接口,所以一樣的源代碼能夠在支持這個API的任何系統中編譯。

開發人員在編寫應用程序時,一般都是藉助API接口實現通用目的的功能,而應用程序編譯後,經過ABI接口連接生成可執行的程序格式後運行。

1.5 計算機的層次與編程語言

1.5.1 程序編譯和程序解釋

因爲高級編程語言和計算機底層語言是互不相通的,計算機最底層只能識別01010這種二進制的機器指令,所以須要使用工具進行語言之間的轉換。這個就是程序編譯或者解釋的由來。

爲了理解程序編譯和程序解釋,這裏引入兩種語言,分別是高級計算機語言L1,以及低級計算機語言L0。

  • 程序編譯
    開發人員使用高級編程語言L1編寫的應用程序經過編譯器生成成計算機底層可以識別的低級語言L0,L0就是計算機實際執行的語言,而編譯器生成的計算機底層識別的二進制機器指令過程就是程序編譯。常見的編譯型語言有C/C++/Objective-C/Go

  • 程序解釋
    首先使用L0語言實現另一個程序,也就是解釋器,而後將開發人員使用高級語言L1編寫的應用程序做爲輸入,每一句L1編寫的程序都會在L0中做爲等價的轉換而後執行,解釋的過程就是由L0編寫的解釋器去解釋L1程序。常見的解釋型語言有PHP,Python,JavaScript。

而Java和C#屬於編譯+解釋型語言,以Java爲例子,Java程序在運行以前首先被編譯成Java字節碼,而後在JVM虛擬機上解釋運行。

1.5.2 計算機程序和編程語言

計算機的層次由上到下能夠分爲以下幾個層次:

  • 應用層

  • 高級語言層
    高級語言就是用來開發平常應用的計算機語言,常見的高級語言有C/C++/Java/Python/Go等等。

  • 彙編語言層
    彙編語言也是一種編程語言,彙編語言能夠編譯成直接執行的機器語言,而完成編譯的過程就是彙編器,從彙編語言開始使用的語言就是人類比較容易理解的語言。

  • 操做系統層
    操做系統主要是用於給應用軟件提供運行平臺,同時管理和調度硬件資源。位於軟件和硬件的適配層。

  • 傳統機器層
    編程語言主要是CPU指令集(機器指令),而開發人員使用機器指令編寫的程序能夠交由微程序直接進行解析,指令集存儲在CPU內部,對CPU的運算進行指導和優化應用程序。CPU能夠經過指令集運行程序以及進行相應的邏輯處理。
    傳統機器層的編程語言和硬件直接相關,可是因爲不一樣架構的CPU使用的是不一樣的CPU指令集,也就是英特爾的CPU上運行的程序不能在AMD的CPU上運行。

  • 微程序機器層
    編程語言主要是微指令集,微指令所組成的微程序直接交由硬件執行。主要由硬件廠商的開發人員編寫。一條機器指令對應一個微程序,一個微程序對應一組微指令,微程序=機器指令。

  • 硬件邏輯層
    硬件邏輯層主要有門電路、觸發器等邏輯電路組成,所屬電子工程領域。

傳統機器層、微程序機器層和硬件邏輯層屬於實際機器層,和物理設備相關。
操做系統層、彙編語言層、高級語言層和應用層稱爲虛擬機器。而操做系統層、彙編語言層、高級語言層統稱爲系統軟件,應用層主要是完成平常任務的各類程序,例如Office,微信等等。

1.5.3 編程語言發展史

任何事物都是從無到有,逐步發展壯大起來的,編程語言也是同樣。

計算機程序設計語言經歷了機器語言到彙編語言和高級程序設計語言三個階段,其特色是使得程序員用編程語言開發、測試、部署應用程序愈來愈方便、高效。可是是以犧牲效率爲代價,可是隨着計算機硬件的發展,絕大多數應用場景的效率損失能夠忽略不計。

  • 機器語言
    計算機發展的最先期,程序員編寫程序採用二進制的指令(010010101)來實現的,而每種CPU都有各自不一樣的指令系統(SPARC/Intel X86/ARM),所以在不一樣的機器上使用不一樣的機器語言實現。其特色是性能特別高效,而面向機器編程也就意味着不能移植,須要手動處理底層硬件的差別性,並且二進制的指令難以理解和維護。

  • 彙編語言
    隨着時代和計算機技術的發展,彙編語言和編譯器的出現解決了機器語言須要記住很是多的二進制機器指令的難題,可是仍是沒有從根本上解決移植性的問題,只是將機器指令轉換爲易懂的英文單詞,而後由編譯器編譯成機器指令,由於計算機終歸揭底只能識別0001110100110機器指令,並且彙編語言是面向機器的,不一樣機器(SPARC/Intel X86/ARM)的彙編指令是不相同的。

  • 高級程序設計語言
    高級程序設計語言的高級之處體如今開發人員在編寫程序時無需關心計算機底層硬件差別而只須要專一於業務模塊實現便可。甚至是能夠實現 一次編譯,處處運行,這裏以Java爲例子:經過實現不一樣平臺的JVM,編譯生成的字節碼文件能夠在任意的JVM上運行。
    高級語言一般都須要編譯器或者是解釋器將源碼編譯或者解釋後執行。

高級語言主要分爲面向過程和麪向對象兩種,其中典型的面向過程語言就是C,面向對象的編程語言有Java,C++,Python等等。

1.5.4 編程語言應用場景

若是想知道目前主流的編程語言有哪些,能夠訪問tiobe 首頁獲取編程語言排行榜,以下圖所示,從Tiobe官網獲取最新(2019年6月)的編程語言排行榜的前20名,
tiobe編程語言排行榜

根據Tiobe排行榜得知,Java/C/Python 分別排在前三名, 隨後緊跟着C++,VB.NET,C#,JavaScript,PHP等等,每種語言都有不一樣的應用場景和擅長的領域,以下表格所示。

編程語言 應用場景
C 硬件驅動、操做系統、系統軟件
C++ 系統軟件、網絡通信、科學計算、遊戲
C# Windows應用,Web應用、遊戲
Java 大型互聯網應用(淘寶、天貓),Android,大數據
Python 人工智能、機器學習、自動化運維、數據分析 、圖形處理
PHP 中小型網站開發
Objective-C/Swift macOS,iPhone,iPad應用開發
JavaScript 瀏覽器端、服務端、PC桌面
Go 高併發、區塊鏈

1.6 計算機的計算單位

1.6.1 容量單位

在購買電腦時,一般會選擇高配置的內存、硬盤。例如最新款(2019)15寸的macBookPro已經能夠選配32G內存和4T的固態硬盤,而這裏的32G和4T就是經常使用的容量單位。

在物理層面,咱們使用高低電平來記錄信息,一般使用高電平表示1,低電平表示0,所以在計算機底層只能認識0,1兩種狀態。而0,1可以表示的內容太少了,迫切須要更大的容量表示方法,所以誕生了字節(Byte),千字節(KB),兆字節(MB),吉字節(GB),太字節(TB),拍字節(PB),艾字節(EB),它們之間的換算關係以下所示

1EB=1024PB
1PB=1024TB
1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1Byte=8bit

位(bit)是最小的計算機容量單位,一般用於門電路。
而字節(Byte)表示網絡傳輸,文件大小,是最基本的容量單位。
兆字節(MB)表示網速的容量單位
吉字節(GB)一般用於表示計算機內存、磁盤的容量單位
太字節(TB),拍字節(PB)一般是用於表示雲硬盤的容量單位
艾字節(EB)一般是用於表示數據中心的容量單位

如今一般筆記本的內存一般是8G,16G,32G,64G等等,而運行在筆記本之上的操做系統廣泛都是64位的,由於32位系統只能使用4G內存,下面是4G的內存換算

4G=2^2 * 2^10 * 2^10 * 2^10 =4*1024*1024*1024=2^32

在購買內存或者買移動硬盤時,一般使用的存儲單位就是GB或者是TB,
可是在買4T的移動硬盤時,實際的可用容量卻只有3T多,由於計算機的存儲單位是以2的10次方(即1024)換算,而硬盤廠商們是以1000爲換算單位。

4T的硬盤換算成位以下所示

4T=4*1024GB*1024MB*1024KB*1024B*8bit

而硬盤廠商的實際容量

4T=1000*1000*1000*1000*8

所以實際的可用容量是

4*1000*1000*1000*1000/1024/1024/1024/10243.63T

而在一些互聯網巨頭(例如國內的BAT,國外的亞馬遜、蘋果、微軟、谷歌,臉書)公司中,可能使用到比TB更大的海量數據,也就是PB或者EB,它們的換算單位以下所示。

1PB=1024TB
1EB=1024PB

1.6.2 速度單位

  • 網絡速度

網絡經常使用的單位是Mbps
而網絡帶寬提供商(例如長城寬帶)聲稱的百兆帶寬其實是100Mbit/s,可是100M光纖測試的峯值速度只會有12MB/s,它們之間的換算是100Mbit/s=(100/8)MB/s=12.5MB/s。

  • CPU速度

CPU的速度通常是由CPU的時鐘頻率所體現的,而時鐘頻率的單位是赫茲(HZ),目前主流的CPU時鐘頻率通常都在2GHz以上,而赫茲(Hz)其實就是秒分之一,也就是每秒鐘的週期性變更重複次數的計量。
2GHz=21000^3Hz=2100010001000=20億,也就是說2GHz的CPU每秒能夠變化20億次。

1.7 計算機的字符與編碼集

1.7.1 字符集編碼

在計算機底層(內存、硬盤)都是使用01001二進制的方式存儲數據,而字符編碼集是描述了計算機數據(例如字符數據)和底層二進制數據的對應關係,例如在ASC||碼中字符a對應的十進制整數是97,字符A對應的十進制整數是65。

1.7.2 字符編碼集的歷史

  • ASC||碼
    因爲計算機最先是誕生在英美,所以最先的字符集是ASC||,用於表示平常開發中經常使用的大小寫字母以及經常使用的符號,使用7bits表示,包含95個可打印字符課33各個不可打印字符(包括控制字符),95+33=128,即2的7次方。

  • 可擴展的ASC||碼
    隨着計算機的發展以及逐漸普及,ASC||碼在不少應用或者國家中的符號沒法表示,例如數學符號"≠,≥,≈,π",所以對ASC||進行擴充,由原來的7bit擴充到8bits,所以能夠表示256個字符。擴展的運算符增長了數學運算符、帶音標的歐洲字符以及其餘經常使用符、表格符等等。

  • 1.6.2.3 Unicode
    隨着計算機的進一步發展。愈來愈多的國家開始使用使用計算,而對於歐洲、中亞、拉丁美洲國家的語言多樣性,因爲語言體系不同,不以有限字符組合的語言,而中國、韓國、日本的語言最爲複雜。

Unicode定義了世界通用的符號集,能夠表示世界上全部的國家、全部語言的文字、符號,使用UTF-8,UTF-16,UTF-32實現了編碼。

UFT-8:一種變長的編碼方案,使用 1~6 個字節來存儲;
UFT-32:一種固定長度的編碼方案,無論字符編號大小,始終使用 4 個字節來存儲;
UTF-16:介於 UTF-8 和 UTF-32 之間,使用 2 個或者 4 個字節來存儲,長度既固定又可變。

1.7.3 中文編碼集

1980年國內發佈了中文編碼集 GB2312,一共收錄了7445個字符,包含6763個漢字和682個其餘符號,可是GB2312不符合國際標準,後來在1995年推出了GBK編碼,向下兼容GB2312,向上支持國際ISO標準,GBK收錄了21003個漢字,支持所有中日韓漢字。

可是GBK,GB2312都只是本地化的編碼集,若是中國人使用GBK或者GB2312開發了一個網站程序,被國外的用戶訪問了,可是國外的用戶不支持GBK或者GB2312,那麼看到的網站內容就是亂碼。

在國內,Windows系統的默認編碼是GBK編碼,而平常開發中最常使用的是UTF-8字符集。

相關文章
相關標籤/搜索