• <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   管理


            久久精品中文无码资源站| 国产AⅤ精品一区二区三区久久 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久久人妻一区精品色| 色综合久久综合网观看| 无码精品久久一区二区三区| …久久精品99久久香蕉国产| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久青青草原精品影院| 亚洲色婷婷综合久久| 91精品国产91热久久久久福利| 久久中文字幕视频、最近更新| 久久国产精品成人免费| 久久香综合精品久久伊人| 国产成人精品久久| 国产成年无码久久久久毛片| 国产成人精品三上悠亚久久| 岛国搬运www久久| 国产精品欧美久久久天天影视| 伊人情人综合成人久久网小说| 国产精品一区二区久久精品无码 | 欧美日韩中文字幕久久久不卡 | 91精品免费久久久久久久久| 精品久久久久久无码中文字幕一区 | 麻豆av久久av盛宴av| 久久久青草青青国产亚洲免观| 日韩精品久久久久久| 久久久久久久综合日本亚洲| A级毛片无码久久精品免费| 久久国产色av免费看| 综合久久精品色| 亚洲а∨天堂久久精品| 一本综合久久国产二区| 香蕉久久久久久狠狠色| 2021国内久久精品| 久久精品国产亚洲AV影院| 久久亚洲AV无码精品色午夜| 无码人妻久久一区二区三区蜜桃| 亚洲精品WWW久久久久久| 香蕉久久夜色精品国产尤物 | 97久久超碰国产精品2021|