a simple multithreaded TCP/HTTP server built with Rust
which listens to the incoming TCP/HTTP requests and handle them
listens to incoming tcp connections and bound be specified address
handles the incoming tcp streams / requests by triggering a specified functionality
a thread pool containing a specified number of threads to delegate the request handling work to
which have a pool of workers that are waiting for jobs to do, thus enabling handling more than on job at a time channels [multi-producer single consumer] are used as a way of communication between threads
workers: a vector of workers own the recieving end of the channel and waiting for jobs to handle sender end of the channel: used by the thread pool to send jobs to workers
has an id and a thread the thread is spawned and loops over the receiving end of the channel waiting for jobs to handle once it receives a job, it executes it