Skip to content

Commit 02408aa

Browse files
authored
Create PracticalQueue.js
1 parent 549786a commit 02408aa

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

03-DataStructures/PracticalQueue.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/*
2+
Task Scheduler:
3+
A task scheduler can process tasks in the order they were added.
4+
A queue can be used to maintain the task order and execute them sequentially.
5+
*/
6+
const Queue = require("./queue");
7+
8+
const taskQueue = new Queue();
9+
10+
function processTask(task) {
11+
console.log("Processing task:", task);
12+
setTimeout(() => {
13+
if (!taskQueue.isEmpty()) {
14+
processTask(taskQueue.dequeue());
15+
}
16+
}, 1000);
17+
}
18+
19+
function addTask(task) {
20+
if (taskQueue.isEmpty()) {
21+
taskQueue.enqueue(task);
22+
processTask(taskQueue.dequeue());
23+
} else {
24+
taskQueue.enqueue(task);
25+
}
26+
}
27+
28+
addTask("Task 1");
29+
addTask("Task 2");
30+
addTask("Task 3");
31+
32+
33+
34+
/*
35+
Message Queue:
36+
A message queue can process incoming messages in the order they were received.
37+
This can be useful in chat applications or other communication systems.
38+
*/
39+
const Queue = require("./queue");
40+
41+
const messageQueue = new Queue();
42+
43+
function displayMessage(message) {
44+
console.log("New message:", message);
45+
}
46+
47+
function processMessages() {
48+
while (!messageQueue.isEmpty()) {
49+
displayMessage(messageQueue.dequeue());
50+
}
51+
}
52+
53+
function receiveMessage(message) {
54+
messageQueue.enqueue(message);
55+
processMessages();
56+
}
57+
58+
receiveMessage("Hello");
59+
receiveMessage("How are you?");
60+
receiveMessage("Goodbye!");
61+
62+
63+
64+
/*
65+
Rate Limiter:
66+
A rate limiter can be implemented using a queue to ensure API requests are sent at a controlled rate to prevent exceeding API limits.
67+
*/
68+
const Queue = require("./queue");
69+
70+
const requestQueue = new Queue();
71+
const rateLimit = 200; // Limit to one request every 200ms
72+
73+
function sendRequest(request) {
74+
console.log("Sending request:", request);
75+
}
76+
77+
function processQueue() {
78+
if (!requestQueue.isEmpty()) {
79+
sendRequest(requestQueue.dequeue());
80+
}
81+
setTimeout(processQueue, rateLimit);
82+
}
83+
84+
function addRequest(request) {
85+
requestQueue.enqueue(request);
86+
}
87+
88+
processQueue(); // Start processing the queue
89+
90+
addRequest("Request 1");
91+
addRequest("Request 2");
92+
addRequest("Request 3");
93+
94+
95+
96+
97+

0 commit comments

Comments
 (0)