1.0.0 • Published 6 years ago

async-explorations-cli v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

async-explorations-cli

async-explorations-cli is a command-line tool to benchmark asynchronous recursive functions in Node.js. It is a companion to Explorations in Asynchronicity.

Benchmarks are run using experimental worker threads. As a result, async-explorations-cli requires Node.js v10.5.0 or higher.

Overview

Users can benchmark the following six functions:

function syncFib(n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;

  return syncFib(n - 1) + syncFib(n - 2);
}
async function asyncFib(n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;

  const prevValues = await Promise.all([asyncFib(n - 1), asyncFib(n - 2)]);

  return prevValues[0] + prevValues[1];
}
function syncBusyFib(n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;

  const superBig = n ** 9;
  for (let i = 0; i < superBig; i++) {
    i;
  }

  return syncBusyFib(n - 1) + syncBusyFib(n - 2);
}
async function asyncBusyFib(n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;

  const superBig = n ** 9;
  for (let i = 0; i < superBig; i++) {
    i;
  }

  const prevValues = await Promise.all([
    asyncBusyFib(n - 1),
    asyncBusyFib(n - 2),
  ]);

  return prevValues[0] + prevValues[1];
}
function syncMemoFib(n, memo = {}) {
  if (n <= 0) return 0;
  if (n === 1) return 1;
  if (memo[n]) return memo[n];

  const first = syncMemoFib(n - 1, memo);
  const second = syncMemoFib(n - 2, memo);
  memo[n] = first + second;

  return memo[n];
}
async function asyncMemoFib(n, memo = {}) {
  if (n <= 0) return 0;
  if (n === 1) return 1;
  if (memo[n]) return memo[n];

  const prevValues = await Promise.all([
    asyncMemoFib(n - 1, memo),
    asyncMemoFib(n - 2, memo),
  ]);

  memo[n] = prevValues[0] + prevValues[1];
  return memo[n];
}

Installation

npm install -g async-explorations-cli

How to use

The command-line-tool is called async-explore. It requires two arguments: 1. The Fibonacci function to benchmark. - This must be one of syncFib, asyncFib, syncBusyFib, asyncBusyFib, syncMemoFib, and asyncMemoFib. 1. A positive integer that is the arguemnt to the Fibonacci function.

Example

$ async-explore syncFib 1
The 1st Fibonacci number is 1.
It took 0 milliseconds to calculate this.

To turn off the use of worker threads, run async-explore with an optional --mode=no-worker or -nw flag.

Contributing

License