JavaScript is famously single-threaded. You have an octa-core processor? Cool story, bro. Your JavaScript program will only be able to use a fraction of that power.
Why? Because JavaScript is single-threaded. It can only do one thing at a time, and it can only take advantage of one core at a time. So no two computations in your JavaScript program will ever run simultaneously.
Click to play video
You might be thinking:
"Gee, if it’s single-threaded, it must really suck at doing many things at once."
But not so fast!
JavaScript is actually incredible when it comes to asynchronous programming. Why? Because it's "non-blocking".

The simplest way to think about it is that JavaScript can only execute one instruction at a time, but it can continue processing other stuff while it's waiting for something external (like a network request) to complete. In other words, if the "many things" you're doing are I/O bound, like:
Then JavaScript performs quite well. If they're CPU bound (like heavy calculations), JavaScript will struggle. A Node.js server will often far outperform a multi-threaded Python, Ruby, or PHP server because of its ability to handle many concurrent connections without much overhead. On the other hand, it will usually be outperformed by a multi-threaded Java, Go, C++, or Rust server when it comes to heavy computation.