• <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++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

                    node.js從誕生之初就是充分考慮了在實(shí)時(shí)響應(yīng)、超大規(guī)模數(shù)據(jù)要求下的可擴(kuò)展性。這使得他擯棄了傳統(tǒng)平臺(tái)依靠多線程來(lái)實(shí)現(xiàn)高并發(fā)的設(shè)計(jì)思路,而是采用了單線程、異步式I/O,事件驅(qū)動(dòng)的程序設(shè)計(jì)模式。這些特性不僅帶來(lái)了巨大的性能提升,還減少了多線程程序設(shè)計(jì)的復(fù)雜性,進(jìn)而提高了開(kāi)發(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)線程,通過(guò)系統(tǒng)線程切換來(lái)彌補(bǔ)同步式I/O調(diào)度的時(shí)間開(kāi)銷。node.js是單線程模型,對(duì)于所有的I/O操作都采用異步請(qǐng)求方式,避免了頻繁的上下文切換。node.js在支持的過(guò)程中會(huì)維護(hù)一個(gè)時(shí)間隊(duì)列,程序在執(zhí)行時(shí)進(jìn)入時(shí)間循環(huán)等待下一個(gè)事件到來(lái),每個(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

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

             

             

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

            異步I/O擴(kuò)展一下就是把能“并發(fā)的邏輯抽取出來(lái),讓有空余負(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)的簡(jiǎn)單接口。

            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)聽(tīng)功能的封裝。EventEmitter的每個(gè)事件由一個(gè)事件名和若干個(gè)時(shí)間參數(shù)組成,事件名是一個(gè)字符串,通常表達(dá)一定的語(yǔ)義。對(duì)于每個(gè)事件EventEmitter支持若干個(gè)事件監(jiān)聽(tīng)器。當(dāng)時(shí)間發(fā)射時(shí),注冊(cè)到這個(gè)事件的監(jiān)聽(tīng)器被依次調(diào)用,事件參數(shù)作為回調(diào)函數(shù)參數(shù)傳遞。

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

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

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

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

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

             

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

             

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

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

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


            久久99精品久久久久久hb无码| 99久久国产综合精品网成人影院| 国产精品午夜久久| 无码精品久久一区二区三区 | 99热成人精品免费久久| 亚洲第一永久AV网站久久精品男人的天堂AV | 日韩精品久久久久久免费| 99精品久久久久久久婷婷| 国产成年无码久久久免费| 亚洲综合精品香蕉久久网97| 久久丫忘忧草产品| 久久99精品久久久久久不卡| 亚洲国产精品成人久久| 污污内射久久一区二区欧美日韩 | AV无码久久久久不卡蜜桃| 亚洲伊人久久成综合人影院| 久久精品国产一区二区三区日韩| 国产精品久久久久蜜芽| 久久人人超碰精品CAOPOREN| 91久久精品电影| 国产一久久香蕉国产线看观看| 国内精品久久久久影院薰衣草 | 久久久WWW成人免费毛片| 欧美综合天天夜夜久久| 亚洲色婷婷综合久久| 亚洲va久久久久| 亚洲日韩欧美一区久久久久我 | 久久久久人妻一区二区三区vr| 久久久久久曰本AV免费免费| 亚洲一级Av无码毛片久久精品| 久久久久亚洲av成人无码电影| 国产—久久香蕉国产线看观看| 国产午夜电影久久| 久久精品国产只有精品66| 久久精品亚洲乱码伦伦中文| 久久久久国产一区二区三区| 九九久久精品国产| 亚洲精品国精品久久99热| 中文国产成人精品久久亚洲精品AⅤ无码精品| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 天堂无码久久综合东京热|