UNPKG

nanolith

Version:

Multi-threading in no time with seamless TypeScript support.

1 lines 1.36 kB
import{cpus}from"os";import{concurrencyOptionMultipliers}from"../constants/pool.js";import{ConcurrencyOption}from"../constants/pool.js";import{isMainThread,workerData}from"worker_threads";import{SharedCounter,SharedU32Integer}from"../utilities/index.js";export const cleanPoolConfig=({file:r,workerData:e,priority:o=!1,options:n={},reffed:t=!0,messengers:c=[],shareEnv:i=!0})=>{if(!r)throw new Error("Filename not provided.");return{file:r,workerData:{...e,messengerTransfers:c.map((r=>r.raw)),messengers:{}},priority:o,options:n,reffed:t,shareEnv:i}};export const generateConcurrencyValue=r=>Math.round(cpus().length*concurrencyOptionMultipliers[r]);export const getDefaultPoolConcurrency=()=>{return r=ConcurrencyOption.Default,Math.round(cpus().length*concurrencyOptionMultipliers[r]);var r};export const getActiveCounter=()=>{if(isMainThread)return SharedCounter.create();const{pool:r}=workerData;if(!r||!r.active)throw new Error("Pool corruption. Counter data not found.");return r.active};export const getConcurrencyCounter=()=>{if(isMainThread){const r=SharedU32Integer.create();return SharedU32Integer.setValue(r,(()=>{return r=ConcurrencyOption.Default,Math.round(cpus().length*concurrencyOptionMultipliers[r]);var r})),r}const{pool:r}=workerData;if(!r||!r.concurrency)throw new Error("Pool corruption. Concurrency data not found.");return r.concurrency};