выполняется моем случае всегда раньше чем стадия i/o ?
сначала я запускаю вызов асинхронных операций, которые будет выполнять node api, дальше я выполняю перебор цикла, который блокирует основной поток, после его выполнения дело переходит в evemtLoop, поток блокируется на 50 секунд, и после этого я получаю таймер или immediate в начале, и всегде в конце коллбек с операции ввода вывода
хотя последовательность в идеале при задержке основного потока должна быть timeout, fs.readFile, immediate
когда прошел рассчет цыкла, за 50 секунд уже все асинхронно должно было быть выполнено, файл без блокирующего цикла вычитывается за 1-2 ms
Так может просто долго читает файл?
Ну в теории он дольше читает естественно чем setImmediate, но я думал что за 50 секунд пока считает цикл, то паралельно будет вычитан файл , пройдет задержка тайм-аута ииммедейт и все это уже отдаст коллбеки в соответствующие стадии в ивент лупе, а стадия ввода вывода идет раньше чем стадия check в которой immediate
50 секунд или миллисекунд?
Очень надёжный способ синхронизировать выполнение кода, ничего не скажешь (нет)
Объясните что я делаю не так? Я не совсем понимаю эти тонкости
Давай по порядку, что ты хочешь сделать, напиши русским языком
То что при нулевой задержке тайм-аута может выполнится тайм-аут первым, а иммедиейт вторым я понимаю. Добавил операцию ввода вывода, чтобы убедится что я понимаю последовательность выполнения в ивент лупе. Добавил блокировку основного потока чтобы убедится что пока он будет заблокирован асинхронные операции станут в очередь и выполнятся как я ожидаю
https://t.me/nodejs_ru/1018246
Тут некст тик, это ж не туда совсем
это намёк на макро- и микротаски. Вопрос на засыпку: console.xxx - синхронный?
В ноде вроде синхронный
https://stackoverflow.com/questions/5127532/is-node-js-console-log-asynchronous
Так то это я и так знал, интересно было на каком уровне у них Как пишут в ответах там low level работа с process.std out/err
Синхронный для вывода в файл или в терминал и асинхронный для передачи данных/вывода в пайп.
я бы переформулировал вопрос - блокирующий io или не-
То бишь мы можем перед логом прилепить await ?
в данном контексте, да, это более точная формулировка.
Pino + transoprt + stream = 🔥
Почему пино а винстон
Легче (вроде как) + поддержка цветов из коробки.
Пино не с коробки поддерживает, там надо прилепить pino-pretty
🤔 разве? Он же вроде только для форматирования..
Без pino-pretty мне в консольку выводило объект с данными
Там через FORCE_COLORS='true' или как-то так можно. А так - да, по дефолту просто объект.
Остальными кстати не пользовался никогда
trace/debug, log - тоже иногда нужны.. Редко, но бывает.
Интересный вариант, хорошо, но получается если поток был заблокирован долго значит должно быть выполнение таймер, и/о, иммедиейт, и если логи даже асинхронные и это микротаски, все равно микротаска после и/о будет выполнена, а затем стадия check, так ведь?
По замерам, которые я видел года три назад, Винстон был очень печален, а пино бодр
Замерам скорости
А ответ на мой вопрос будет? Почему в логах отображаются миллисекунды, а ты говоришь о секундах?
Потому что я за компом пока заблокирован поток сижу примерно пол минуты, и результатам ни одного коллбека не появляется
Могу видос с курага записать
А в логах тогда почему миллисекунды? Поставь логи непосредственно до и после цикла
У тебя есть setTimeout(1), fs.readFile(2), setImmediate(3) и for(4). Как по-твоему, в каком порядке тут будет выполнен код?
извиняюсь, видимо был какой-то глюк что подвисло выполнение, выполняется за 50 мс с циклом почти мгновенно код
Увеличь цикл раз в 20
Длины... логов. Шутка
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick#setimmediate-vs-settimeout
я только оттуда
А ты замерял сколько времени занимает непосредственно чтение файла?
Тогда уровень два https://stackoverflow.com/questions/47724811/why-setimmediate-execute-before-fs-readfile-in-nodejs-event-loops-works
Вопрос в том, почему КБ иммедиэйта исполняется до КБ ридфайла
замерял, проблема в том что достаточно быстро
Феникс вроде нашёл ссылку с объяснением
Обсуждают сегодня