Concurrency & Delay in Node.js
Understand how JavaScript handles delays, asynchronous execution, concurrency, parallelism, workers, and thread safety.
Waiting & Asynchronous Execution
JavaScript is single-threaded but can schedule delayed and asynchronous operations using the event loop.
1. Wait for N milliseconds
Non-blocking delay.
2. Run a Function Asynchronously
Schedule execution.
Coordinating Asynchronous Operations
Promises allow coordination between multiple asynchronous operations.
1. Wait for Multiple Async Functions
Promise.all
2. Wait for At Least One Async Function
Promise.race
Promise Chaining: then, catch & finally
Promises provide then, catch, and finally methods to control asynchronous execution flow without using async/await. This style is still widely used and important to understand.
1. then(): Handling Successful Completion
Access resolved value.
2. catch(): Handling Errors
Centralized error handling.
3. finally(): Cleanup Logic
Runs regardless of outcome.
4. Chaining Multiple then Calls
Sequential async flow.
5. then/catch vs async/await
Choosing the right style.
Passing Data Between Async & Sync Code
Asynchronous functions return Promises which carry data back to synchronous code.
1. Passing Data from Async Function
Promise result.
Timers & Intervals
JavaScript provides timers for delayed and repeated operations.
1. Perform Operation After Delay
setTimeout
2. Perform Operation at Every Interval
setInterval
Measuring Time Intervals
Time measurement helps in profiling and performance optimization.
1. Calculating Time Interval
Using Date.now
Parallel Execution using Workers
JavaScript normally runs on a single thread, but Workers allow true parallel execution by running code on separate threads. This is critical for performance and responsiveness.
1. Node.js Worker Threads
Running CPU-heavy work on a separate OS thread.
2. Web Workers (JavaScript)
Parallel execution in browser environments.
Thread Safety & Mutex
When multiple asynchronous operations access the same variable, race conditions can occur. A mutex ensures that only one operation can access a critical section at a time.
1. Race Condition Problem
Multiple async tasks modifying shared state.
2. Mutex Implementation
Allow only one async operation at a time.
3. Using Mutex to Protect Shared State
Prevent race conditions.
4. When Should You Use a Mutex?
Practical guidance.