91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

node.js中有哪些適用場景

發布時間:2021-12-20 10:35:01 來源:億速云 閱讀:193 作者:小新 欄目:web開發

這篇文章主要介紹了node.js中有哪些適用場景,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

node.js是一個基于Chrome JavaScript運行時建立的一個平臺,其適用場景包括本地化的在線音樂應用、本地化的在線搜索應用、本地化的在線APP等。

本文操作環境:windows7系統、nodejs10.16.2版本、Dell G3電腦。

簡單的說 Node.js 就是運行在服務端的 JavaScript。

Node.js 是一個基于Chrome JavaScript 運行時建立的一個平臺。

Node.js是一個事件驅動I/O服務端JavaScript環境,基于Google的V8引擎,V8引擎執行Javascript的速度非常快,性能非常好。

從原理上理解NodeJS的適用場景

NodeJS是近年來比較火的服務端JS平臺,這一方面得益于其在后端處理高并發的卓越性能,另一方面在nodeJS平臺上的npm、grunt、express等強大的代碼與項目管理應用崛起,幾乎重新定義了前端的工作方式和流程。

NodeJS的成功標志著它的強大,但是不是所有情況都適合應用NodeJS作為服務器端平臺呢?

答案當然是否定的,而網上也是眾說紛紜。那我們從原理出發了解一下NodeJS的適用情況。

在講NodeJS之前我們不仿先看一下傳統(以Apache為代表)的服務器端處理平臺處理并發的方式。

1. Apache的多線程高并發模式

Apache是當前世界排名第一的Web服務端軟件,它由于支持多線程并發而受到廣大服務器技術選型者的歡迎。但發展到后來,Apache在一些WEB的大型應用中也漸漸暴露出它的缺點:阻塞。

那有的同學會奇怪,Apache不是多線程處理并發嗎,為什么還會出現阻塞呢?

要明白這一點我們首先需要了解線程這個概念

1.1 什么是線程?

我們引用官方的解釋:線程可以獨立運行的最小的CPU單位,可以在同一個進程里并發運行,共享該進程下的內存地址空間(注意這個特點)。

我們可以看到同一個進程下的線程是會共享相同的文件和內存的(內存地址空間),所以大家可以想象,當不同的線程需要占用同一個變量時,根據先到先得的原則,先到的線程在運作時,后來的線程只能在旁邊等待,也就是加入到了阻塞排隊序列。所以這就是造成線程阻塞的原因。

因此,雖說進程可以支持多個線程,它們看似同時執行,但互相之間并不同步。一個進程中的多個線程共享相同的內存地址空間,這就意味著它們可以訪問相同的變量和對象,而且它們從同一堆中分配對象。盡管這讓線程之間共享信息變得更容易,因為程序設計者必須小心,確保它們不會妨礙同一進程里的其它線程。

了解了多線程并行的缺陷后,我們就可以更好地理解NodeJS的強大所在了。因為NodeJS是異步單線程的!

2. NodeJS的異步I/O原理

我們先來看一段Apache請求數據庫的代碼:

node.js中有哪些適用場景

代碼執行到第一行的時候線程會阻塞,等待query返回結果,然后繼續處理。由于數據庫查詢、磁盤讀寫、網絡通信等原因(所謂的I/O)阻塞時間會非常大(相對于CPU始終頻率)。對于高并發的訪問,一方面線程長期阻塞等待,另一方面為了應付新情求而不斷添加新線程,會浪費大量系統資源,同時線程的增加也會也會占用大量的CPU時間來處理內存上下文切換。看看node.js怎么處理。

node.js中有哪些適用場景

看到沒,就四個字:異步回調。query的第二個參數是一個回調函數,進程執行到db.query的時候不會等待結果返回,而是直接繼續執行下面的語句,直到進入事件循環。當數據庫執行結果返回的時候會將事件發送到事件隊列,等到線程進入事件循環后才會調用之前的回調函數。更專業的說法是異步I/O。只要單線程就可以。

那為什么NodeJS做到單線程,卻可以實現異步呢?在這里我們先上一幅圖,直戳圖中的Event queue

node.js中有哪些適用場景

看到沒,NodeJS的工作原理其實就是事件循環。可以說每一條NodeJS的邏輯都是寫在回調函數里面的,而回調函數都是有返回之后才異步執行的!

看到這里,你不禁會驚嘆,NodeJS如果所有處理都異步,豈不是曉得飛了?錯錯錯!當然不是,不要忘記,NodeJS實現這些的基礎是單線程。沒錯,單線程!一條線程扛起所有操作!

你可以想象一下,NodeJS在寒風中面對著10萬并發大軍,OK,沒問題,上來敵人一個扔到城里,上來一個又扔到城里。城里全民皆兵,可以很好地消化這些敵人。但如果上來一個類似于張飛趙云這樣的人物,老Node心里一慘,和張飛大戰300回合,把他打殘了,再扔到城里。那后面的10萬大軍就得等這300回合。。。

所以這說明什么?說明NodeJS不是沒有阻塞,而是阻塞不發生在后續回調的流程,而會發生在NodeJS本身對邏輯的計算和處理。我們已經知道,NodeJS的分發能力無比強大,可以循環事件進行異步回調。但如果在循環事件時遇到復雜的邏輯運算,那么單薄的單線程怎么支撐得起上百萬的邏輯+并發呢?NodeJS它的所有I/O、網絡通信等比較耗時的操作,都可以交給worker threads執行再回調,所以很快。但CPU的正常操作,它就只能自己抗了。

說到這里,各位對NodeJS的特性估計也大概有個譜了。所以說適用的場景基本是呼之欲出了~!

3. NodeJS的應用場景

既然NodeJS處理并發的能力強,但處理計算和邏輯的能力反而很弱,因此,如果我們把復雜的邏輯運算都搬到前端(客戶端)完成,而NodeJS只需要提供異步I/O,這樣就可以實現對高并發的高性能處理。情況就很多啦,比如:RESTFUL API、實時聊天、客戶端邏輯強大的單頁APP,具體的例子比如說:本地化的在線音樂應用,本地化的在線搜索應用,本地化的在線APP等。

順便提一下Apache,打壓了這么多,給顆甜棗。Apache由于其多線程高并發共享內存地址空間的特性,那就意味著如果服務器足夠強大,處理器足夠高核,Apache的運作將會非常良好,所以適用于(并發)異步處理相對較少,后臺計算量大,后臺業務邏輯復雜的應用程序。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“node.js中有哪些適用場景”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

忻城县| 义马市| 霍林郭勒市| 宁夏| 兰坪| 军事| 青铜峡市| 江西省| 双桥区| 宜章县| 保德县| 峨山| 池州市| 合作市| 民权县| 宜君县| 友谊县| 乐业县| 玉溪市| 白山市| 齐齐哈尔市| 米泉市| 昭通市| 静宁县| 湘西| 张掖市| 兴安县| 峨眉山市| 自贡市| 盱眙县| 石林| 株洲县| 石门县| 额尔古纳市| 普兰店市| 凉城县| 平武县| 北京市| 华宁县| 左权县| 松滋市|