Алдар
Кличко не туп, он последователь Черномырдина
Kirill
Алдар
Dima
А множество процессов и множество потоков - в чем разница?
Kirill
го говно!
я выше уже об этом говорил, уже давно. формулировка была примерно "если ты -- замена удобрений".
Aleksei
Кличко не туп, он последователь Черномырдина
Ну да. Он окрасил себя в те цвета, в которые он окрасил себя. А все потому, что сегодня в завтрашний день не все могут смотреть, точнее могут не только лишь все, мало кто может это делать.
Dima
ведь в nodeJS можно делать новые процессы
Kirill
Anonymous
Anonymous
нативные модули пускаются в тредах
Kirill
Алдар
Dima
Dima
Anonymous
количество их можно задать через UV_THREADPOOL_SIZE
Anonymous
ну то есть хттп-реквесты, например, выполняются в тредах (их 4 по дефолту), а сам джаваскрипт в одном другом треде
Anonymous
есть cluster, им можно форкать процессы в ноде
Dima
Алексей
Господа, я сейчас веду диспут в вк. Дайте совет есть ли в node JS полноценные threads?
Асинхронность, Promise, async/await - это почти тоже самое, что и потоки, только переключение происходит в предсказуемых местах, а не посреди выполнения абсолютно любой машинной инструкции. Следовательно проблемы синхронизации, дедлоков и гонок полностью исчезают. Такая модель удобна для подавляющего большенства практических задач за исключением выполнения длительных и тяжёлых вычислений, нагружающих CPU. Если вы проводите такие вычисления на NodeJS, то вы скорее всего куда-то не туда повернули в своей жизни. Если вы уверены в своей правоте и хотите дробить числа и перемножать матрицы именно на NodeJS, то лучше всё-таки вынести всё это дело в отдельный процесс.
kalloc
Асинхронность, Promise, async/await - это почти тоже самое, что и потоки, только переключение происходит в предсказуемых местах, а не посреди выполнения абсолютно любой машинной инструкции. Следовательно проблемы синхронизации, дедлоков и гонок полностью исчезают. Такая модель удобна для подавляющего большенства практических задач за исключением выполнения длительных и тяжёлых вычислений, нагружающих CPU. Если вы проводите такие вычисления на NodeJS, то вы скорее всего куда-то не туда повернули в своей жизни. Если вы уверены в своей правоте и хотите дробить числа и перемножать матрицы именно на NodeJS, то лучше всё-таки вынести всё это дело в отдельный процесс.
потоки позволяют выполнять код на разных ядрах, асинхронность в v8 — нет
Roman
Anonymous
Как можно сделать элемент прозрачным для ивентов? Что-то вроде аналога pointer-events: none, но в жс.
Konstantin
bubbles event?
Anonymous
Хм. Погружение может и поможет...
Мне надо получить элемент, который находится под абсолютно спозиционированным блоком. В нормальных условиях таргетом является этот верхний элемент и мне надо, чтобы он был прозрачным для ивентов...
Konstantin
https://javascript.info/tutorial/bubbling-and-capturing
hlomzik
Dima
Dima
Dima
Oleg
Зависание будет
Oleg
Всего
Oleg
JS движки все, как минимум из популярных, исполняют непосредственно JS в одном потоке
Oleg
А асинхронность это просто такая крутая архитектура, позволяющая делать вычисления в то время когда что-то где-то происходит и это никак невозможно ускорить силами приложения
Oleg
Например путешествие пакета запроса по проводам интернета
Oleg
Но минус этого подхода в том что если где-то сложные тяжелые вычисления встретились - ничего не будет обработано до окончания их вычислений
Oleg
Правда для этого тоже есть решение
Oleg
И даже бесконечный цикл нам не проблема
Oleg
Если мы итерации вычисления будем резать на части
Oleg
Используя либо setTimeout с 0 миллисекунд ожидания, либо process.nextTick для ноды
Oleg
В итоге какой бы не был бы сложный процесс вычислений, да хоть бесконечный цикл, у нас будет оставаться вычислительное время чтобы поработать с другими вызовами программы
Oleg
Ну и ещё решается проблема всех параллельных вычислений - гонка потоков
Oleg
В асинхронной модели её просто нет
Oleg
За исключением, конечно, когда что-то извне имеет эту проблему
Oleg
И общается с нами асинхронно
Oleg
Так или иначе асинхронное исполнение кода - одно из тех великих штук что были когда-либо изобретены
Oleg
Ну а если прям совсем не влезает в одно ядро, а невлезать оно может только если в рамках одного процесса нужно что-то там сложное посчитать и у нас нет расшаренной БД, нужно хранить стейт в переменный и прочее такое - то тогда да, увы, нужно резать алгоритм на части и параллелить его руками между инстансами ноды по одному кусочку на каждое ядро. Или делать конвеер с обменом. Всё зависит от алгоритма. Но если оно так - либо сервер слабоват выбран, либо нода уже не подходит для этой задачи.
Konstantin
есть функция, внутри функции асинхронный ajax-вызов... по success происходит рекурсивный вызов этой же функции с таймаутом
Konstantin
нормальная практика или быдлокод?
Konstantin
цель - выводить статистику в реальном времени
Stepan
Нормально
Oleg
Нет
Stepan
Почему?
Oleg
Примерно через 10000, в зависимости от настроек, приложение упадет
Konstantin
не падает, работает непрерывно сутками
Oleg
Переполнится стек
Konstantin
и утечек нет
Oleg
Значит не совсем рекурсия там
Oleg
А, с таймаутом то
Oleg
Тогда не рекурсия
Oleg
И поэтому работает
Konstantin
почему не рекурсия? вызов функции из самой себя
Oleg
Вызов функции из таймаута
Oleg
😊
Konstantin
а
Oleg
А таймаут в 0?
Oleg
Или значение?
Oleg
А если значение, то почему?
Konstantin
значение
Konstantin
там высчитывается время выполнения запроса чтобы данные менялись раз в секунду в браузере
Oleg
Тогда ок
Константин
а если будет 0, то что?
Oleg
То тогда имеет смысл юзать process.nextTick, если нода, оное лучше почистит память
Константин
а что с памятью будет?не до конца понимаю
Oleg
Сборщик мусора лучше уберет мусор т.к. это почти явный его вызов, при этом оное эквивалентно тому что будет если вызвать setTimeout с 0
Oleg
Сборщик мусора старается работать тогда когда нет процесса вычислений, а функция из сеттаймаута будет вызвана когда этих вычислений не будет и можно посмотреть а что там в очереди накопилось, в той куда попадает всё что указано в сеттаймаут, сетинтервал и прочее. И вот между окончанием очередной итерации вычислений и проверкой очереди на то пришло ли время - уборщик мусора может зачистить лишнее, ну и всякие там служебные вычисления.
Oleg
Сеттаймаут правда не совсем после завершения итерации работает, там ещё рендеринг может подождать и только у ИЕ был метод что вызывает вычисления до рендеринга
Константин
про последнее знал, за остальное спасибо)
Oleg
👍
hlomzik
setImmediate еще есть