Ответ 1
Он все еще находится в той же теме. Однако для большинства практических целей, если у вас такой длинный JavaScript-код, что вы беспокоитесь, ваша "основная" задача может блокировать вызов из setTimeout, вам следует рассмотреть возможность пересмотра вашего базового подхода.
Обновление для награды:
Чтобы расширить более общий вопрос о потоковом в JavaScript, есть отличная дискуссия с очень показательным ответом Бобинса. Он приводит несколько очень интересных сценариев, которые могут поставить под вопрос, можем ли мы по-настоящему рассматривать JS как однопоточную, а его вывод "не совсем".
Заключение комментариев, с которыми я согласен, заключается в том, что с точки зрения внутри JS-среды юниверс однопоточный, но , поскольку инфраструктура, окружающая песочницу JS, не является однопоточной, она может попадайте в песочницу и гадайте с непредвиденными способами. Изнутри среды исполнения неизвестный объект может "приостановить законы природы" и изменить ситуацию. Но среда выполнения не имеет потоковой конструкции, чтобы обрабатывать этот сценарий изначально.
Я думаю, что самый важный способ подойти к вопросу - спросить, что мы подразумеваем под многопоточностью в практическом сценарии? Обычно проблемы с потоками сводятся к таким вещам, как синхронизация, которые мы должны предположить, что разработчики браузеров решили для нас, потому что у JavaScript нет встроенной конструкции, даже пытаясь справиться с ней сами. Ручное отжимание резьбы не имеет ничего хорошего, кроме инструментов для ее исправления; нет мьютексов или замков.
Таким образом, устраняя такие катастрофические проблемы, мы не можем справиться с такими вещами, как, может быть, стоимость неожиданно меняется из-под нас. Но хорошо написанный код должен быть в порядке с этим. Даже в примере Бобинса все задействованные коды по-прежнему являются кодом, который мы добровольно включили в страницу (даже написав сами) так уверенно, что может показаться удивительным, если этот код будет запущен, а ваш главный столбец якобы "заблокирован". Но опять же, говоря о практических проблемах, что самое худшее, что вы могли бы сделать с собой в этом сценарии? Ничего серьезного.
Так что мой длинный способ сказать: я не знаю никакой документации от поставщиков браузеров, где они однозначно говорят, является ли их реализация JS однопоточной или нет, но я сомневаюсь, имеет ли это значение.