在Ubuntu环境下,使用JavaScript实现并发可以通过多种方式来完成。以下是一些常见的方法:
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); }); // 主线程继续执行其他任务 console.log('Files are being read concurrently.'); const fs = require('fs').promises; async function readFiles() { try { const data1 = await fs.readFile('file1.txt', 'utf8'); console.log(data1); const data2 = await fs.readFile('file2.txt', 'utf8'); console.log(data2); } catch (err) { console.error(err); } } readFiles(); console.log('Files are being read concurrently.'); worker_threads模块允许你在单独的线程中运行JavaScript代码,这样可以实现真正的并行计算。const { Worker } = require('worker_threads'); function runWorker(workerData) { return new Promise((resolve, reject) => { const worker = new Worker(__filename, { workerData }); worker.on('message', resolve); worker.on('error', reject); worker.on('exit', (code) => { if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`)); }); }); } if (require.main === module) { // 主线程代码 runWorker({ message: 'Hello from main thread!' }).then(console.log); } else { // Worker线程代码 const { workerData } = require('worker_threads'); console.log(workerData.message); process.send('Message from worker thread!'); } child_process模块可以用来创建子进程,这些子进程可以并行运行,并且可以与主进程通信。const { spawn } = require('child_process'); const child1 = spawn('node', ['child.js']); const child2 = spawn('node', ['child.js']); child1.stdout.on('data', (data) => { console.log(`Child 1 output: ${data}`); }); child2.stdout.on('data', (data) => { console.log(`Child 2 output: ${data}`); }); child1.stderr.on('data', (data) => { console.error(`Child 1 error: ${data}`); }); child2.stderr.on('data', (data) => { console.error(`Child 2 error: ${data}`); }); 在child.js中,你可以编写子进程要执行的代码。
这些方法可以帮助你在Ubuntu环境下使用JavaScript实现并发。选择哪种方法取决于你的具体需求和应用场景。