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