Workers give us the ability to offload long-running, computationally-intensive tasks to the background. Instead of having to make sure our event loop is not filled with some type of heavy task, we can offload that task to a background thread.
In other languages/environments, this might look like the following (this is only pseudo-code and is not really tied to any language):
Thread::runAsync((data) -> { for(d : data) { //do some computation }});
While this works well in those environments, we have to start thinking about topics such as deadlock, zombie threads, read after write, and so on. All of these can be quite hard to comprehend and are usually some of the most difficult bugs that can be encountered. ...