摘要:回調(diào)函數(shù)在完成任務(wù)后就會(huì)被調(diào)用,使用了大量的回調(diào)函數(shù),所有的都支持回調(diào)函數(shù)。因此,阻塞是按順序執(zhí)行的,而非阻塞是不需要按順序的,所以如果需要處理回調(diào)函數(shù)的參數(shù),我們就需要寫在回調(diào)函數(shù)內(nèi)。
Node.js異步變成的直接體現(xiàn)就是回調(diào)。
異步編程依托于回調(diào)來實(shí)現(xiàn),但不能說使用了回調(diào)后程序就異步化了。
回調(diào)函數(shù)在完成任務(wù)后就會(huì)被調(diào)用,Node使用了大量的回調(diào)函數(shù),Node所有的APi都支持回調(diào)函數(shù)。
比如,我們i 遍讀文件,一邊執(zhí)行其他命令,在文件讀取完成后,我們將文件內(nèi)容作為回調(diào)函數(shù)都參數(shù)返回。
這樣在執(zhí)行代碼時(shí)就沒有阻塞或等待文件I/O操作。這就大大提高了Node都性能,可以處理大量的并發(fā)請(qǐng)求。
接下來寫一個(gè)阻塞代碼實(shí)例
創(chuàng)建一個(gè)文件input.txt,內(nèi)容如下
學(xué)習(xí)前端知識(shí),記錄筆記 ,來segmentfault。
創(chuàng)建main.js 文件,代碼如下:
const fs = require("fs") //fs模塊用于對(duì)系統(tǒng)文件及目錄進(jìn)行讀寫操作。 const data = fs.readFileSync("input.txt"); console.log(data.toString()); console.log("執(zhí)行程序結(jié)束")
非阻塞代碼實(shí)例
const fs = require("fs") //fs模塊用于對(duì)系統(tǒng)文件及目錄進(jìn)行讀寫操作。 fs.readFile("input.txt",(err, data) => { if(err) { console.log(err) }else{ console.log(data.toString()) } }) console.log("程序執(zhí)行結(jié)束!")
以上兩個(gè)實(shí)例寫出了阻塞與非阻塞的不同。第一個(gè)實(shí)例在文件讀取完后才執(zhí)行完程序。
第二個(gè)實(shí)例我們不需要等待文件讀取完,這樣就可以在讀取文件時(shí)同時(shí)執(zhí)行接下來的代碼,大大提高了程序的性能。
因此,阻塞是按順序執(zhí)行的,而非阻塞是不需要按順序的,所以如果需要處理回調(diào)函數(shù)的參數(shù),我們就需要寫在回調(diào)函數(shù)內(nèi)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/104356.html
摘要:標(biāo)準(zhǔn)庫(kù)中的所有方法都提供非阻塞的異步版本,并接受回調(diào)函數(shù),某些方法還具有對(duì)應(yīng)的阻塞方法,其名稱以結(jié)尾。比較代碼阻塞方法同步執(zhí)行,非阻塞方法異步執(zhí)行。 阻塞與非阻塞概述 此概述介紹了Node.js中阻塞與非阻塞調(diào)用之間的區(qū)別,此概述將引用事件循環(huán)和libuv,但不需要事先了解這些主題,假設(shè)讀者對(duì)JavaScript語(yǔ)言和Node.js回調(diào)模式有基本的了解。 I/O主要指與libuv支持的...
摘要:給出了解決方案就是單線程,遠(yuǎn)離線程鎖,狀態(tài)同步的問題,使用異步讓單線程遠(yuǎn)離阻塞,高效利用。而實(shí)際上的異步是采用了線程池技術(shù),發(fā)起異步時(shí),把操作扔到線程池里面執(zhí)行,然后主線程繼續(xù)執(zhí)行其他操作,執(zhí)行完畢通過線程間通信通知主線程,主線程執(zhí)行回調(diào)。 異步IO,事件驅(qū)動(dòng),單線程構(gòu)成了node的基調(diào),為什么異步IO在node中如此重要呢? 我們先來說一下異步的概念,異步常見于前端開發(fā),例如ajax...
摘要:如果不熟悉這種語(yǔ)言,有一篇關(guān)于阻塞與非阻塞的完整文章。在設(shè)計(jì)上與的或的等系統(tǒng)類似,并受其影響,進(jìn)一步采用事件模型。它將事件循環(huán)呈現(xiàn)為運(yùn)行時(shí)構(gòu)造而不是庫(kù),在其他系統(tǒng)中,始終存在阻塞調(diào)用以啟動(dòng)事件循環(huán)。上一篇指南目錄下一篇入門指南 關(guān)于Node.js 作為異步事件驅(qū)動(dòng)的JavaScript運(yùn)行時(shí),Node旨在構(gòu)建可伸縮的網(wǎng)絡(luò)應(yīng)用程序,在下面的hello world示例中,可以同時(shí)處理許多連...
摘要:而線程是進(jìn)程的一部分,二者相扶相依,其中單線程被稱為輕權(quán)進(jìn)程或輕量級(jí)進(jìn)程,執(zhí)行特性線程只有個(gè)基本狀態(tài)就緒,執(zhí)行,阻塞。以上所述證明了操作與其他函數(shù)的這種區(qū)別是由實(shí)現(xiàn),是用多線程的方式,在標(biāo)準(zhǔn)的阻塞式上模擬非阻塞異步,線程池默認(rèn)限制四線程。 node - 非阻塞的異步 IO 每當(dāng)我們提起 node.js 時(shí)總會(huì)脫口而出 事件驅(qū)動(dòng)、非阻塞I/O 和 單線程,所以我總結(jié)了以下幾點(diǎn)對(duì)這三項(xiàng)概念...
閱讀 2629·2021-11-23 09:51
閱讀 861·2021-09-24 10:37
閱讀 3612·2021-09-02 15:15
閱讀 1962·2019-08-30 13:03
閱讀 1881·2019-08-29 15:41
閱讀 2624·2019-08-29 14:12
閱讀 1424·2019-08-29 11:19
閱讀 3301·2019-08-26 13:39