You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importcreateWorkerfrom"async-worker-ts"constworker=createWorker({/** * NB; the 'this' keyword is available in procedures declared as anything * but arrow functions and can be used to access other procedures. */addRandomNumbers: function(){consta=this.randomNumber()constb=this.randomNumber()returna+b},randomNumber: ()=>{returnMath.random()*42},})
Emitting data via Tasks:
importcreateWorker,{task}from"async-worker-ts"constworker=createWorker({calculatePi: task(function(iterations: number){letpi=0for(leti=0;i<iterations;i++){pi+=Math.pow(-1,i)/(2*i+1)// the "this" keyword in the context of a task refers to the task itself.if(i%(iterations/100)===0)this.emit("progress",i/iterations)}returnpi*4}),})awaitworker.calculatePi(1_000_000).on("progress",console.log)// 0.01, 0.02, ....then(console.log)// 3.14159265258979
Concurrency and batching:
importcreateWorkerfrom"async-worker-ts"constworker=createWorker({calculatePi: (iterations: number)=>{letpi=0for(leti=0;i<iterations;i++){pi+=Math.pow(-1,i)/(2*i+1)}returnpi*4},})/** * We can use the 'concurrently' method to run a task from the worker * client in a new auto-disposed worker thread. */worker.concurrently((w)=>w.calculatePi(1_000_000))// 3.14159265258979/** or: */for(leti=0;i<4;i++){worker.concurrently((w)=>w.calculatePi(1_000_000))}
Transferables:
importcreateWorker,{transfer}from"async-worker-ts"constworker=createWorker({drawToCanvas: (OffscreenCanvas)=>{// ... do things with the canvas here as if we were on the main thread},})constcanvas=document.createElement("canvas")constoffscreenCvs=canvas.transferControlToOffscreen()/** * By passing the argument through the 'transfer' function, we flag it as an * transferable. This is the equivalent of calling 'postMessage' with the * second argument being an array containing the argument. */worker.drawToCanvas(transfer(offscreenCvs))
That's it! God help your CPU π
About
π± A type-safe package designed to simplify the usage of worker threads on the server or browser.