在Ubuntu上使用JavaScript实现并发处理,你可以选择多种方法。以下是一些常见的方法:
// 使用回调函数
const fs = require('fs');
fs.readFile('file.txt', 'utf8', function(err, data) {
if (err) throw err;
console.log(data);
});
// 使用Promises
const fs = require('fs').promises;
fs.readFile('file.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
// 使用async/await
const fs = require('fs').promises;
async function readFileAsync() {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
}
readFileAsync();
const { Worker, isMainThread, parentPort } = require('worker_threads');
if (isMainThread) {
// 主线程
const worker = new Worker(__filename);
worker.on('message', (message) => {
console.log('Message from worker:', message);
});
worker.postMessage('Hello from main thread');
} else {
// 工作线程
parentPort.on('message', (message) => {
console.log('Message from main thread:', message);
parentPort.postMessage('Hello from worker thread');
});
}
const { spawn } = require('child_process');
const child = spawn('ls', ['-lh', '/usr']);
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
child.on('close', (code) => {
console.log(`子进程退出,退出码 ${code}`);
});
async
库提供了很多用于处理并发的工具函数。const async = require('async');
// 并发执行多个任务
async.parallel([
function(callback) {
// 任务1
callback(null, '任务1完成');
},
function(callback) {
// 任务2
callback(null, '任务2完成');
}
], function(err, results) {
if (err) {
// 发生错误
console.error(err);
} else {
// 所有任务完成
console.log(results);
}
});
选择哪种方法取决于你的具体需求和应用场景。如果你需要处理大量的I/O密集型任务,Node.js的异步特性可能就足够了。如果你需要进行CPU密集型计算,那么使用Worker Threads可能会更合适。如果你需要与其他系统或命令行工具交互,那么Child Processes可能是最好的选择。