Clustering and Worker Threads
Use processes or threads appropriately for multi-core and CPU-intensive workloads.
Lesson content
๐ฏ Goal By the end of this lesson, you'll understand: What is Clustering? What are Worker Threads? Why do we use them? Differences between them Real-world examples Interview questions What is Clustering? Clustering allows Node.js to create multiple processes that share the same server port. Each process has its own: Memory Event Loop JavaScript Engine This helps utilize multiple CPU cores . Simple Definition: Clustering creates multiple Node.js processes to handle more client requests. Why Do We Need Clustering? By default, Node.js runs on one CPU core . If your machine has: 8 CPU Cores A normal Node.js application uses only: 1 Core With Clustering: 8 CPU Cores โ 8 Node.js Processes Real-Life Example ๐ฆ Imagine one bank counter. 100 Customers โ 1 Cashier Long waiting time. Now imagine: 100 Customers โ 8 Cashiers Customers are served much faster. Cluster Architecture Master Process โ โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ โผ โผ โผ Worker 1 Worker 2 Worker 3 โ โ โ โโโโโโโโโโโ Handle Requests โโโโโโโโโโโ Cluster Example const cluster = require ( "cluster" ); const os = require ( "os" ); if ( cluster . isPrimary) { const cpuCount = os . cpus() . length; for ( let i = 0 ; i < cpuCount ; i ++ ) { cluster . fork(); } } else { console . log( `Worker ${ process . pid} started` ); } What are Worker Threads? Worker Threads allow JavaScript code to run on multiple threads within the same Node.js process. Unlike Clustering: Workers share the same process. They have separate JavaScript execution contexts. They communicate using messages. Simple Definition: Worker Threads are used for CPU-intensive tasks without blocking the Event Loop. Why Do We Need Worker Threads? Heavy computations can block the Event Loop. Examples: Image Processing Encryption Video Encoding Large Calculations Data Analysis Worker Threads solve this problem. Real-Life Example ๐จโ๐ป Software Company Project Manager โ โผ Developer 1 Developer 2 Developer 3 Each developer works independently but on the same project. Worker Thread Architecture Main Thread โ โผ Worker Thread 1 Worker Thread 2 Worker Thread 3 Worker Thread Example main.js const { Worker } = require ( "worker_threads" ); const worker = new Worker ( "./worker.js" ); worker . on( "message" , ( msg ) => { console . log( msg ); }); worker.js const { parentPort } = require ( "worker_threads" ); parentPort . postMessage( "Task Completed" ); Output Task Completed Cluster vs Worker Threads Feature Cluster Worker Threads Unit Process Thread Memory Separate Shared process (separate JS context) Event Loop One per process One per worker thread Best For HTTP Servers CPU-intensive tasks Uses Multiple CPU Cores โ Yes โ Yes When to Use Cluster? Use Clustering for: โ Express Servers โ REST APIs โ High Traffic Websites โ Load Balancing When to Use Worker Threads? Use Worker Threads for: โ Image Processing โ Machine Learning โ Encryption โ PDF Generation โ Data Compression Real-Life Example ๐ Clustering 1000 Website Users โ Worker 1 Worker 2 Worker 3 Worker 4 Many users are distributed across multiple processes. Worker Threads Large Image โ Worker Thread โ Resize Image โ Return Result Heavy computation is done without blocking the main thread. Visualization Client Requests โ โผ Master Process โ โโโโโโโผโโโโโโ โผ โผ โผ W1 W2 W3 Worker Threads Main Thread โ โโโโโโผโโโโโ โผ โผ โผ WT1 WT2 WT3 Interview Question Which should you use for an Express server? Answer: Cluster Because it allows multiple Node.js processes to handle incoming requests across CPU cores. Which should you use for image processing? Answer: Worker Threads Because image processing is CPU-intensive and should not block the Event Loop. Best Practices โ Use Cluster for scaling web servers. โ Use Worker Threads for CPU-intensive tasks. โ Keep communication between workers lightweight. โ Don't use Worker Threads for ordinary asynchronous I/O like database queries or HTTP requests. Key Points โ Cluster creates multiple Node.js processes. โ Worker Threads create multiple threads inside one process. โ Cluster is ideal for scaling HTTP servers. โ Worker Threads are ideal for CPU-bound computations. โ Both help utilize multiple CPU cores, but they solve different problems. ๐ง Easy Formula Need More HTTP Requests? โ โผ Cluster Need Heavy Computation? โ โผ Worker Threads Cluster = Multiple Processes Worker Threads = Multiple Threads Cluster โ Scale Servers Worker Threads โ CPU Tasks Remember: ๐ฅ๏ธ Cluster = Multiple Node.js processes for handling more requests ๐งต Worker Threads = Multiple threads for CPU-intensive work ๐ Use Cluster for web servers and Worker Threads for heavy computations.