在Linux中,Node.js可以通過多種方式實現并發。以下是一些常見的方法:
const fs = require('fs').promises;
async function readFiles() {
try {
const file1 = await fs.readFile('file1.txt', 'utf-8');
console.log(file1);
const file2 = await fs.readFile('file2.txt', 'utf-8');
console.log(file2);
} catch (error) {
console.error(error);
}
}
readFiles();
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event1', () => {
console.log('Event 1 occurred');
});
myEmitter.on('event2', () => {
console.log('Event 2 occurred');
});
myEmitter.emit('event1');
myEmitter.emit('event2');
cluster
模塊來實現多線程并發。cluster
模塊允許你創建多個工作進程,每個進程都有自己的事件循環和內存空間。這樣可以充分利用多核CPU的性能。const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case, it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
async
庫提供了許多用于處理并發操作的實用函數,如parallel
、series
、waterfall
等。const async = require('async');
const tasks = [
(callback) => {
setTimeout(() => {
console.log('Task 1 completed');
callback(null);
}, 1000);
},
(callback) => {
setTimeout(() => {
console.log('Task 2 completed');
callback(null);
}, 2000);
},
];
async.parallel(tasks, (err) => {
if (err) {
console.error(err);
} else {
console.log('All tasks completed');
}
});
通過這些方法,你可以在Linux中實現Node.js的并發處理,從而提高應用程序的性能和響應能力。