9

node.js アプリケーションについて少し混乱しました。私が考えた限りでは、node.js は単一のプロセスで実行されます。node app.jsただし、htop を呼び出してアプリケーションを起動し、監視すると、4 つのサブプロセスが実行されていることがわかります。

ここに画像の説明を入力

app.js

var express = require('express'),
    routes = require('./routes'),

    objects = require('./objects'),

    http = require('http'),
    path = require('path'),

    pinLayout = objects.pinlayout,

    // utils
    util = require('util'),
    wiringPi = require('wiring-pi'),
    winston = require('winston'),
    async = require('async');


// Logger - winston
var log = new(winston.Logger)({
    transports: [
        new(winston.transports.Console)({
            colorize: true,
            timestamp: true
        }),
        new(winston.transports.File)({
            filename: './log/app.log'
        })
    ]
});

// WiringPi
wiringPi.setup('gpio');

var app = express();

// all environments
app.set('port', process.env.PORT || 3001);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());

app.use(require('less-middleware')({
    src: __dirname + '/public',
    force: true,
    compress: true
}));

app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// 404 Page
app.use(function(req, res, next) {
    res.render('404.jade', {
        title: "404 - Page Not Found",
        showFullNav: false,
        status: 404,
        url: req.url
    });
});

// development only
if ('development' == app.get('env')) {
    app.use(express.errorHandler({
        dumpExceptions: true,
        showStack: true
    }));
}
4

1 に答える 1

9

コードは単一のスレッドで実行されますが、node.js は (ほとんどの場合) ファイル システム操作にスレッド プールを使用します。fs 用の非同期 API がないため、これが必要です。

たとえば、 を呼び出すと、 が呼び出さfile.readFileれ、次のようにRead()呼び出されます。

ASYNC_CALL(read, cb, fd, buf, len, pos);

readブロッキング UNIX read(2)です。これは、完了するまでスレッドで実行されます。これらはあなたが見ているスレッドです。

于 2013-11-10T14:59:38.543 に答える