mapbox / mapbox/node-cpp-skel

[FUTURE] Write a comparison benchmark using `worker_threads` module

Open
#143 5 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
74
Forks
9
PR merge metrics
No merged PRs in 30d

Description

v10.5.0 has a new `worker_threads` module that allows pure JS functions to run on a separate thread. The node-cpp-skel demonstrates doing this type of thing using C++, but the `worker_threads` module allows for it in pure JS. (https://nodejs.org/en/blog/release/v10.5.0/)

It would be useful to try to write an 🍏 to 🍏 (or as close as we can get) comparison benchmark of doing the same work in C++ threads vs JS threads using `worker_threads`. We would try to answer questions like:

- 🍒 Is performance of passing data (#69, #67) similar in with `worker_threads` vs using libuv directly in C++?
- 🍊 When combined (overhead of thread queuing, passing data to the thread, doing compute, getting data back) which approach is faster?

We could get at 🍒 by writing a benchmark that passes the same, large data, and does no compute in the thread. Instead that thread could just sleep for N seconds.

We could get at 🍊 by passing the same data and doing the same (as close as possible) compute, perhaps a Fibonacci (or some kind of classical compute intensive workload).

----

Depending on the results we will want to update https://github.com/mapbox/cpp/blob/master/node-cpp.md#why-create-a-node-addon which says:

> Why create a node addon?
> To port a C++ project to Node to expose a new interface for the tool (like Mapnik & Node Mapnik)
> Improve performance at scale where Node becomes the bottleneck (i.e. concurrency)

If JS is just as fast as C++, then we'll want to update that doc to mention `worker_threads` as a more ideal solution than writing a node addon to access the thread pool. If `JS/worker_threads` is slower than C++ then we'll probably want to add details to that doc about what types of workloads or performance situations we'd want to use C++ and which we'd want to consider `JS/worker_threads`

/cc @mapbox/core-tech

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the node-cpp-skel examples and the node-cpp.md section linked in the issue, along with the referenced worker_threads release information. Define comparable C++ and JavaScript worker benchmarks for data passing and compute, then use their results to determine whether node-cpp.md needs updated guidance.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, javascript, node.js
Domain
documentation, performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.