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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

前言

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

Nodejs特點:

單線程

優(yōu)點:

  • 沒有死鎖存在

  • 沒有線程上下文交換所產(chǎn)生的性能開銷

缺點:

  • 無法利用多核

  • 錯誤會引起整個應(yīng)用退出,健壯性不高

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

解決方案:

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

  • 進程之間通過事件消息傳遞結(jié)果

跨平臺

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

效率高

  • V8引擎

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

高性能

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

應(yīng)用場景

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

非阻塞I/O

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

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

上面的立即如何理解呢?

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

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

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

異步I/O

事件循環(huán)

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

觀察者

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

請求對象

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

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

執(zhí)行回調(diào)

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。