自從上次接觸nodejs 已經好長時間了,但是年底公司太忙了 ,沒時間看,
上次文章在ubuntu上安裝nodejs[開啟實時web時代] 2013-08-27
過年回家,家裡沒網,作為乙個戰鬥型屌絲,自然不能錯過如此學習機會,於是買了兩本書 一本《深入淺出nodejs》一本《寫給大家看的c++》
看完nodejs 有點感覺,是移動網際網路時代不錯的技術選型,相信,5年後nodejs在中國一定會火起來,就像10年前c#剛出來,標榜為net 而生一樣。
傳統上大部分程式設計效能優化和核心都是在提公升單台伺服器的效能,而對伺服器節點組合效能提公升缺乏考慮。
一方面是,在獨立軟體服務提供商時代,過去80%的程式都執行在單台伺服器上
另一方面是,在計算機結構上,cpu最快,記憶體次之,硬碟最次,網路io效能最爛,所以傳統計算機都圍繞這cpu 、記憶體、硬碟進行設計。這可以理解為時代侷限性。
前幾年,ruby 再次在單台伺服器的效能上要求下滑一下,從而使開發效率在提高一次,但這幾年發現ruby風似乎小了,為啥呢?
個人認為開發效率乃是微軟的絕殺領域,ruby想要依靠開發效率在程式設計世界混一席之地,談何容易,加之開源世界不是很重視開發效率,而重視可閱讀,可擴充套件,可維護,促使ruby風颳的快,走的也快,而且高開發效率很容易出現零和遊戲【1個人埋bug,1個人改bug,乙個人排期,看著每個人都很辛苦,都很努力,都應該加工資,但是從老闆角度,結果維持為0】
nodejs的出現,徹底把效能分為cpu效能和io效能,而在io效能上採取非同步**機制,徹底消滅了計算機之間通訊造成的等待堆積,造成的效能問題,
併發量大時候,大量的等待壓垮 伺服器在傳統伺服器和應用上似乎是家常便飯,這可能要和nodejs說 拜拜了
傳統web伺服器應對海量併發
nodejs 伺服器因對海量併發
傳統的web伺服器因為單台伺服器可以承受的鏈結數有限,所以就弄一大堆海量伺服器來分擔負載,
但是單台伺服器的業務邏輯依然很複雜,軟體開發的複雜度整體上依然沒有降低,不信,你看看你的各種效能調優和可維護行的知識,是不是圍繞單台伺服器的.例如高效能的***
標誌很少寫乙個迴圈裡面掉介面
node js因為單一執行緒就可以處理很高的併發,所以每台伺服器只須處理一點點業務邏輯,由乙個佇列上的其他伺服器處理其他邏輯,這樣,單台伺服器的複雜度就極大的降低,我認為複雜度是效能的天敵,只有消滅複雜度,才能有可靠的效能
標誌
乙個迴圈裡面掉介面很正常
我也不知道nodejs是不是史上第一次自身就是伺服器的程式設計工具,我資歷太淺,才work4年,nodejs是我見到的第乙個自身就是伺服器的程式設計工具.
nodejs 是單執行緒,遇到未知錯誤就自動退出了 。
為什麼說nodejs脆弱呢,我是這麼推理的以.net和iis為例子
3 .net iis 異常 這台伺服器上的所有iis託管的程式異常 超級嚴重
大家平時寫程式 黃頁似乎是加長便飯,即使是程式上線了,該黃頁的時候,還是黃頁,但是程式整體是沒問題的
iis程式池無法啟動和iis異常就很少見了可以忽略了
但是在nodejs中,就完全不一樣 ,1和2放在一起了,因為nodejs 自身就成程式池,而且是單執行緒,只要出現一次異常,該執行緒就 退出了
這就好像以前大家只犯錯誤1 犯錯1000次才可能遇到1次錯誤2,在nodejs中犯一次錯誤就直接是錯誤2
在nodejs 風掛起來後,國外緊跟著的就是js的測試驅動的很多討論和實踐,框架出了乙個又乙個,為啥呢?nodejs有需求唄
node 的v8 記憶體限制 乙個執行緒的內存在32位和64位下都預設沒有突破2g記憶體,傳統的web伺服器,壓力一上來,記憶體很快就上去了,更不用說記憶體比較大的操作了
node 通過非同步機制加強了對cpu 和io的利用,造成了設計程式時候要先預判,我這個程式是cpu 密集呢還是io密集呢?
說實話 2023年, 通過很多事件 我才意識到 原來io 是個很深的領域,很久以前一直認為io沒啥簡單的和1一樣。。。。。
node 整體上是依靠事件迴圈機制驅動,像遞迴程式非常消耗node的事件迴圈,很可能就造成堆疊溢位 程式退出 ,所以一般迴圈遞迴用c++寫外掛程式
這幾個因素和到一起,就造成node 設計程式模組時候 要更細緻,技術粒度更細
就像乙個普通的站點 用.net 開發什麼都幹了 但是node 可能就不是這麼回事了,例如 檔案上傳、驗證碼生成 ,檢索服務,正規表示式服務等等,基本上看上去 高cpu 和高記憶體的模組 都要剝離出來
為啥nodejs 出現後全堆疊開發就屢屢上頭條呢?,net 程式設計師寫js的時候怎麼沒人說全堆疊開發呢?
為啥呢?因為,有人絕望了,再加上移動網際網路的普及的加速,在伺服器端生成html後到客戶端渲染已經out了
[ps:seo也out了,因為移動端鏈結不存在了]
so 一群被壓抑很久的身懷js絕技的人,拿著nodejs神器,在短短4年時間,幾乎攻下了web開發的各個角落,從未有一門語言在4年時間內取得如此成績.c#用了10年 才勉強取代了自己的大哥asp的市場份額,可見nodejs是多nb
[ps:隨著我國人口老齡化,新生人口減少,用人成本提高,不同分工的溝通成本將會年年上公升]
全堆疊的nodejs 和宇宙效率最高的.net 技術**值得長期持有,尤其是要創業的各位夥伴們
一直都想看看c++ 但是,net這個大而全的平台上一般遇不到啥問題需要用c++解決,
最起碼nodejs 遞迴程式得用c++寫
nodejs 就不一樣,有一堆問題需要,所以過年就順便看看了c++,整體感覺c++沒有剛上大學時候在圖書館裡面看的那麼難了
.感覺c++理論上也入門了 就剩下寫nodejs 時候謝謝c++練手了
這也說明學習.net 是快速進步的途徑,想學啥就學啥,我效率高,我怕啥,
根據我多年學習經驗
快速學習web開發的渠道 最快的是
抓取資料->整理資料->展示資料->程式優化
題目選好了說不定還能掛點廣告把伺服器錢掙回來呢
so lets go o(∩_∩)o~
我實踐mvc tdd的專案
有時間 再弄個nodejs版本的
7天學python筆記整理 2019 08 30
p4 python的基本資料型別 1.集合 set 特點 無序,無法用下表取特定值,不支援切片操作 不重複,將相同的元素自動合併 用len 判斷集合長度。用x in 判斷元素是否在集合裡面,同理not in 用 可以剔除集合中的某些元素,即求兩個集合的差集。用 符號可以求出兩個集合共有的元素,即兩個...
《21天學通C (第7版)》 17 6 問與答
21天學通c 第7版 問 vector會改變其儲存的元素的順序嗎?答 vector是一種順序容器,元素的儲存順序與插入順序相同。問 要將元素插入到vector中,應使用哪個函式?元素將插入到vector的什麼位置?答 成員函式push back將元素插入到vector末尾。問 哪個函式用於獲悉儲存在...
21天學通C語言 學習筆記(7)
為了處理更複雜的資料,c語言還定義了一些功能更強大的復合資料型別,如陣列型別 結構體型別 共用體型別和列舉型別。陣列是同一資料型別的許多資料元素按某種順序排列在一起的集合,通過訪問陣列名和索引就可以訪問陣列中的任意元素。本節將重點學習一下內容 一維陣列是c語言中用來儲存和處理一維序列資料的資料型別。...