UNPKG

effect

Version:

The missing standard library for TypeScript, for writing production-grade software.

76 lines 2.54 kB
/** * @since 3.19.4 * @experimental */ import * as Effect from "./Effect.js"; /** * @since 3.19.4 * @category Models * @experimental */ export declare const TypeId: TypeId; /** * @since 3.19.4 * @category Models * @experimental */ export type TypeId = "~effect/PartitionedSemaphore"; /** * A `PartitionedSemaphore` is a concurrency primitive that can be used to * control concurrent access to a resource across multiple partitions identified * by keys. * * The total number of permits is shared across all partitions, with waiting * permits equally distributed among partitions using a round-robin strategy. * * This is useful when you want to limit the total number of concurrent accesses * to a resource, while still allowing for fair distribution of access across * different partitions. * * @since 3.19.4 * @category Models * @experimental */ export interface PartitionedSemaphore<in K> { readonly [TypeId]: TypeId; readonly withPermits: (key: K, permits: number) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>; } /** * A `PartitionedSemaphore` is a concurrency primitive that can be used to * control concurrent access to a resource across multiple partitions identified * by keys. * * The total number of permits is shared across all partitions, with waiting * permits equally distributed among partitions using a round-robin strategy. * * This is useful when you want to limit the total number of concurrent accesses * to a resource, while still allowing for fair distribution of access across * different partitions. * * @since 3.19.4 * @category Constructors * @experimental */ export declare const makeUnsafe: <K = unknown>(options: { readonly permits: number; }) => PartitionedSemaphore<K>; /** * A `PartitionedSemaphore` is a concurrency primitive that can be used to * control concurrent access to a resource across multiple partitions identified * by keys. * * The total number of permits is shared across all partitions, with waiting * permits equally distributed among partitions using a round-robin strategy. * * This is useful when you want to limit the total number of concurrent accesses * to a resource, while still allowing for fair distribution of access across * different partitions. * * @since 3.19.4 * @category Constructors * @experimental */ export declare const make: <K = unknown>(options: { readonly permits: number; }) => Effect.Effect<PartitionedSemaphore<K>>; //# sourceMappingURL=PartitionedSemaphore.d.ts.map