ciorent 0.0.22 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -34
- package/index.d.ts +7 -1
- package/index.js +1 -1
- package/package.json +6 -6
- package/sliding-queue.d.ts +1 -1
package/README.md
CHANGED
@@ -24,6 +24,40 @@ const sem = semaphore.init(2);
|
|
24
24
|
cio.concurrent(6, (sem, id) => task(sem, id), sem);
|
25
25
|
```
|
26
26
|
|
27
|
+
## Fibers
|
28
|
+
Virtual threads with more controlled execution.
|
29
|
+
|
30
|
+
```ts
|
31
|
+
import * as cio from 'ciorent';
|
32
|
+
import * as fiber from 'ciorent/fiber';
|
33
|
+
|
34
|
+
const thread1 = fiber.fn(function* () {
|
35
|
+
console.log('Fiber 1 started');
|
36
|
+
|
37
|
+
// Thread1 will be interrupted by thread2
|
38
|
+
// As thread2 will end first
|
39
|
+
yield cio.sleep(1000);
|
40
|
+
|
41
|
+
console.log('Fiber 1 done');
|
42
|
+
});
|
43
|
+
|
44
|
+
const thread2 = fiber.fn(function* (thread) {
|
45
|
+
console.log('Fiber 2 started');
|
46
|
+
|
47
|
+
yield;
|
48
|
+
console.log('Fiber 2 resumed');
|
49
|
+
|
50
|
+
// Start thread 1 and make thread1
|
51
|
+
// lifetime depends on thread2
|
52
|
+
fiber.mount(fiber.spawn(thread1), thread);
|
53
|
+
|
54
|
+
console.log('Fiber 2 done');
|
55
|
+
});
|
56
|
+
|
57
|
+
// Start running the thread
|
58
|
+
fiber.spawn(thread2);
|
59
|
+
```
|
60
|
+
|
27
61
|
## Latch
|
28
62
|
Latch is a synchronization primitive that allows one process to wait until another completes an operation before continuing execution.
|
29
63
|
|
@@ -103,40 +137,6 @@ cio.concurrent(5, async (id: number) => {
|
|
103
137
|
publisher();
|
104
138
|
```
|
105
139
|
|
106
|
-
## Fibers
|
107
|
-
Virtual threads with more controlled execution.
|
108
|
-
|
109
|
-
```ts
|
110
|
-
import * as cio from 'ciorent';
|
111
|
-
import * as fiber from 'ciorent/fiber';
|
112
|
-
|
113
|
-
const thread1 = fiber.fn(function* () {
|
114
|
-
console.log('Fiber 1 started');
|
115
|
-
|
116
|
-
// Thread1 will be interrupted by thread2
|
117
|
-
// As thread2 will end first
|
118
|
-
yield cio.sleep(1000);
|
119
|
-
|
120
|
-
console.log('Fiber 1 done');
|
121
|
-
});
|
122
|
-
|
123
|
-
const thread2 = fiber.fn(function* (thread) {
|
124
|
-
console.log('Fiber 2 started');
|
125
|
-
|
126
|
-
yield;
|
127
|
-
console.log('Fiber 2 resumed');
|
128
|
-
|
129
|
-
// Start thread 1 and make thread1
|
130
|
-
// lifetime depends on thread2
|
131
|
-
fiber.mount(fiber.spawn(thread1), thread);
|
132
|
-
|
133
|
-
console.log('Fiber 2 done');
|
134
|
-
});
|
135
|
-
|
136
|
-
// Start running the thread
|
137
|
-
fiber.spawn(thread2);
|
138
|
-
```
|
139
|
-
|
140
140
|
## Channel
|
141
141
|
Channel is a synchronization primitive via message passing. A message may be sent over a channel, and another process is able to receive messages sent over a channel it has a reference to.
|
142
142
|
|
@@ -242,3 +242,17 @@ console.log('Running 5 tasks concurrently:');
|
|
242
242
|
cio.concurrent(5, task);
|
243
243
|
```
|
244
244
|
|
245
|
+
### Debounce
|
246
|
+
Dropping tasks for a period of time
|
247
|
+
```ts
|
248
|
+
import * as cio from 'ciorent';
|
249
|
+
|
250
|
+
const fn = cio.debounce((id: number) => {
|
251
|
+
console.log('ID:', id);
|
252
|
+
}, 500);
|
253
|
+
|
254
|
+
fn(1); // fn(1) gets skipped
|
255
|
+
cio.sleepSync(100);
|
256
|
+
fn(2); // fn(2) gets executed
|
257
|
+
```
|
258
|
+
|
package/index.d.ts
CHANGED
@@ -32,4 +32,10 @@ export declare const sequential: <const T extends any[]>(n: number, task: (...ar
|
|
32
32
|
* @param n
|
33
33
|
* @param task - The function to run
|
34
34
|
*/
|
35
|
-
export declare const concurrent: <const T extends any[]>(n: number, task: (...args: [...T, id: number]) => Promise<
|
35
|
+
export declare const concurrent: <const T extends any[], const R>(n: number, task: (...args: [...T, id: number]) => Promise<R>, ...args: T) => Promise<R[]>;
|
36
|
+
/**
|
37
|
+
* Drop sync function calls for a specific period
|
38
|
+
* @param f - The target function to debounce
|
39
|
+
* @param ms - The time period in milliseconds
|
40
|
+
*/
|
41
|
+
export declare const debounce: <const Args extends any[]>(f: (...args: Args) => any, ms: number) => ((...args: Args) => void);
|
package/index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export let pause=Promise.resolve();export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.("timers/promises").setTimeout??((ms)=>new Promise((res)=>{setTimeout(res,ms)}));let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??((ms)=>{Atomics.wait(sharedBuf,0,0,ms)});export let sequential=async(n,task,...args)=>{for(let i=0;i<n;i++)await task(...args,i)};export let concurrent=(n,task,...args)=>{let arr=new Array(n);for(let i=0;i<n;i++)arr[i]=task(...args,i);return Promise.all(arr)};
|
1
|
+
export let pause=Promise.resolve();export let sleep=globalThis.Bun?.sleep??globalThis.process?.getBuiltinModule?.("timers/promises").setTimeout??((ms)=>new Promise((res)=>{setTimeout(res,ms)}));let sharedBuf=new Int32Array(new SharedArrayBuffer(4));export let sleepSync=globalThis.Bun?.sleepSync??((ms)=>{Atomics.wait(sharedBuf,0,0,ms)});export let sequential=async(n,task,...args)=>{for(let i=0;i<n;i++)await task(...args,i)};export let concurrent=(n,task,...args)=>{let arr=new Array(n);for(let i=0;i<n;i++)arr[i]=task(...args,i);return Promise.all(arr)};export let debounce=(f,ms)=>{let args;let unlocked=true;let unlock=()=>{unlocked=true};let call=()=>Promise.try(f,...args).finally(unlock);return(...a)=>{args=a;if(unlocked){unlocked=false;setTimeout(call,ms)}}};
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ciorent",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.23",
|
4
4
|
"description": "A lightweight, low-overhead concurrency library",
|
5
5
|
"homepage": "https://ciorent.netlify.app",
|
6
6
|
"repository": {
|
@@ -18,14 +18,14 @@
|
|
18
18
|
"main": "./index.js",
|
19
19
|
"types": "./index.d.ts",
|
20
20
|
"exports": {
|
21
|
-
"./sliding-queue": "./sliding-queue.js",
|
22
21
|
"./fixed-queue": "./fixed-queue.js",
|
23
|
-
"./
|
24
|
-
"./
|
22
|
+
"./sliding-queue": "./sliding-queue.js",
|
23
|
+
"./fiber": "./fiber.js",
|
25
24
|
"./channel": "./channel.js",
|
26
|
-
"
|
25
|
+
"./dropping-queue": "./dropping-queue.js",
|
27
26
|
"./topic": "./topic.js",
|
28
27
|
"./semaphore": "./semaphore.js",
|
29
|
-
"
|
28
|
+
".": "./index.js",
|
29
|
+
"./latch": "./latch.js"
|
30
30
|
}
|
31
31
|
}
|
package/sliding-queue.d.ts
CHANGED
@@ -11,6 +11,6 @@ export { init } from './fixed-queue.js';
|
|
11
11
|
export declare const push: <T extends {}>(q: FixedQueue<T>, item: T) => void;
|
12
12
|
/**
|
13
13
|
* Pop an item from the queue
|
14
|
-
* @param q - The queue to
|
14
|
+
* @param q - The queue to pop from
|
15
15
|
*/
|
16
16
|
export declare const pop: <T extends {}>(q: FixedQueue<T>) => T | undefined;
|