<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # Node.js的弊端 ### 單線程帶來的弊端 Node.js中有一個特點就是單線程,它帶來了很多好處,但是它也有弊端,單線程弱點如下。 1. 無法利用多核 CPU 2. 錯誤會引起整個應用退出無法繼續調用異步`I/O` 3. 大量計算占用 CPU 導致無法繼續調用異步`I/O` 以上確實是 Node 的弊端,但是都會有一些對應的解決方案: 弊端1:解決方案 * (1)一些管理工具比如`pm2,forever` 等都可以實現創建多進程解決多核 CUP 的利用率問題。 * (2)在 v0.8 版本之前,實現多進程可以使用 `child_process` * (3)在 v0.8 版本之后,可以使用`cluster` 模塊,通過主從模式,創建多個工作進程解決多核CPU的利用率問題。 弊端2:解決方案 * (1)Nnigx 反向代理,負載均衡,開多個進程,綁定多個端口; * (2) 一些管理工具比如`pm2,forever`等都可以實現進程監控,錯誤自動重啟等 * (3)開多個進程監聽同一個端口,使用Node提供的`cluster`模塊; * (4)未出現`cluster`之前,也可以使用`child_process`,創建多子線程監聽一個端口。 * (5)這里說明下,有上面的這些解決方案,但是寫node后端代碼的時候,異常拋出`try catch`顯得格外有必要。 弊端3:解決方案 * (1)可以把大量的密集計算像上面一樣拆分成多個子線程計算 * 但是如果不允許拆分,想計算100萬的大數據,在一個單線程中,Node確實顯得無能為力,這本身就是V8內存限制的弊端。 > 說明:`child_process`與`cluster`模塊我會單獨拿一篇文章來講。 值得開心的是上面這些弊端隨著Node 的版本更新,和新的 api 模塊出現,好像解決了這些弊端。 # Node.js的應用場景 介紹了Node.js的特點和弊端,再說一下Node.js的應用場景。 Node.js適合用來開發什么樣的應用程序呢? 善于`I/O`,不善于計算。因為`Node.js`最擅長的就是任務調度,如果你的業務有很多的`CPU`計算,實際上也相當于這個計算阻塞了這個單線程,就不太適合Node開發,但是也不是沒有解決方案,只是說不太適合。 當應用程序需要處理大量并發的`I/O`,而在向客戶端發出響應之前,應用程序內部并不需要進行非常復雜的處理的時候,`Node.js`非常適合。`Node.js`也非常適合與`websocket`配合,開發長連接的實時交互應用程序。 具體場景可以表現為如下: * 第一大類:用戶表單收集系統、后臺管理系統、實時交互系統、考試系統、聯網軟件、高并發量的web應用程序; * 第二大類:基于web、canvas等多人聯網游戲; * 第三大類:基于web的多人實時聊天客戶端、聊天室、圖文直播; 比如聊天服務,聊天應用程序是最能體現 Node.js 優點的例子:輕量級、高流量并且能良好的應對跨平臺設備上運行密集型數據(雖然計算能力低)。同時,聊天也是一個非常值得學習的用例,因為它很簡單,并且涵蓋了目前為止一個典型的 Node.js 會用到的大部分解決方案。 * 第四大類:單頁面瀏覽器應用程序; * 第五大類:操作數據庫、為前端和移動端提供基于`json`的 RESTful API; 這是適合 Node 的理想情況,因為您可以構建它來處理數萬條連接。它仍然不需要大量邏輯;它本質上只是從某個數據庫中查找一些值并將它們組成一個響應。由于響應是少量文本,入站請求也是少量的文本,因此流量不高,一臺機器甚至也可以處理最繁忙的公司的 API 需求。 * 第六大類,.... # 哪些大公司在用 * 雅虎:雅虎開放了 `Cooktail`框架,將 `YUI3`這個前端框架的能力借助Node延伸到了服務器端。 * 騰訊:將Node應用到長連接,以提供實時功能。 * 花瓣網,蘑菇街:通過 `socket.io` 實現實時通知。 * 阿里:主要利用的是并行 `I/O` 這個性能,實現高效的分布式,它們自己也出了很多Node框架 * LinkedIn:移動網站也是使用的 Node * 網易:游戲領域對并發和實時要求很高,網易開源了 Node 的實時框架 `pomelo` * 等等...
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看