mkdir spawnEx
then ls into that directory
set it up all default
npm init
create an index.js file
touch index.js
Open it up with VCode
Code . index.js
copy and paste the code like so:
index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 |
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); |
Then we create the run file. use worker_threads to extract Worker object. We create a new worker whenever we call runService().
run.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
const { Worker } = require('worker_threads') function runService(name) { return new Promise((resolve, reject) => { const worker = new Worker('./worker.js', { workerData: name }); worker.on('message', data => { console.log('------->', data); resolve(data); }); worker.on('error', reject); worker.on('exit', (code) => { if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`)); }) }) } runService("A").catch(err => console.error(err)) runService("B").catch(err => console.error(err)) runService("C").catch(err => console.error(err)) |
Create a worker class.
touch worker.js
worker.js
1 2 3 4 5 6 7 8 9 |
const { workerData, parentPort } = require('worker_threads'); const fs = require('fs'); for (let i = 0; i < 1000; i++) { fs.appendFile('test.txt', `\n ${workerData} ${Date.now()}`, function (err) { parentPort.postMessage({ workerData: `postMessage: ${workerData} ${Date.now()}` }); if (err) console.log('err', err); }); } |
test.txt
I will show the time at milliseconds of when the worker has written to the text.txt file. As you scroll down using the right hand scroll bar, you’ll notice this millisecond increase. This is the increase of time, and you’ll see exactly which worker was executing at that time.