日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Nodejs从小工到专家系列(一)

發(fā)布時間:2023/12/19 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nodejs从小工到专家系列(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

從小工到專家系列為從頭開始學習Nodejs,但它并不是教程,我會整理一些應該特別注意或深入理解的知識點,當然也會涉及常用的庫,比如Express,mongoose,bluebird..

Nodejs特點:

單線程

優(yōu)點:

  • 沒有死鎖存在

  • 沒有線程上下文交換所產生的性能開銷

缺點:

  • 無法利用多核

  • 錯誤會引起整個應用退出,健壯性不高

  • 大量計算占用CPU導致無法繼續(xù)調用異步I/O

解決方案:

  • 引入child_process,大量計算時可以將計算分發(fā)到子進程,緩解壓力

  • 進程之間通過事件消息傳遞結果

跨平臺

兼容Windows和*nix.在操作系統(tǒng)與Node上層模塊之間構建一層平臺層架構,即libuv

效率高

  • V8引擎

V8是谷歌開發(fā)的,目前公認最快的 Javascript 解析引擎,libuv 是一個開源的、為 Node 定制而生的跨平臺的異步 IO 庫。

高性能

采用事件循環(huán),而不是為每個連接分配一個線程

應用場景

  • 對實時和并發(fā)有很高要求的,比如游戲,聊天等等

非阻塞I/O

操作系統(tǒng)內核對于I/O只有兩種方式:阻塞與非阻塞.在調用阻塞IO時,應用程序需要等待I/O完成才能返回結果.

阻塞I/O造成CPU等待I/O,浪費等待時間,CPU的處理能力不能得到充分利用.為了提高性能,內核提供了非阻塞I/O.非阻塞I/O會在調用后立即返回.

上面的立即如何理解呢?

因為阻塞I/O完成了整個獲取數據的過程,而非阻塞I/O則不帶數據直接返回,要獲取數據,還需要通過文件描述符再次讀取.

  • 文件描述符類似于應用程序與系統(tǒng)內核之間的憑證.如果應用程序需要進行I/O調用,需要先打開文件描述符,然后在根據文件描述符去實現數據的讀寫

但非阻塞I/O存在些問題,它立即返回的并不是業(yè)務層期望的數據,而僅僅是當前調用的狀態(tài).為了獲取完整的數據,應用程序需要重復調用I/O操作來確認是否完成.這種重復調用判斷操作是否完成的技術叫做輪詢

異步I/O

事件循環(huán)

在進程啟動時,Node會創(chuàng)建一個類似與while(true)的循環(huán),它的作用就是產看是否有事件待處理,如果有就取出并處理,直到沒有就退出進程.

觀察者

如何知道是否有事件待處理呢,就引入了觀察者.再Node中觀察者包括文件I/O觀察者和網絡觀察者等.相當于一個探哨的.

請求對象

當我們要從自己寫的js到系統(tǒng)進行調用,會經歷一個過程js->Node核心模塊->C++內建模塊->libuv->系統(tǒng),那么傳遞參數信息就會利用一個請求對象,包括回調函數也在里面.

請求對象是非常重要的中間產物,所有的狀態(tài)都保存再這個對象中,包括送入線程池等待執(zhí)行及I/O操作完畢后的回調處理.

執(zhí)行回調

組裝好請求對象,送入I/O線程池等待執(zhí)行,實際上完成了異步I/O的第一部分,回調通知是第二部分.I/O觀察者回調函數的行為就是取出處理后返回的結果,以此達到調用JavaScript中傳入的回調函數的目的.

總結

以上是生活随笔為你收集整理的Nodejs从小工到专家系列(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。