Для начала вам необходимо понять как работает асинхронная событийная модель, можно почитать тут:
асинхронная событийная модель
Движок в браузере хром - v8, лежит в основе node.js, поэтому принцип работы- одинаковый
Везде можно встетить эту картинку
Event loop которая отображает прицип работы асинхронной модели, лично мне проще представлять в виде
конвеерной ленты, слева вы видите стек накопленных входящих событий, v8 берет их поочереди и выполняет, поэтому если у вас тяжелые вычисления, тогда лучше выполнять их порциями, например часть вычислений -> setTimeout -> часть вычислений -> setTimeout -> часть вычислений, т.к. setTimeout асинхронная функция и когда браузер ее встречает, он кладет ее в стек, и начинает выполнять следующее действие, чтобы понять синхронная эта функция или нет, необходимо читать документацию по конкретно каждой функции, самый простой пример:
jquery ajax, в нем есть ключ: async (default: true), можно сделать ajax запрос синхронным, и пока он не выполнится поток будет заблокирован.