亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Node.js中多進程模塊Cluster的介紹與使用

 更新時間:2017年05月27日 08:41:08   作者:黃明恩  
眾所周知Node.js是單線程的,一個單獨的Node.js進程無法充分利用多核。Node.js從v0.6.0開始,新增cluster模塊,讓Node.js開發(fā)Web服務(wù)時,很方便的做到充分利用多核機器。這篇文章主要給大家介紹了關(guān)于Node.js中多進程模塊Cluster的相關(guān)資料,需要的朋友可以參考下

前言

我們都知道nodejs最大的特點就是單進程、無阻塞運行,并且是異步事件驅(qū)動的。Nodejs的這些特性能夠很好的解決一些問題,例如在服務(wù)器開發(fā)中,并發(fā)的請求處理是個大問題,阻塞式的函數(shù)會導致資源浪費和時間延遲。通過事件注冊、異步函數(shù),開發(fā)人員可以提高資源的利用率,性能也會改善。既然Node.js采用單進程、單線程模式,那么在如今多核硬件流行的環(huán)境中,單核性能出色的Nodejs如何利用多核CPU呢?創(chuàng)始人Ryan Dahl建議,運行多個Nodejs進程,利用某些通信機制來協(xié)調(diào)各項任務(wù)。目前,已經(jīng)有不少第三方的Node.js多進程支持模塊發(fā)布,而NodeJS 0.6.x 以上的版本提供了一個cluster模塊 ,允許創(chuàng)建“共享同一個socket”的一組進程,用來分擔負載壓力。

本篇文章就基于該cluster模塊來講述Node.js在多核CPU下的編程。

Cluster模塊介紹

nodejs所提供的cluster模塊目前尚處于試驗階段,在v0.10.7的官方文檔上我們可以看到模塊的發(fā)布信息如下:

Stability: 1 - Experimental

關(guān)于該模塊的功能,源文檔描述如此“A single instance of Node runs in a single thread. To take advantage of multi-core systems the user will sometimes want to launch a cluster of Node processes to handle the load.” 其意就是:Node的示例以單進程的模式運行,有時為了充分利用多核系統(tǒng)的資源用戶需要運行一組Node進程來分擔負載。

Cluster用法介紹

首先貼出一段該模塊示例應(yīng)用代碼,接下來進行詳細分析,代碼如下:

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
 require('os').cpus().forEach(function(){
 cluster.fork();
 });
 cluster.on('exit', function(worker, code, signal) {
 console.log('worker ' + worker.process.pid + ' died');
 });
 cluster.on('listening', function(worker, address) { 
 console.log("A worker with #"+worker.id+" is now connected to " +
  address.address +
 ":" + address.port); 
 }); 
} else {
 http.createServer(function(req, res) {
 res.writeHead(200);
 res.end("hello world\n");
 console.log('Worker #' + cluster.worker.id + ' make a response');
 }).listen(8000);
}

這段代碼很簡單,主線程就是當前運行的js文件,主線程根據(jù)你本機系統(tǒng)的核數(shù)來創(chuàng)建子進程。所有進程共享一個監(jiān)聽端口8000,當有請求發(fā)起時,主線程會將該請求隨機分配給某個子進程。console.log('Worker #' + cluster.worker.id + ' make a response');這句代碼可以打印出是哪個進程處理該請求。

問題分析

我們前面提到有請求發(fā)起時,由系統(tǒng)來決定將該請求交給哪個進程進行處理。這種完全依賴于系統(tǒng)的負載均衡存在著一個重要缺陷:在windows,linux和Solaris上,只要某個子進程的accept queue為空(通常為最后創(chuàng)建的那個子進程),系統(tǒng)就會將多個connetion分配到同一個子進程上,這會造成進程間負載極為不均衡。特別是在使用長連接的時候,單位時間內(nèi)的new coming connection并不高,子進程的accept queue往往均為空,就會導致connection會不停的分配給同一個進程。所以這種負載均衡完全依賴于accept queue的空閑程度,只有在使用短連接,而且并發(fā)非常高的情況下,才能達到負載均衡,但是這個時候系統(tǒng)的load會非常高,系統(tǒng)也會變得不穩(wěn)定起來。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 新手必須知的Node.js 4個JavaScript基本概念

    新手必須知的Node.js 4個JavaScript基本概念

    本文介紹了4個基本JavaScript概念,它是你學習node.js所必需要掌握,下面就讓我們來看一下具體是哪4個基本JavaScript概念
    2018-09-09
  • 如何利用node轉(zhuǎn)發(fā)請求詳解

    如何利用node轉(zhuǎn)發(fā)請求詳解

    這篇文章主要給大家介紹了關(guān)于利用node轉(zhuǎn)發(fā)請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 快速掌握Node.js環(huán)境的安裝與運行方法

    快速掌握Node.js環(huán)境的安裝與運行方法

    這篇文章主要介紹了Node.js環(huán)境的安裝與運行方法,Node是基于Google Chrome V8引擎的JavaScript解釋器,需要的朋友可以參考下
    2016-02-02
  • 基于uniapp與node.js實現(xiàn)的微信授權(quán)登錄功能實例

    基于uniapp與node.js實現(xiàn)的微信授權(quán)登錄功能實例

    前端一直是一塊充滿驚喜的土地,不僅是那些富有創(chuàng)造性的頁面,還有那些驚贊的效果及不斷推出的新技術(shù),下面這篇文章主要給大家介紹了關(guān)于如何基于uniapp與node.js實現(xiàn)的微信授權(quán)登錄功能的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Node.js Buffer用法解讀

    Node.js Buffer用法解讀

    這篇文章主要介紹了Node.js Buffer用法解讀,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js中.pfx后綴文件的處理方法

    Node.js中.pfx后綴文件的處理方法

    這篇文章主要介紹了Node.js中.pfx后綴文件的處理方法,文中介紹的很詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 基于Nodejs的Tcp封包和解包的理解

    基于Nodejs的Tcp封包和解包的理解

    這篇文章主要介紹了基于Nodejs的Tcp封包和解包的理解,詳細的介紹了tcp的分包與拆包并實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 基于NodeJS的前后端分離的思考與實踐(六)Nginx + Node.js + Java 的軟件棧部署實踐

    基于NodeJS的前后端分離的思考與實踐(六)Nginx + Node.js + Java 的軟件棧部署實踐

    關(guān)于前后端分享的思考,我們已經(jīng)有五篇文章闡述思路與設(shè)計。本文介紹淘寶網(wǎng)收藏夾將 Node.js 引入傳統(tǒng)技術(shù)棧的具體實踐。
    2014-09-09
  • 使用nvm管理不同版本的node與npm的方法

    使用nvm管理不同版本的node與npm的方法

    本篇文章主要介紹了使用 nvm 管理不同版本的 node 與 npm的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • nodejs6下使用koa2框架實例

    nodejs6下使用koa2框架實例

    本篇文章主要介紹了nodejs6下使用koa2框架實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論