https://github.com/yogain123/workers-pool
Workers Pooling in NodeJS
https://github.com/yogain123/workers-pool
javascript nodejs worker-pool
Last synced: 7 months ago
JSON representation
Workers Pooling in NodeJS
- Host: GitHub
- URL: https://github.com/yogain123/workers-pool
- Owner: yogain123
- Created: 2019-09-25T06:05:39.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-12-10T07:40:31.000Z (about 6 years ago)
- Last Synced: 2025-04-03T20:51:11.956Z (9 months ago)
- Topics: javascript, nodejs, worker-pool
- Language: JavaScript
- Homepage:
- Size: 98.6 KB
- Stars: 15
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
## Handling NodeJS C.P.U Intensive Task
NodeJS is frequently referred to as single-threaded. This is true - but there's a catch.
Node has Single "Main" Thread to handle all Client Request.
When a Blocking request comes it actually delegates it task to the worker thread present in thread pool,
So we can conclude that NodeJS Is "not" totally end to end Single Threaded.
**Note: Worker thread are not the main thread.**
Okay , Thats Fine but If we say this about NodeJS that :
In Node.js everything runs in parallel, except your code.
What this means is that:
All I/O code that you write in Node.js is non-blocking, while (conversely) all non-I/O code that you write in Node.js is blocking.
If the above statement is true (Obviously its true) then What if a very very heavy CPU task comes as a client request ,then What ?
You can't do anything but wonder if you could have used another language.
But , No We can even delegate this CPU extensive task to worker thread .
**How do we do that ??**
I will explain this with a proper example here
As you can see I have created a function called heavyTask Which runs a for loop for 5000000000000 times ,
The main thread will be busy for a long time and it will deny to serve any other client request.
How do we delegate this CPU task to one of the worker thread present in thread pool.
worker-pool offers an easy way to create a pool of workers for both dynamically offloading computations
as well as managing a pool of dedicated workers. It basically implements a thread pool pattern.
There is a pool of workers to execute tasks.
New tasks are put in a queue.
A worker executes one task at a time, and once finished, picks a new task from the queue.
In the above example there is a function heavyTask,
which is offloaded dynamically to a worker to be executed for a given set of arguments.
This is how you can handle CPU Intensive Task by offloading that work to the worker thread.
https://levelup.gitconnected.com/handling-nodejs-c-p-u-extensive-task-aa559452eca8