170 похожих чатов

Кто хорошо разбирается в event loop. Вот есть 2 фазы, во

время которых исполняется пользовательский код: timers phase и poll phase. Timers исполняет всякие таймеры, а poll i/o. Но что насчёт остальных асинхронных запросов, например, запросы по сети? Или коллбек от дочерних процессов? Или коллбек от событий? Когда они обрабатываются

56 ответов

13 просмотров

Что такое коллбек от дочерних процессов в этом контексте

.sha- Автор вопроса

Например, стримы, когда кидают событие data— доступен новый кусок данных для чтения

.sha- Автор вопроса

Например, exec(‘command’, callback);

стримы - это те же event emitter, а коллбеки в них вызываются синхронно

.sha- Автор вопроса

Ок, ну остальные коллбеки, которые срабатывают асинхронно Дочерние процессы, сеть, коллбеки событий браузера типа onClick

.sha- Автор вопроса

Ну типа event loop и в node, и в браузере примерно одинаковый, нет? И там, и там v8

здесь я не уверен, но это тот же async i/o, на винде это просто вызов какой то WaitForObject, надо смотреть доки/сорсы ноды/libuv

dom api насколько знаю - синхронный, но я не эксперт, может поправять кто то здесь

.sha- Автор вопроса

Где-то вообще можно найти исчерпывающую информацию по event loop, кроме исходников libuv? На mdn и nodejs очень поверхностно, ещё читал на ibm developer, но там тоже нет деталей особо

а какая цель всего этого? постичь дзен евент лупа и распределять так задачи в реальности?

.sha- Автор вопроса

Понимать, что в каком порядке, как и именно и почему исполняется

статью не дам, не знаю такую, а какой толк от этих знаний будет?)) думаете что сразу высокоэффективный код будете писать?

.sha- Автор вопроса

Тут дело не в эффективности, а понимании того, как работает код Я как-то спорил с человеком насчёт такого кода: const items = queue; queue.length = 0; processItems(items); Суть спора — может ли что-то асинхронно прилететь между первой и второй строкой, что приведёт к потере данных. Я считаю, что нет, но доказать почему не смог

нет, и глубокое понимание каждой фазы эвент лупа здесь не нужно

в этом и фишка, что доказывание кому-то чего-то и стремление к знанию эт разные вещи)

Реализуй свой цикл

.sha- Автор вопроса

Звучит прикольно, я бы попробовал. А что именно исполнять? Я же не хочу учиться интерпретировать js с нуля

И там и там v8, но libuv только в ноде

запросы по сети обрабатываются наряду с i/o но i/o ранится на threads в то время как ОС сама разбирается с запросами по сети пните если неправильно

.sha- Автор вопроса

Хм. А почему так сложилось? Ведь и там, и там есть event loop.

Язык никак не связан с событийным циклом. Напиши на js свой собственный цикл через yield

Потому что браузер это не единое приложение, js, цикл событий, парсер css, парсер html, рендер html, рендер шрифтов - это всё независимые реализации, а браузер только склеивает всё воедино

.sha- Автор вопроса

Честно говоря, пока не очень представляю, как концептуально это должно выглядеть :С Что же будет исполняться / происходить в моем цикле, если не исполнение кода ?

while (true) { if (tasks.lenght) { // Выполняем нужны код } }

.sha- Автор вопроса

А, ну попробую. То есть симулировать эти очереди таймеров, очередь микротасок, очередь immediate, очередь событий close и попробовать сделать их обработку руками, приняв сами таски за объекты пустышки, т.к. это не важно А причём тут yield?

yield поможет реализовать async await, на колбеках писать это ад

.sha- Автор вопроса

Так стоп, то есть ты предлагаешь все таки брать и исполнять реальный js код, а не какие-то абстрактные объекты из массива tasks в примере выше?

Да, просто не используй все асинхронные абстракции: promise, async, settimeout

.sha- Автор вопроса

Жесть, ну вот я взял строку с js кодом Сначала надо разобрать на ast Потом... разбить на statements/expressions, я даже не знаю, как это делается, и потом как-то это исполнять, и только на этапе исполнения всплывает event loop? Или я не совсем так понял? Это ведь нужно реализовать все конструкции языка, встроенные объекты, и так далее

.sha- Автор вопроса

И все же, Sergey, как можно написать event loop для исполнения реального кода не реализовав весь процесс интерпретации js?

Не нужно тебе парсить js, ты событийный цикл пишешь, а не интегратор js. Пиши на обычном js и исполняй в ноде

Почитай что такое yield и за как работают астериск-функции)

.sha- Автор вопроса

Ну, например, Promise я могу переопределить, чтобы использовать свою кастомную логику. setTimeout тоже могу заменить на свою функцию. Но async-await же операторы, тут я не могу сделать кастомную обработку

.sha- Автор вопроса

У меня проблема не в понимании генераторов, а как написать свой ивент луп

вопрос - зачем?)

.sha- Автор вопроса

В образовательных целях

Тебе не нужно заменять, просто напиши свою реализацию в виде функции и не используй встроенных вещей

.sha- Автор вопроса

Вот пример: fs.readFile(‘path’).then(async contents => await fetch(...)); Цель была исполнить этот код со своим ивент лупом. Каким образом я могу это сделать не переопределив .then, .readFile и fetch?

че за мясо

.sha- Автор вопроса

Обсуждение идёт вообще не про качество кода в этом фрагменте Речь про обработку разных кейсов асинхронных запросов в своей реализации event loop

дай угадаю, ты безработный

А чего ты так решил?

если человек пишет then с async - он троль

Почему?

нуу, спорный момент на самом деле

рекомендую сменить стратегию обучения) вместо запила можно изучить как он работает используя документацию и примеры

.sha- Автор вопроса

Да я-то изучил. Доки libuv ещё не читал, правда. Сама идея реализации своего loop показалась интересной

да, интересных идей много) но кроме интереса стоит и другие факторы оценивать. нет ли чего-то более важного для изучения, нельзя ли без реализации получить понимание работы event loop. понятно, что если времени много можно даже свой комп собрать с нуля

уже видел как челик запустил DOOM на картошке ?)

Может немного поможет habr.com/ru/post/336498/

Это нормальная практика если для результата нужна обработка и не хочется засорять область видимости переменными, которые не пригодятся

лол

ну если время, деньги есть можно их конвертировать в высокий уровень удивительности происходящего) это же очевидно)

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
9
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Карта сайта