Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 August 24

AZ

Alexander Zakharov in NodeUA - JavaScript and Node.js in Ukraine
Alex Kostyniuk
Там 4(а можно кастомить, до 128 вроде) треда.
До 1024 но работает не всегда. Например на виртуальной машине, в клауде, в докере может не работать
источник

AK

Alex Kostyniuk in NodeUA - JavaScript and Node.js in Ukraine
Alexander Zakharov
До 1024 но работает не всегда. Например на виртуальной машине, в клауде, в докере может не работать
Даже так 👍
источник

AZ

Alexander Zakharov in NodeUA - JavaScript and Node.js in Ukraine
Alex Kostyniuk
Даже так 👍
источник

AS

Anton StebeLski in NodeUA - JavaScript and Node.js in Ukraine
Alexander Zakharov
Ну вот у тебя 10 чтений файлов, а потоков 4. Сколько будет итераций? Простая математика.
то есть это в три итерации только навесятся лисенеры на все промисы?
источник

AZ

Alexander Zakharov in NodeUA - JavaScript and Node.js in Ukraine
Anton StebeLski
то есть это в три итерации только навесятся лисенеры на все промисы?
Навесятся сразу, а разгребутся (получат ивент done) через 3 итерации
источник

AS

Anton StebeLski in NodeUA - JavaScript and Node.js in Ukraine
Alexander Zakharov
Навесятся сразу, а разгребутся (получат ивент done) через 3 итерации
🤔
буду благодарен, если распишешь пошагово, что происходит после вызова интерфейса Promise.all

можно на примере: в Promise.all массив из 10 проммисов
источник

AZ

Alexander Zakharov in NodeUA - JavaScript and Node.js in Ukraine
источник

¿

¿hope in NodeUA - JavaScript and Node.js in Ukraine
Anton StebeLski
🤔
буду благодарен, если распишешь пошагово, что происходит после вызова интерфейса Promise.all

можно на примере: в Promise.all массив из 10 проммисов
Промисы попадают в очередь микротасков, цикл событий выходит из фазы и V8 разгребает микротаски, в каждом из котором находится вызов асинхронного I/O, колбек которого откладывается до следующей итерации, где они будут вызваны, в случае получения данных от системы, во второй фазе.
Вроде так, сегодня сам разбирался с этим, поэтому если не прав, то надеюсь поправят.
источник

VS

Valentyn Stepovenko in NodeUA - JavaScript and Node.js in Ukraine
1
я чуть  с ума не сошел пока изучал нодовский ивентлуп. в итоге один тип на тостере мне все разжевал, но я один черт через месяц все забыл. решил что потом повторю при необходимости
https://youtu.be/qZ5xzkEdkhg смотреть с 1 часа 43 минуты, не благодари
источник

1

1 in NodeUA - JavaScript and Node.js in Ukraine
Valentyn Stepovenko
https://youtu.be/qZ5xzkEdkhg смотреть с 1 часа 43 минуты, не благодари
сохраню к себе . потом как-нибудь посмотрю , если опять начнуться проблемы с асинхронщиной
источник
2020 August 25

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
¿hope
Промисы попадают в очередь микротасков, цикл событий выходит из фазы и V8 разгребает микротаски, в каждом из котором находится вызов асинхронного I/O, колбек которого откладывается до следующей итерации, где они будут вызваны, в случае получения данных от системы, во второй фазе.
Вроде так, сегодня сам разбирался с этим, поэтому если не прав, то надеюсь поправят.
почти всё так, дополнение только вот, это API
https://nodejs.org/dist/latest-v12.x/docs/api/globals.html#globals_queuemicrotask_callback
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Вопрос, я постгрес на убунту без pg-connection-string (https://github.com/iceddev/pg-connection-string) не подключу? потому что у меня пока что не получилось
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
went out
почти всё так, дополнение только вот, это API
https://nodejs.org/dist/latest-v12.x/docs/api/globals.html#globals_queuemicrotask_callback
Оно же на MDN
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask

Т.е., это в общем-то сам движок V8
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
went out
Оно же на MDN
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask

Т.е., это в общем-то сам движок V8
источник

AK

Alex Kostyniuk in NodeUA - JavaScript and Node.js in Ukraine
went out
Оно же на MDN
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask

Т.е., это в общем-то сам движок V8
У v8 свой ивентлуп, у libuv - свой. Я не уверен, что в исполнении именно ноды как-то используется ивентлуп v8
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
Alex Kostyniuk
У v8 свой ивентлуп, у libuv - свой. Я не уверен, что в исполнении именно ноды как-то используется ивентлуп v8
В V8 нет EventLoop, JS Cинхронный, за исключением очереди микротасок. Всё остальное — обёртки над одним единственным синхронным потоком, т.е. API прокинутые внутрь и выставленные наружу. Один из возможных вариантов работы "НАД" этим API является: EventLoop, который выполняет роль "диспетчера" — что и когда вызывать. Т.е. концептуально это примерно то же самое, что и система прерываний BIOS, отличия в деталях, но не в принципе работы )
источник

AK

Alex Kostyniuk in NodeUA - JavaScript and Node.js in Ukraine
went out
В V8 нет EventLoop, JS Cинхронный, за исключением очереди микротасок. Всё остальное — обёртки над одним единственным синхронным потоком, т.е. API прокинутые внутрь и выставленные наружу. Один из возможных вариантов работы "НАД" этим API является: EventLoop, который выполняет роль "диспетчера" — что и когда вызывать. Т.е. концептуально это примерно то же самое, что и система прерываний BIOS, отличия в деталях, но не в принципе работы )
Опять же спорно, кто-то говорит, что в v8 есть свой ивентлуп, как тут:
https://youtu.be/qZ5xzkEdkhg

Тут мнения разошлись:
https://www.google.com.ua/amp/s/amp.reddit.com/r/node/comments/cluorc/what_are_the_differences_between_nodes_event_loop/
источник

AK

Alex Kostyniuk in NodeUA - JavaScript and Node.js in Ukraine
went out
В V8 нет EventLoop, JS Cинхронный, за исключением очереди микротасок. Всё остальное — обёртки над одним единственным синхронным потоком, т.е. API прокинутые внутрь и выставленные наружу. Один из возможных вариантов работы "НАД" этим API является: EventLoop, который выполняет роль "диспетчера" — что и когда вызывать. Т.е. концептуально это примерно то же самое, что и система прерываний BIOS, отличия в деталях, но не в принципе работы )
Но я теперь таки склоняюсь, что там есть event loop, но у браузера и ноды свои реализации
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
Alex Kostyniuk
Опять же спорно, кто-то говорит, что в v8 есть свой ивентлуп, как тут:
https://youtu.be/qZ5xzkEdkhg

Тут мнения разошлись:
https://www.google.com.ua/amp/s/amp.reddit.com/r/node/comments/cluorc/what_are_the_differences_between_nodes_event_loop/
преувеличения

на видео просто подмена понятий, для упрощения понимания, т.к. иначе будет долго

на форуме чел вообще не в теме.

V8 просто исполняет сериализованный JS

синхронно

Очередь заданий — микротаски — потому, что никак без очереди. Да и надо было делать обёртки для асинхронщинщины, внутри самого V8, потому, что промисы иначе очень сильно больно бьют по производительности. Сначала они были на стороне JS, теперь большей частью ушли в C++ код. Но полифиллы для скорости разработки по прежнему пишутся в JS части, потом "уходят" в C++. Там долго это всё, т.к. проект очень большой )

Да, соответственно в самом V8 есть очень много конструкций на JS. Выглядит как очень простой JS. И, он потом компилится в итоговый сам "движок". В основном это куча полифиллов, которые проще написать на JS, чем на C++

Что касается самого EventLoop — что в браузере, что в Node.js — это в оснвном JavaScript код.

Конечно же речь лишь о Chrome-подобных браузерах, т.е. на движке V8. Не думаю, что Firefox или Safari сильно отличаются, но местами вполне возможны какие-то вещи "неприлично" иные, но совместимые.

Но, при этом вся работа с асинхронными C++ кодом и его API делается через обёртки (wraper), которые "прокинуты" как методы или классы "внутрь" JS. Т.е., доступны, например, из глобальной области видимости. В window — это практически любая асинхронщина: .setTimeout, .setInterval, .fetch, .requestAnimationFrame и т.п. В Node.js — это тоже любое асинхронное API, то есть практически все подсистемы. Единственное, что предоставляется V8 "из коробки" — очередь микротасок.

Сами же микротаски выполняются на каждой фазе EventLoop, до полного drain их очереди. Почему так — потому, что на каждой фазе можно создать Promise. При этом отслеживается так же, что в этой очереди микротасок есть что делать именно сейчас, т.е., производится выполнение всего синхронного кода, но весь асинхронный код уходит на следующие фазы. И, соответственно, будет обработан позже.

https://www.microsoft.com/en-us/research/wp-content/uploads/2017/08/NodeAsyncContext.pdf

или, почти такая же:

https://www.microsoft.com/en-us/research/wp-content/uploads/2017/08/asyncNodeSemantics.pdf
источник

wo

went out in NodeUA - JavaScript and Node.js in Ukraine
went out
преувеличения

на видео просто подмена понятий, для упрощения понимания, т.к. иначе будет долго

на форуме чел вообще не в теме.

V8 просто исполняет сериализованный JS

синхронно

Очередь заданий — микротаски — потому, что никак без очереди. Да и надо было делать обёртки для асинхронщинщины, внутри самого V8, потому, что промисы иначе очень сильно больно бьют по производительности. Сначала они были на стороне JS, теперь большей частью ушли в C++ код. Но полифиллы для скорости разработки по прежнему пишутся в JS части, потом "уходят" в C++. Там долго это всё, т.к. проект очень большой )

Да, соответственно в самом V8 есть очень много конструкций на JS. Выглядит как очень простой JS. И, он потом компилится в итоговый сам "движок". В основном это куча полифиллов, которые проще написать на JS, чем на C++

Что касается самого EventLoop — что в браузере, что в Node.js — это в оснвном JavaScript код.

Конечно же речь лишь о Chrome-подобных браузерах, т.е. на движке V8. Не думаю, что Firefox или Safari сильно отличаются, но местами вполне возможны какие-то вещи "неприлично" иные, но совместимые.

Но, при этом вся работа с асинхронными C++ кодом и его API делается через обёртки (wraper), которые "прокинуты" как методы или классы "внутрь" JS. Т.е., доступны, например, из глобальной области видимости. В window — это практически любая асинхронщина: .setTimeout, .setInterval, .fetch, .requestAnimationFrame и т.п. В Node.js — это тоже любое асинхронное API, то есть практически все подсистемы. Единственное, что предоставляется V8 "из коробки" — очередь микротасок.

Сами же микротаски выполняются на каждой фазе EventLoop, до полного drain их очереди. Почему так — потому, что на каждой фазе можно создать Promise. При этом отслеживается так же, что в этой очереди микротасок есть что делать именно сейчас, т.е., производится выполнение всего синхронного кода, но весь асинхронный код уходит на следующие фазы. И, соответственно, будет обработан позже.

https://www.microsoft.com/en-us/research/wp-content/uploads/2017/08/NodeAsyncContext.pdf

или, почти такая же:

https://www.microsoft.com/en-us/research/wp-content/uploads/2017/08/asyncNodeSemantics.pdf
Всё это мутное объяснение выше станет намного проще, если тут поискать реализацию метода nextTick:

https://github.com/nodejs/node/blob/master/lib/internal/process/task_queues.js
источник