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

Добрый вечер, вопрос к знатокам eventLoop в node.js почему после setImmediate

выполняется моем случае всегда раньше чем стадия i/o ?
сначала я запускаю вызов асинхронных операций, которые будет выполнять node api, дальше я выполняю перебор цикла, который блокирует основной поток, после его выполнения дело переходит в evemtLoop, поток блокируется на 50 секунд, и после этого я получаю таймер или immediate в начале, и всегде в конце коллбек с операции ввода вывода
хотя последовательность в идеале при задержке основного потока должна быть timeout, fs.readFile, immediate
когда прошел рассчет цыкла, за 50 секунд уже все асинхронно должно было быть выполнено, файл без блокирующего цикла вычитывается за 1-2 ms

49 ответов

76 просмотров

Так может просто долго читает файл?

Vitaliy- Автор вопроса
Алексей Попов
Так может просто долго читает файл?

Ну в теории он дольше читает естественно чем setImmediate, но я думал что за 50 секунд пока считает цикл, то паралельно будет вычитан файл , пройдет задержка тайм-аута ииммедейт и все это уже отдаст коллбеки в соответствующие стадии в ивент лупе, а стадия ввода вывода идет раньше чем стадия check в которой immediate

Vitaliy
Ну в теории он дольше читает естественно чем setIm...

Очень надёжный способ синхронизировать выполнение кода, ничего не скажешь (нет)

Vitaliy- Автор вопроса
Feanorx
Очень надёжный способ синхронизировать выполнение ...

Объясните что я делаю не так? Я не совсем понимаю эти тонкости

Vitaliy
Объясните что я делаю не так? Я не совсем понимаю ...

Давай по порядку, что ты хочешь сделать, напиши русским языком

Vitaliy- Автор вопроса
Feanorx
Давай по порядку, что ты хочешь сделать, напиши ру...

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

Vitaliy- Автор вопроса
][_ioN ‏ 😏
https://t.me/nodejs_ru/1018246

Тут некст тик, это ж не туда совсем

это намёк на макро- и микротаски. Вопрос на засыпку: console.xxx - синхронный?

Joe Beretta
В ноде вроде синхронный

https://stackoverflow.com/questions/5127532/is-node-js-console-log-asynchronous

Joe Beretta
В ноде вроде синхронный

Так то это я и так знал, интересно было на каком уровне у них Как пишут в ответах там low level работа с process.std out/err

Joe Beretta
В ноде вроде синхронный

Синхронный для вывода в файл или в терминал и асинхронный для передачи данных/вывода в пайп.

][_ioN ‏ 😏
это намёк на макро- и микротаски. Вопрос на засып...

я бы переформулировал вопрос - блокирующий io или не-

][_ioN ‏ 😏
Синхронный для вывода в файл или в терминал и асин...

То бишь мы можем перед логом прилепить await ?

Aleksandr Vyatkin
я бы переформулировал вопрос - блокирующий io или ...

в данном контексте, да, это более точная формулировка.

][_ioN ‏ 😏
Pino + transoprt + stream = 🔥

Почему пино а винстон

Максим
Почему пино а винстон

Легче (вроде как) + поддержка цветов из коробки.

][_ioN ‏ 😏
Легче (вроде как) + поддержка цветов из коробки.

Пино не с коробки поддерживает, там надо прилепить pino-pretty

Максим
Пино не с коробки поддерживает, там надо прилепить...

🤔 разве? Он же вроде только для форматирования..

][_ioN ‏ 😏
🤔 разве? Он же вроде только для форматирования..

Без pino-pretty мне в консольку выводило объект с данными

Максим
Без pino-pretty мне в консольку выводило объект с ...

Там через FORCE_COLORS='true' или как-то так можно. А так - да, по дефолту просто объект.

Остальными кстати не пользовался никогда

Максим
Остальными кстати не пользовался никогда

trace/debug, log - тоже иногда нужны.. Редко, но бывает.

Vitaliy- Автор вопроса
][_ioN ‏ 😏
это намёк на макро- и микротаски. Вопрос на засып...

Интересный вариант, хорошо, но получается если поток был заблокирован долго значит должно быть выполнение таймер, и/о, иммедиейт, и если логи даже асинхронные и это микротаски, все равно микротаска после и/о будет выполнена, а затем стадия check, так ведь?

Максим
Почему пино а винстон

По замерам, которые я видел года три назад, Винстон был очень печален, а пино бодр

Максим
Каким замерам?

Замерам скорости

Vitaliy
Интересный вариант, хорошо, но получается если пот...

А ответ на мой вопрос будет? Почему в логах отображаются миллисекунды, а ты говоришь о секундах?

Vitaliy- Автор вопроса
Алексей Попов
А ответ на мой вопрос будет? Почему в логах отобра...

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

Vitaliy- Автор вопроса
Vitaliy
Потому что я за компом пока заблокирован поток сиж...

А в логах тогда почему миллисекунды? Поставь логи непосредственно до и после цикла

Vitaliy
Интересный вариант, хорошо, но получается если пот...

У тебя есть setTimeout(1), fs.readFile(2), setImmediate(3) и for(4). Как по-твоему, в каком порядке тут будет выполнен код?

Vitaliy- Автор вопроса

извиняюсь, видимо был какой-то глюк что подвисло выполнение, выполняется за 50 мс с циклом почти мгновенно код

Vitaliy- Автор вопроса
Максим
Каким замерам?

Длины... логов. Шутка

https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick#setimmediate-vs-settimeout

Vitaliy- Автор вопроса

А ты замерял сколько времени занимает непосредственно чтение файла?

Vitaliy
я только оттуда

Тогда уровень два https://stackoverflow.com/questions/47724811/why-setimmediate-execute-before-fs-readfile-in-nodejs-event-loops-works

Feanorx
https://nodejs.org/en/docs/guides/event-loop-timer...

Вопрос в том, почему КБ иммедиэйта исполняется до КБ ридфайла

Vitaliy- Автор вопроса
Vitaliy
screenshot замерял, проблема в том что достаточно быстро

Феникс вроде нашёл ссылку с объяснением

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
11
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Can I forward ports (including the SSH port) between two machines without SSH? I know I can forward SSH server port from machine A (which blocks all requests by firewall) to ...
required optional
5
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
Карта сайта