Skip to content

doc: WorkerPool async_hooks example warns about max listeners #35952

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    docIssues and PRs related to Node.js documentation.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions