Skip to content

node v12.2.0 worker_threads worker number > 10 EventEmitter warning #27687

@AlfieriChou

Description

@AlfieriChou
  • 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

No one assigned

    Labels

    consoleIssues and PRs related to the console subsystem.workerIssues and PRs related to Worker support.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions