ubuntu

Ubuntu Node.js如何进行并发编程

小樊
49
2025-07-29 23:36:43
栏目: 编程语言

在Ubuntu上使用Node.js进行并发编程,可以通过以下几种方式实现:

  1. 回调函数(Callback Functions): 回调函数是Node.js中实现并发的基本方法。Node.js中的异步操作(如文件读写、数据库查询等)通常使用回调函数来处理结果。当异步操作完成时,回调函数会被调用,从而实现并发执行。
const fs = require('fs');

fs.readFile('file1.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

fs.readFile('file2.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  1. Promise: Promise是一种更优雅的处理异步操作的方法。通过使用Promise,可以避免回调地狱(Callback Hell),使代码更易读和维护。
const fs = require('fs').promises;

Promise.all([
  fs.readFile('file1.txt', 'utf8'),
  fs.readFile('file2.txt', 'utf8')
]).then(([data1, data2]) => {
  console.log(data1);
  console.log(data2);
}).catch(err => {
  console.error(err);
});
  1. async/await: async/await是基于Promise的一种更简洁的异步处理方法。通过在函数前加上async关键字,可以在函数内部使用await关键字等待Promise的结果。
const fs = require('fs').promises;

async function readFiles() {
  try {
    const [data1, data2] = await Promise.all([
      fs.readFile('file1.txt', 'utf8'),
      fs.readFile('file2.txt', 'utf8')
    ]);
    console.log(data1);
    console.log(data2);
  } catch (err) {
    console.error(err);
  }
}

readFiles();
  1. 事件驱动(Event-driven): Node.js是基于事件驱动的,可以使用事件监听器来处理并发。例如,可以使用events模块创建一个事件发射器(EventEmitter),并在异步操作完成时触发事件。
const EventEmitter = require('events');
const fs = require('fs');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

myEmitter.on('fileRead', (filename) => {
  fs.readFile(filename, 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
  });
});

myEmitter.emit('fileRead', 'file1.txt');
myEmitter.emit('fileRead', 'file2.txt');
  1. 使用集群(Cluster)模块: Node.js的cluster模块允许在多个CPU内核上运行多个Node.js进程,从而实现真正的并行计算。
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`);
}

这些方法可以帮助你在Ubuntu上的Node.js应用程序中实现并发编程。你可以根据项目需求和个人喜好选择合适的方法。

0
看了该问题的人还看了