Skip to content

πŸ‘·πŸ½β€β™‚οΈ Run deno functions in WebWorkers

License

Notifications You must be signed in to change notification settings

denosaurs/parry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

43 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

parry

Tags CI Status Dependencies License


⚠️ This project is a working project. Expect breaking changes.


A simple way of running functions in their own Worker that works with deno.

Usage

The following function will run in it's own Worker, enabling threading and therefor not blocking the main event loop. This becomes very useful for parallelization of certain computations or just a way of running a function and not blocking the main event loop while it runs. It is required to use the --allow-read flag for it to work due to an external js file being loaded in as the worker. If you want the Deno object to be avalible in the worker the --unstable flag is required. Permissions inside the workers are inherited and imports need to be dynamic.

import { parry } from "https://deno.land/x/parry/mod.ts";

async function countSerial(limit: number): Promise<void> {
  for (let i = 0; i < limit; i++) {}
}

console.time("4x CountSerial");
await Promise.all([
  countSerial(1e9),
  countSerial(1e9),
  countSerial(1e9),
  countSerial(1e9),
]);
console.timeEnd("4x CountSerial");

const threads = [
  parry(countSerial),
  parry(countSerial),
  parry(countSerial),
  parry(countSerial),
];

console.time("4x CountParallel");
await Promise.all([
  threads[0](1e9),
  threads[1](1e9),
  threads[2](1e9),
  threads[3](1e9),
]);
console.timeEnd("4x CountParallel");

parry.close();

The parallelized version is as expected 4x faster than the serial version of the count function:

4x CountSerial: 1885ms
4x CountParallel: 509ms