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

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

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

49 ответов

138 просмотров

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

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 мс с циклом почти мгновенно код

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

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

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 замерял, проблема в том что достаточно быстро

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Oh sorry did you want it in Gunter's chains?
Martin Rys
15
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта