Sascha Schulz
2024-12-09 69a6e1505d3339c4963454ee624e3aea846cb924
add worker threads prime search solution
2 Dateien hinzugefügt
44 ■■■■■ Geänderte Dateien
solutions/010-nodejs/mt-main.js 22 ●●●●● Patch | Ansicht | Raw | Blame | Historie
solutions/010-nodejs/mt-worker.js 22 ●●●●● Patch | Ansicht | Raw | Blame | Historie
solutions/010-nodejs/mt-main.js
Neue Datei
@@ -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"));
solutions/010-nodejs/mt-worker.js
Neue Datei
@@ -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);
    }
}