在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可能是最好的选择。