-
-
Notifications
You must be signed in to change notification settings - Fork 32.2k
Closed
Labels
consoleIssues and PRs related to the console subsystem.Issues and PRs related to the console subsystem.workerIssues and PRs related to Worker support.Issues and PRs related to Worker support.
Description
- Version: 12.2.0
- Platform: macos 10.12.6
- Subsystem:
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads')
const min = 2
let primes = []
function generatePrimes (start, range) {
let isPrime = true
let end = start + range
for (let i = start; i < end; i++) {
for (let j = min; j < Math.sqrt(end); j++) {
if (i !== j && i % j === 0) {
isPrime = false
break
}
}
if (isPrime) {
primes.push(i)
}
isPrime = true
}
}
if (isMainThread) {
const max = 1e7
const threadCount = +process.argv[2] || 2
const threads = new Set()
console.log(`Running with ${threadCount} threads...`)
const range = Math.ceil((max - min) / threadCount)
let start = min
for (let i = 0; i < threadCount - 1; i++) {
const myStart = start
threads.add(new Worker(__filename, { workerData: { start: myStart, range } }))
start += range
}
threads.add(new Worker(__filename, { workerData: { start, range: range + ((max - min + 1) % threadCount) } }))
for (let worker of threads) {
worker.on('error', (err) => { throw err })
worker.on('exit', () => {
threads.delete(worker)
console.log(`Thread exiting, ${threads.size} running...`)
if (threads.size === 0) {
console.log(primes.join('\n'))
}
})
worker.on('message', (msg) => {
primes = primes.concat(msg)
})
}
} else {
generatePrimes(workerData.start, workerData.range)
parentPort.postMessage(primes)
}
node demo.js 10
// (node:10552) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
maybe should add emitter alias. to avoid this warning.
Metadata
Metadata
Assignees
Labels
consoleIssues and PRs related to the console subsystem.Issues and PRs related to the console subsystem.workerIssues and PRs related to Worker support.Issues and PRs related to Worker support.