Skip to content

doc: WorkerPool async_hooks example warns about max listeners #35952

Closed
@loganfsmyth

Description

@loganfsmyth

📗 API Reference Docs Problem

  • Version: 15.0.1
  • Platform: All
  • Subsystem: async_hooks

Location

The example WorkerPool using async_hooks

Affected URL(s):

Description

The code I'm explicitly concerned about is

  runTask(task, callback) {
    if (this.freeWorkers.length === 0) {
      // No free threads, wait until a worker thread becomes free.
      this.once(kWorkerFreedEvent, () => this.runTask(task, callback));
      return;
    }

    // ...

Since this code snippet is presented explicitly as how to do something and is very much code that developers could easily end up copy-pasting into their own codebase, I figured it was worth raising as a potential issue.

This code has 2 issues:

  • This quickly triggers a MaxListenersExceededWarning since it adds a listener for every queued task and that number is unbounded
  • This is O(N^2) because when the kWorkerFreedEvent fires, it fires every callback (even though N-1 will just be re-queued), and once listeners have to do a linear search to remove themselves when they fire

Thoughts?

✍️


  • I would like to work on this issue and
    submit a pull request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    docIssues and PRs related to the documentations.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions