Во многом так же, как 20 лет назад операционные системы делали многозадачность.Не было никаких потоков, был только список вещей, которые требовали внимания, и контроллер, который бы обращал внимание на вещи, основанные на списке.
Один поток просто перебирает список снова и снова, обслуживая все вещикоторые нуждаются в обслуживании.Единственная разница здесь в том, что с некоторыми вещами связан период ожидания.Они есть в списке, но помечены для обслуживания только после определенного периода.Это очень простая реализация планировщика.Ядро на компьютере делает то же самое.Ваш процессор может выполнять только несколько программ одновременно, и даже тогда, только несколько.Ядро операционной системы должно решить, кто привлекает внимание с точностью до миллисекунды (см. Примеры).«Ядро» или среда выполнения Javascript делает то же самое, но, по сути, работает на ЦП с одним ядром.
Это не говорит о таких вещах, как очереди прерываний и таких, с которыми ЦП может справиться, иЯ не уверен, что у Javascript есть какой-либо аналог, но на простом уровне я думаю, что это справедливое представление.