Как стать автором
Обновить

Комментарии 9

Не читал (по скольку знаю), но отметил, что неплохо было бы указать адрес на http://latentflip.com/loupe/ (с ваших же скриншотов)

В начале статьи есть ссылка на видео, но добавил дополнительно вашу ссылку, спасибо!

JavaScript вообще никогда не был однопоточным, как и никакой другой язык, это вообще не свойство языка, а среды исполнения или рантайма. Откуда это пошло?

Даже если проигнорировать банально возможность открыть вторую вкладку, всегда есть зелёные потоки (пусть и кривенькие в рамках js). Да банально redux saga пример такого.

У JavaScript есть правило что только один контекст исполнения может быть активен, но это имеет посредственное отношение к потокам.

Это так, только Вы недоговорили: один Execution Context в рамках одного Realm. А вот самих Realm может быть сколько угодно. Например воркеры работают в своем Realm как следствие - они никаким боком не зависят от Executon Context того Realm который породил воркер. И, что еще любопытнее, все Realm могут существовать в рамках одной host среды и даже в рамках идного рантайм.

В чем очень легко можно убедиться на примере: создали воркер, зациклили тот же трет, убедились что воркер продолжает работать. Или посмотрели список процессов и увидели новый. Или прости господи уничтожили процесс которыи порождал воркер, и увидели что процесс с воркером спокойно продолжает себе работать.

Если мы попытаемся найти в исходном коде V8 функцию асинхронного программирования setTimeout, DOM или HTTP- запросы, то мы их там не найдем: за них, а также за AJAX-запросы, отвечает браузер, а не движок.

Нужно уточнить, что все эти методы являются частью html api, а не ecmascript, поэтому их и нет в движке. В EcmaScript EventLoop вообще не упоминается. Едиенственные упоминания хоть какого-то подобия это Promise.resolve и async / await.

К слову, раз уж начал занудствовать, то в том же HTML API однозначно написано, что это не очередь, а Map, и расписаны микротаски (раз я уже упоминул про промисы), что тут тоже опущено.

Начать стоило бы с того, что в JavaScript нет цикла событий. И тем более стека вызовов в той форме которая описана в материале.

То, что описано в материале, касается агента исполняющего код JavaScript, не является частью стандарта ECMA и может отличаться от агента к агенту.

В данном конкретном случае, речь идет о реализации EventLoop стандарта HTML5. Иными словами, если вы запустите V8 (реализация от Google стандарта ECMA) то там не будет не только EventLoop, но и любого другого механизма цикла событий.

Совершенно верно! Откуда взяться eventloop-у в V8, если он используется в библиотеке libuv.

Никакой libuv в v8 нет. Не несите глупостей. libuv есть в Node.
v8 ненужна libuv по той причине что ей не нужен eventloop.
Читайте официальную спецификацию

Зарегистрируйтесь на Хабре, чтобы оставить комментарий