Size: a a a

2018 January 23

AM

Andrey Melikhov in Node.js SPb
Так всегда. nextTick сработает в конце текущей фазы, а setImmediate в конце текущего тика. Там вообще названия перепутаны
источник

AM

Andrey Melikhov in Node.js SPb
Ща в доках поищу
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
nextTick — в конце текущего тика, но не более 1000 вложенных по умолчанию
setImmediate — в следующий тик
разве не так?

https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
источник

AM

Andrey Melikhov in Node.js SPb
process.nextTick() fires immediately on the same phase
setImmediate() fires on the following iteration or 'tick' of the event loop
источник

AM

Andrey Melikhov in Node.js SPb
In essence, the names should be swapped. process.nextTick() fires more immediately than setImmediate(), but this is an artifact of the past which is unlikely to change.
источник

AM

Andrey Melikhov in Node.js SPb
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
Vitaliy ☆glukki☆ Meshchaninov
да, по спеке — в следующем чем-то..
«Execution of a Job can be initiated only when there is no running execution context and the execution context stack is empty»
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-jobs-and-job-queues

вот только это должен быть следующий цикл ивент-лупа, или может быть конец текущего? process.nextTick() или setImmediate()?
ну я о том и говорю, в следующий тик или в текущий (если достаточно места в очереди)?
источник

AM

Andrey Melikhov in Node.js SPb
Вот этот вопрос мучает меня уже пару дней, надо бы разобраться
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
с одной стороны, есть анализ того, как работают библиотеки и нативные промисы сейчас — https://jsblog.insiderattack.net/promises-next-ticks-and-immediates-nodejs-event-loop-part-3-9226cbe7a6aa

а с другой — есть спекая, которую хочется понять :)
источник

AM

Andrey Melikhov in Node.js SPb
О, спасибо, ща почитаю
источник

AM

Andrey Melikhov in Node.js SPb
Никто не хочет на PiterJS выступить? На февраль есть пустые слоты
источник

VG

Vadim Gorbachev in Node.js SPb
Andrey Melikhov
Никто не хочет на PiterJS выступить? На февраль есть пустые слоты
О!) Подтверждаю) если есть желание - пишите. Ждём.
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
Vitaliy ☆glukki☆ Meshchaninov
с одной стороны, есть анализ того, как работают библиотеки и нативные промисы сейчас — https://jsblog.insiderattack.net/promises-next-ticks-and-immediates-nodejs-event-loop-part-3-9226cbe7a6aa

а с другой — есть спекая, которую хочется понять :)
в конце статьи интересное: «libraries internally queue resolved/rejected promise callbacks in a data structure and use either process.nextTick or setImmediate to process the queue» — это приводит к несколько неожиданному поведению библиотеки Q

и в итоге все оказывается выполненным в текущий цикл :(

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

AM

Andrey Melikhov in Node.js SPb
Можно представить, что setImmediate переносит в начало следующего цикла, до чека таймеров 😄
источник

AM

Andrey Melikhov in Node.js SPb
Vitaliy ☆glukki☆ Meshchaninov
nextTick — в конце текущего тика, но не более 1000 вложенных по умолчанию
setImmediate — в следующий тик
разве не так?

https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
Кстати, вроде в nextTick вообще нет ограничений на вложенность коллбеков и можно зафризить ивент луп дико
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
Andrey Melikhov
Кстати, вроде в nextTick вообще нет ограничений на вложенность коллбеков и можно зафризить ивент луп дико
на вложенные вызовы лимит глубины — 1000 за тик, остальные будут перенесены на следующий тик. вот о такой вложенности идет речь: process.nextTick(() => process.nextTick(…))

но вроде нет лимита на то, сколько будет исполнено в текущий тик таких вызовов, что установлены на одном уровне вложенности: Array(2000).map(() => process.nextTick(…))
источник

AM

Andrey Melikhov in Node.js SPb
я вот об этом "To achieve this, the JS call stack is allowed to unwind then immediately execute the provided callback which allows a person to make recursive calls to process.nextTick() without reaching a RangeError: Maximum call stack size exceeded from v8."
источник

AM

Andrey Melikhov in Node.js SPb
всё что он получил — он размотает до конца
источник

AM

Andrey Melikhov in Node.js SPb
мы так в проде ложили ноду )
источник

V☆

Vitaliy ☆glukki☆ Meshchaninov in Node.js SPb
размотать получится максимум на 1000 вызовов process.nextTick() за цикл ивентлупа
источник