From 69a6e1505d3339c4963454ee624e3aea846cb924 Mon Sep 17 00:00:00 2001 From: Sascha Schulz <sschulz@dh-software.de> Date: Mo, 09 Dez 2024 14:53:21 +0100 Subject: [PATCH] add worker threads prime search solution --- solutions/010-nodejs/mt-worker.js | 22 ++++++++++++++++++++++ solutions/010-nodejs/mt-main.js | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+), 0 deletions(-) diff --git a/solutions/010-nodejs/mt-main.js b/solutions/010-nodejs/mt-main.js new file mode 100644 index 0000000..062e79d --- /dev/null +++ b/solutions/010-nodejs/mt-main.js @@ -0,0 +1,22 @@ +// Main Thread +const { Worker } = require('worker_threads'); + +const until = 1000000; +const threads = 16; +const workers = []; + +const range = Math.floor(until / threads); + +console.time("primes"); + +for (let i = 0; i < threads; i++) { + const workerPromise = new Promise((r) => { + const worker = new Worker("./mt-worker", { workerData: {from: i * range, to: (i + 1) * range}}); + + worker.on("message", () => r()); + }) + + workers.push(workerPromise); +} + +Promise.all(workers).then(() => console.timeEnd("primes")); diff --git a/solutions/010-nodejs/mt-worker.js b/solutions/010-nodejs/mt-worker.js new file mode 100644 index 0000000..31e1459 --- /dev/null +++ b/solutions/010-nodejs/mt-worker.js @@ -0,0 +1,22 @@ +const { workerData, parentPort } = require('worker_threads'); + +function isPrime(n) { + // Corner case + if (n <= 1) + return false; + + // Check from 2 to n-1 + for (let i = 2; i < n; i++) + if (n % i == 0) + return false; + + return true; +} + +const primes = []; + +for (let i = workerData.from; i <= workerData.to; i++) { + if (isPrime(i)) { + primes.push(i); + } +} -- Gitblit v1.9.3