<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        nodejs中實現阻塞實例_node.js

        來源:懂視網 責編:小采 時間:2020-11-27 21:36:03
        文檔

        nodejs中實現阻塞實例_node.js

        nodejs中實現阻塞實例_node.js:node.js中與生俱來的單線程編程、回調函數異步式風格讓我們有時喜有時憂。先說單線程,很多人會費解于node.js的單線程如何能做到高并發?這個問題不是本文重點,點到為止。澄清一點,node.js的單線程僅僅指javascript引擎是單線程的,無論如何我們沒有辦法在
        推薦度:
        導讀nodejs中實現阻塞實例_node.js:node.js中與生俱來的單線程編程、回調函數異步式風格讓我們有時喜有時憂。先說單線程,很多人會費解于node.js的單線程如何能做到高并發?這個問題不是本文重點,點到為止。澄清一點,node.js的單線程僅僅指javascript引擎是單線程的,無論如何我們沒有辦法在

        node.js中與生俱來的單線程編程、回調函數異步式風格讓我們有時喜有時憂。先說單線程,很多人會費解于node.js的單線程如何能做到高并發?這個問題不是本文重點,點到為止。澄清一點,node.js的單線程僅僅指javascript引擎是單線程的,無論如何我們沒有辦法在javascript中實現多線程和阻塞(本文用到的方法同樣不是通過V8引擎實現同步的);但對于node.js的其他方面不代表不能多線程,例如IO。如果現在node.js遭受大量請求,而這些請求都是IO密集型的,那么此時node每接受一個請求,在遇到耗時較長的IO操作時,javascript線程并不會一直在此等待,而是交出控制,在回調堆棧里添加IO操作完成后要執行的操作(當回調層級過多,訪問數量過大,大量的回調鏈可能會爆棧)。而在這段時間內,node.js又可以處理其他請求了。所以對于node.js而言,雖然javascript是單線程的,每次只能處理一個請求,但javascript處理一個請求的時間往往較短(對于IO密集型應用而言),只要可以異步處理,那么在處理的過程中,此次請求都會釋放控制,使node.js能處理其他請求。這并發請求的同時,IO其實一直處于并發狀態,減少處理請求的線程數,節約資源以增加IO的線程數,對于通常耗時很長的IO密集型請求來說,無疑能帶來性能上的提升。

        前面啰啰嗦嗦地一直在強調IO密集型,其實是在強調node.js的強項。相應的,它的短板就是CPU密集型的請求。道理很簡單,javascript不會并發,只能一個請求完成后才能處理其他請求。一個請求處理的時間越長,其他請求等待的時間越長。同一時間只會有一個請求被處理,并發性能很低。

        話說到這兒,我想申明一點:node.js不應該被阻塞;能異步處理的方法異步處理(如使用fs.readFile(),而非fs.syncReadFile()fs.readFileSync()方法)。

        node中不能阻塞,并不代表node外不能阻塞。前面我們有講到fibers,現在,我們就來嘗試在fibers中實現阻塞。就以處理一個http請求為例吧:

        代碼如下:
        var Fiber = require('fibers');
        var http = require("http");
        Fiber(function () {
        var httpFiber = Fiber.current;
        var html = "";
        http.get("http://www.baidu.com", function (res) {
        var dataFiber = Fiber.current;
        res.on("data", function (data) {
        html += data;
        });
        res.on("end", function (data) {
        httpFiber.run();
        });
        });
        Fiber.yield();
        console.log(html);
        }).run();

        yield()、 run()這兩個方法還不了解的同學,請自行查閱《fibers in node》。


        fibers的運行并不在node進程中,所以在fibers內部實現阻塞對node整體的性能并沒有影響。而且實現起來也是相當容易,只需要在想阻塞的時候,把fiber yield掉。需要繼續運行,則執行 run()恢復fiber。在上面的例子中,我們希望當http.get請求發起時阻塞當前程序,當所有數據接收完成時,恢復程序。于是我們在調用http.get后使用 Fiber.yield()中斷此fiber。在對response的監聽中,如果觸發 end事件表明數據傳輸完成,于是在 end的回調函數中,調用 Fiber.current.run()恢復fiber,這樣,后續的代碼就以同步的方式拿到http.get請求的數據。

        上面的示例只是提供一種思路。如果對這種思路進行一些抽象封裝,比如說,對有接受回調函數為參數的異步方法進行一步柯里化,在調用后中斷,并劫持回調函數,以恢復程序的代碼為回調函數。獲取異步數據后,再程序觸發預定的回調函數,這樣基本能實現異步方法同步化。這段說得比較亂,基本上就是 fibers/future的實現思路,如果有興趣,請參考其源代碼。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        nodejs中實現阻塞實例_node.js

        nodejs中實現阻塞實例_node.js:node.js中與生俱來的單線程編程、回調函數異步式風格讓我們有時喜有時憂。先說單線程,很多人會費解于node.js的單線程如何能做到高并發?這個問題不是本文重點,點到為止。澄清一點,node.js的單線程僅僅指javascript引擎是單線程的,無論如何我們沒有辦法在
        推薦度:
        標簽: 實例 阻塞 node.js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产成人久久综合碰碰动漫3d | 日韩免费一区二区三区在线播放| 久久精品国产精品亚洲人人 | 四虎永久精品免费观看| 国产精品亚洲精品| 免费观看一级毛片| 久久久久亚洲国产AV麻豆| 国产成人免费网站在线观看| 亚洲AV无码成人精品区日韩| 国产精品va无码免费麻豆| 美女视频黄频a免费观看| 亚洲天堂中文字幕在线| 国产性生大片免费观看性| 亚洲AV中文无码字幕色三| 亚洲免费视频网站| 91嫩草亚洲精品| 暖暖免费高清日本中文| 日韩一级片免费观看| 亚洲欧洲无码AV电影在线观看 | 亚洲AV无码XXX麻豆艾秋| 国产成人亚洲精品影院| 在线看片免费人成视频播| 亚洲精品自拍视频| 波多野结衣久久高清免费| xxxxx做受大片视频免费| 久久亚洲AV成人无码国产| 四色在线精品免费观看| 日韩精品无码永久免费网站| 日韩va亚洲va欧洲va国产| 国产免费不卡v片在线观看| 欧美激情综合亚洲一二区| 激情综合色五月丁香六月亚洲| 99在线观看免费视频| 亚洲爆乳成av人在线视菜奈实 | 日韩欧美一区二区三区免费观看| 国产精品亚洲片在线花蝴蝶| 亚洲国产精品无码专区| 午夜宅男在线永久免费观看网| 深夜A级毛片视频免费| 亚洲天堂在线播放| 国产一区二区三区在线免费|