Алдар
Кличко не туп, он последователь Черномырдина
Алдар
Dima
А множество процессов и множество потоков - в чем разница?
Kirill
го говно!
я выше уже об этом говорил, уже давно. формулировка была примерно "если ты -- замена удобрений".
Aleksei
Кличко не туп, он последователь Черномырдина
Ну да. Он окрасил себя в те цвета, в которые он окрасил себя. А все потому, что сегодня в завтрашний день не все могут смотреть, точнее могут не только лишь все, мало кто может это делать.
Dima
ведь в nodeJS можно делать новые процессы
Kirill
А множество процессов и множество потоков - в чем разница?
in-process ресурсы в прямой доступности, если это потоки
Anonymous
нативные модули пускаются в тредах
Dima
in-process ресурсы в прямой доступности, если это потоки
т.е. между двумя потоками обмен данными значительно проще, чем между двумя процессами
Алдар
т.е. между двумя потоками обмен данными значительно проще, чем между двумя процессами
процесс имеет свое адресное пространство, а поток не имеет
Anonymous
количество их можно задать через UV_THREADPOOL_SIZE
Anonymous
ну то есть хттп-реквесты, например, выполняются в тредах (их 4 по дефолту), а сам джаваскрипт в одном другом треде
Anonymous
есть cluster, им можно форкать процессы в ноде
Dima
есть cluster, им можно форкать процессы в ноде
спасибо за развернутый ответ
Алексей
Господа, я сейчас веду диспут в вк. Дайте совет есть ли в node JS полноценные threads?
Асинхронность, Promise, async/await - это почти тоже самое, что и потоки, только переключение происходит в предсказуемых местах, а не посреди выполнения абсолютно любой машинной инструкции. Следовательно проблемы синхронизации, дедлоков и гонок полностью исчезают. Такая модель удобна для подавляющего большенства практических задач за исключением выполнения длительных и тяжёлых вычислений, нагружающих CPU. Если вы проводите такие вычисления на NodeJS, то вы скорее всего куда-то не туда повернули в своей жизни. Если вы уверены в своей правоте и хотите дробить числа и перемножать матрицы именно на NodeJS, то лучше всё-таки вынести всё это дело в отдельный процесс.
Anonymous
Как можно сделать элемент прозрачным для ивентов? Что-то вроде аналога pointer-events: none, но в жс.
Konstantin
bubbles event?
Anonymous
Хм. Погружение может и поможет... Мне надо получить элемент, который находится под абсолютно спозиционированным блоком. В нормальных условиях таргетом является этот верхний элемент и мне надо, чтобы он был прозрачным для ивентов...
Konstantin
https://javascript.info/tutorial/bubbling-and-capturing
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 еще есть