自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你必須理解的計(jì)算機(jī)核心概念

開發(fā) 開發(fā)工具
計(jì)算機(jī)學(xué)科中有很多概念, 例如編碼(原碼,補(bǔ)碼,反碼), 虛擬內(nèi)存, 文件, IO, 編譯,鏈接,分組交換,關(guān)系, 事務(wù),范式, Hash, 加密。。。等等,本文試圖講一下最重要的核心集合,從這個(gè)集合當(dāng)中就可以變換出計(jì)算機(jī)編程的各種魔法。

[[196908]]

計(jì)算機(jī)學(xué)科中有很多概念, 例如編碼(原碼,補(bǔ)碼,反碼), 虛擬內(nèi)存, 文件, IO, 編譯,鏈接,分組交換,關(guān)系, 事務(wù),范式, Hash, 加密。。。等等,本文試圖講一下最重要的核心集合,從這個(gè)集合當(dāng)中就可以變換出計(jì)算機(jī)編程的各種魔法。

1 馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)的原理

所有的計(jì)算機(jī)語言,不管是Java, Python, Go, C, C++, PHP...... , 無論你在TIOBE上是排行***還是排行第100, 無論看起來多么花哨,功能多么強(qiáng)大,用起來多么舒服, 最終都要變成基本的二進(jìn)制指令,老老實(shí)實(shí)地在馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)上按規(guī)矩執(zhí)行。

這里是根, 我們看到的、用到的都是這棵樹上的花和枝葉。

作為志向遠(yuǎn)大的、有著強(qiáng)烈好奇心的年輕人, 難道你不想到根部來看一看?

作為最基本的要求, 必須要了解CPU和內(nèi)存這倆哥們是怎么親密無間工作的: CPU從內(nèi)存取出指令,進(jìn)行譯碼和執(zhí)行,執(zhí)行時(shí)從內(nèi)存中取出數(shù)據(jù)放到寄存器中, 進(jìn)行計(jì)算, 然后把結(jié)果寫回到內(nèi)存。如果是跳轉(zhuǎn)指令, CPU則取出跳轉(zhuǎn)目的地的指令繼續(xù)執(zhí)行。

如此簡單的過程,竟然組成了多姿多彩的電腦世界: 你可以聽音樂,玩游戲、上網(wǎng)聊天、用Word來寫文檔..... 當(dāng)然看起來微不足道的一個(gè)操作,進(jìn)入到CPU和內(nèi)存中都可能需要成千上萬條指令來完成。

這些基本的指令組成了順序、循環(huán)、分支等基本的程序結(jié)構(gòu),形成了更為強(qiáng)大的編程語言的基礎(chǔ)。

CPU和內(nèi)存、硬盤等設(shè)備的速度不匹配,是馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)的一個(gè)核心問題,為了解決這個(gè)問題,科學(xué)家們絞盡腦汁,想盡了辦法, 又引出了一堆概念: 緩存,DMA, 同步,異步,阻塞....

2 進(jìn)程和線程

這倆家伙的重要性不言而喻,因?yàn)槟銓懙乃械某绦蛞磿蔀橐粋€(gè)獨(dú)立的進(jìn)程去執(zhí)行,要么是被一個(gè)進(jìn)程中的線程收編,沒有例外 。

幾乎所有的編程語言都會涉及到對多進(jìn)程或者多線程編程的支持, 特別是多線程的并發(fā)編程, 所以你必須得搞明白它的本質(zhì)是什么。

進(jìn)程是對一個(gè)運(yùn)行中的程序的抽象,沒有這個(gè)概念,我們是無法實(shí)現(xiàn)一邊聽歌、一邊上網(wǎng)的愜意生活。

對于CPU來講, 它只是“渾渾噩噩”地從某個(gè)地方取指令,譯碼執(zhí)行,但是它不會意識到在某一刻整個(gè)世界已經(jīng)變了天, 它執(zhí)行的程序已經(jīng)發(fā)生了切換,另外一個(gè)程序(準(zhǔn)確地講叫進(jìn)程)已經(jīng)成功地?fù)尠鄪Z權(quán)。

每個(gè)進(jìn)程都有一個(gè)被操作系統(tǒng)老大維護(hù)的進(jìn)程控制塊, 里邊保存了這個(gè)進(jìn)程在運(yùn)行時(shí)的重要信息,是進(jìn)程能來回切換的重要保證。

而線程則寄居于進(jìn)程之內(nèi) , 共享進(jìn)程提供福利(代碼和數(shù)據(jù))的同時(shí), 還擁有自己的一畝三分地。

線程的出現(xiàn),提升了系統(tǒng)的性能、吞吐量和響應(yīng)性。 但是多進(jìn)程/多線程編程也帶來了一系列問題: 同步,通信,鎖, 死鎖。。。

3 虛擬內(nèi)存

有了物理內(nèi)存, 為啥還有虛擬內(nèi)存?

一個(gè)重要的原因就是給各位進(jìn)程先生提供一個(gè)由虛擬地址組成的獨(dú)立王國, 給他們造成一種假象: 我最重要,我是獨(dú)占內(nèi)存的!

每個(gè)人在自己的獨(dú)立王國里鬧騰,就不會互相打架, 治安也就有了保證。

但是在虛擬地址王國里做不了什么事情,指令必須在物理內(nèi)存中才能被執(zhí)行, 操作系統(tǒng)老大用盡渾身解數(shù),把每個(gè)進(jìn)程的虛擬地址映射到實(shí)際地址上去,表面上不動聲色,背后絕對驚心動魄,分段,分頁,頁表,還要動用CPU的TLB來加速。

程序并不是像你想象的那樣,一下子全部裝載到內(nèi)存的, 而是慢慢地, 用到的時(shí)候才進(jìn)行裝載。

進(jìn)程一條普通指令的執(zhí)行, 其實(shí)有一大家子在鞍前馬后地忙碌著, 而進(jìn)程幾乎渾然不覺,真是太幸福了。

4 網(wǎng)絡(luò)的核心概念

上面所說的都局限于一臺計(jì)算機(jī), 然而一張大網(wǎng)早已經(jīng)把這些孤島聯(lián)系在一起。

這張大網(wǎng)就你我的周圍, 我們都變成了它的一個(gè)節(jié)點(diǎn)。

大網(wǎng)的設(shè)計(jì)非常有趣,沒有一個(gè)中心的節(jié)點(diǎn),某幾個(gè)甚至某一片節(jié)點(diǎn)陣亡都沒有關(guān)系,大網(wǎng)繼續(xù)生存,提供服務(wù)。

作為碼農(nóng)我們要理解的核心概念是: 分組交換, TCP/IP參考模型, socket , http(s)。

你也許沒有想到,你上網(wǎng)玩游戲,聽音樂,看這篇文章,其中的數(shù)據(jù)并不是一下子全發(fā)給你的, 而是被切分成適合網(wǎng)絡(luò)傳輸?shù)男K,給每個(gè)小塊編上號, 每個(gè)小塊都獨(dú)立地走相同甚至不同的網(wǎng)絡(luò)路徑, 到達(dá)你這里,重新排序,組合,然后才展示給你, 這就是分組交換。

使用分組交換可以充分的利用網(wǎng)絡(luò)帶寬: 在你不使用的間隙,別人也可以利用。

但是一個(gè)很明顯的問題就是分組數(shù)據(jù)丟失了怎么辦? 如何檢測, 怎么重發(fā),如何緩存已經(jīng)收到分組數(shù)據(jù)等一系列煩人的問題接踵而來。 這就是TCP要干的事情。

如果你能體會到TCP是在端系統(tǒng)實(shí)現(xiàn)的,中間節(jié)點(diǎn)一無所知,我想你就Get到了分組交換和分層的真諦。

TCP/IP參考模型定義了5層: 應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層,物理層。你一定得理解所謂的分層只不過是把你的數(shù)據(jù)層層包裝而已,在傳輸?shù)倪^程層中每到一個(gè)節(jié)點(diǎn)都會拆開某一層的包裝,查看一下數(shù)據(jù), 然后再次包裝,轉(zhuǎn)發(fā)出去,直到終點(diǎn)。

也許你不愿意了解底層煩人的細(xì)節(jié), 但是一定要理解socket和http(s) , 這哥倆最貼近我們碼農(nóng)的日常生活,我們經(jīng)常直接和他們對話,利用他們收發(fā)數(shù)據(jù), 所以花點(diǎn)經(jīng)歷好好學(xué)學(xué)吧。

5 Hash 和 RSA

如果說Https是網(wǎng)絡(luò)安全通信的一大基石, 那Hash和RSA 則是基石的基石。

為了保證消息在傳輸過程中的私密性, 完整性,不可偽造性,這哥倆可以說是功不可沒。

其實(shí)不僅僅是Https , 在各種軟硬件平臺上都能看到他們勤奮的身影, 例如SSO, SSH, JWT ..... 所以非常值得你投入精力去學(xué)習(xí)。

RSA最為美妙之處就是有一對兒鑰匙, 一個(gè)是私有的、保密的, 另外一個(gè)是公有的, 誰都可以知道, 這對于之前的對稱密鑰是個(gè)極大的顛覆, 誰能想到原先需要保密的密鑰竟然可以公開呢!

更有意思的是私鑰加密的數(shù)據(jù)只有相應(yīng)的公鑰才能解開, 反之亦然,這確實(shí)是很漂亮的概念。

RSA的概念很簡單, 但是為了實(shí)現(xiàn)真正的安全消息傳輸,作為***步必須得有數(shù)據(jù)簽名做保證, 你需要理解如何對消息用Hash形成摘要,然后用私鑰簽名,又是如何驗(yàn)證這個(gè)簽名的, 理解了這一點(diǎn),很多東西都迎刃而解。

【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號coderising獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2018-10-08 14:10:46

2022-03-30 15:25:28

鏈接過程計(jì)算機(jī)系統(tǒng)程序

2021-06-16 11:13:49

曙光

2015-03-24 14:11:41

程序員

2021-08-12 15:00:01

Linux終端

2015-10-12 15:21:57

桌面云/銳捷網(wǎng)絡(luò)

2015-05-28 11:09:00

2011-07-27 21:28:53

計(jì)算機(jī)網(wǎng)絡(luò)服務(wù)

2023-12-17 14:24:46

計(jì)算機(jī)進(jìn)程線程

2015-03-17 09:26:09

2021-05-19 09:00:00

人工智能機(jī)器學(xué)習(xí)技術(shù)

2020-09-10 14:33:18

計(jì)算機(jī)

2023-06-06 09:01:09

2011-05-19 09:39:51

數(shù)據(jù)庫計(jì)算機(jī)

2023-09-14 10:48:59

算法編程

2021-08-20 08:33:19

操作系統(tǒng)OS

2023-09-12 12:11:31

方式計(jì)算機(jī)交互

2010-07-27 16:15:39

計(jì)算機(jī)技術(shù)

2015-09-30 11:22:19

計(jì)算機(jī)大數(shù)據(jù)

2023-10-11 18:30:39

Web系統(tǒng)程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號