• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Error

            C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
              217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

                    node.js從誕生之初就是充分考慮了在實(shí)時(shí)響應(yīng)、超大規(guī)模數(shù)據(jù)要求下的可擴(kuò)展性。這使得他擯棄了傳統(tǒng)平臺(tái)依靠多線程來實(shí)現(xiàn)高并發(fā)的設(shè)計(jì)思路,而是采用了單線程、異步式I/O,事件驅(qū)動(dòng)的程序設(shè)計(jì)模式。這些特性不僅帶來了巨大的性能提升,還減少了多線程程序設(shè)計(jì)的復(fù)雜性,進(jìn)而提高了開發(fā)效率。

            Q1:單線程怎么可能榨干多核系統(tǒng)性能?

             

                    node.js最大的特點(diǎn)就是采用異步I/O與事件驅(qū)動(dòng)的架構(gòu)設(shè)計(jì)。對(duì)于高并發(fā)方案,傳統(tǒng)的架構(gòu)是多線程模型,也就是為每個(gè)業(yè)務(wù)邏輯提供一個(gè)系統(tǒng)線程,通過系統(tǒng)線程切換來彌補(bǔ)同步式I/O調(diào)度的時(shí)間開銷。node.js是單線程模型,對(duì)于所有的I/O操作都采用異步請(qǐng)求方式,避免了頻繁的上下文切換。node.js在支持的過程中會(huì)維護(hù)一個(gè)時(shí)間隊(duì)列,程序在執(zhí)行時(shí)進(jìn)入時(shí)間循環(huán)等待下一個(gè)事件到來,每個(gè)異步I/O請(qǐng)求完成之后會(huì)被推送到事件隊(duì)列,等待程序進(jìn)行處理。

            C1:每業(yè)務(wù)邏輯每線程應(yīng)該是上個(gè)世紀(jì)的方案了。本世紀(jì)至少有任務(wù)池和線程池方案,牛逼的還有根據(jù)系統(tǒng)個(gè)邏輯任務(wù)的負(fù)載情況動(dòng)態(tài)調(diào)度。

             

            image

            想起來網(wǎng)狐的AttempterEnging已經(jīng)有這個(gè)味道了,只是沒有提升到理論高度。

             

             

                    node.js最大的特點(diǎn)就是異步I/O與事件緊密結(jié)合的編程模式。這種模式與傳統(tǒng)的同步模式I/O線型編程的思路有很大不同,應(yīng)為控制流很大程序上要靠事件和回調(diào)來組織,一個(gè)邏輯要拆分成若干個(gè)單元。

            異步I/O擴(kuò)展一下就是把能“并發(fā)的邏輯抽取出來,讓有空余負(fù)載的‘cpu’去執(zhí)行,原負(fù)載‘cpu’可以去執(zhí)行其他需要實(shí)時(shí)響應(yīng)的邏輯”

             

            node.js核心模塊

            process: processs是一個(gè)全局變量,即global對(duì)象的屬性。他用于描述node.js進(jìn)程的狀態(tài),提供一個(gè)與操作系統(tǒng)的簡單接口。

            console: console用于提供控制臺(tái)標(biāo)準(zhǔn)輸出,用于向標(biāo)準(zhǔn)輸出流或標(biāo)準(zhǔn)輸入流輸出字符

             

            事件發(fā)射器:

            events模塊只提供一個(gè)對(duì)象:events.EventEmitter,他的核心就是時(shí)間發(fā)射與事件監(jiān)聽功能的封裝。EventEmitter的每個(gè)事件由一個(gè)事件名和若干個(gè)時(shí)間參數(shù)組成,事件名是一個(gè)字符串,通常表達(dá)一定的語義。對(duì)于每個(gè)事件EventEmitter支持若干個(gè)事件監(jiān)聽器。當(dāng)時(shí)間發(fā)射時(shí),注冊到這個(gè)事件的監(jiān)聽器被依次調(diào)用,事件參數(shù)作為回調(diào)函數(shù)參數(shù)傳遞。

            EventEmitter.on(event, listener)  為指定事件注冊一個(gè)監(jiān)聽器,接收一個(gè)字符串event和一個(gè)回調(diào)函數(shù)listener

            EventEmitter.emic(event, args)  發(fā)射event事件,傳遞若干個(gè)可選參數(shù)到事件監(jiān)聽器參數(shù)列表

            EventEmitter.once(event, listener)  為指定事件注冊一個(gè)單次監(jiān)聽器,即觸發(fā)一次后自動(dòng)解除注冊

            EventEmitter.removeListener(event, listener) 解除注冊

            EventEmitter.removeAllListeners(event) 移出所有時(shí)間的所有監(jiān)聽器

             

            error事件:EventEmitter定義了一個(gè)特殊的事件Error,他包含了錯(cuò)誤的語義,在遇到異常的時(shí)候通常會(huì)發(fā)射error事件,當(dāng)error被發(fā)射時(shí),EventEmitter規(guī)定如果沒有相應(yīng)的監(jiān)聽器,node.js會(huì)把它當(dāng)作一場,退出程序并打印調(diào)用棧。

             

            大多數(shù)時(shí)候不會(huì)直接用EventEmitter而是在對(duì)象中繼承他,只要是支持事件響應(yīng)的核心模塊都是EventEmitter的子類。

            posted on 2013-07-28 19:42 Enic 閱讀(251) 評(píng)論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲国产成人久久一区久久 | 久久综合狠狠综合久久| 久久人人爽人人爽AV片| 思思久久精品在热线热| 久久久噜噜噜久久中文福利| 国产高潮久久免费观看| 亚洲精品国产美女久久久| 国产亚洲美女精品久久久久狼| 久久国产乱子伦精品免费午夜| 精产国品久久一二三产区区别 | 久久w5ww成w人免费| 国产精品99久久久久久猫咪| 亚洲综合熟女久久久30p| 久久国产香蕉一区精品| 久久99精品久久久久久久不卡| 狠狠久久综合伊人不卡| 国产成人精品久久一区二区三区 | 亚洲va久久久噜噜噜久久狠狠| 久久中文字幕一区二区| 久久AV高潮AV无码AV| 久久国产成人午夜AV影院| 久久国产精品无码一区二区三区 | 久久99亚洲综合精品首页| 久久久久亚洲av无码专区喷水| 色偷偷88欧美精品久久久| 狠狠精品干练久久久无码中文字幕 | 丁香五月综合久久激情| 久久777国产线看观看精品| 精品一二三区久久aaa片| 久久综合视频网| 国产精品99久久久久久宅男小说| 久久国产免费| 亚洲精品tv久久久久久久久久| 久久伊人影视| 亚洲欧美国产日韩综合久久 | 久久www免费人成看国产片| 久久精品嫩草影院| 777久久精品一区二区三区无码| 伊人久久精品线影院| 久久久久亚洲AV无码专区桃色| 久久99精品久久久久久齐齐|