170 похожих чатов

Всем доброго дня. Подскажите, блокирует ли event loop вот такой

вот вызов crypto.createHash('sha256').update('data').digest('hex') и, если да, как вычислить хэш асинхронно?

15 ответов

11 просмотров

блокирует. чтобы вычислить хэш асинхронно надо вынести либо вычисление в отдельный воркер, либо написать свой нативный аддон, который будет возвращать промис и не будет блокировать

Любая синхронноя операция блокирует event loop

Предлагаю такой вариант new Promise((res) => { res(crypto.createHash('sha256').update('data').digest('hex')) })

Dmitry- Автор вопроса
wlr986
Предлагаю такой вариант new Promise((res) => { re...

Ну так то ты просто обернул синхронный вызов в промис)

так оно.и делается) Вот еще с таймерами, const crypto = require('crypto') async function func(){ console.log('async'); return crypto.createHash('sha256').update('data').digest('hex') } setTimeout(func,0) console.log('sync')

Dmitry- Автор вопроса
wlr986
так оно.и делается) Вот еще с таймерами, const c...

Встроенный модуль шифрования не имеет встроенных в node.js опций асинхронного хеширования. Поскольку хеширование — это работа исключительно процессора, единственный способ сделать их неблокирующими и асинхронными — использовать нативные потоки в нативном коде, использовать WorkerThread или использовать дочерний процесс. Все эти параметры создают дополнительные накладные расходы, которые, вероятно, обычно не нужны. Но, если это действительно проблема для вас, вы можете запустить WorkerThread, а затем отправить ему строку, хэш которой вам нужен, и он может отправить вам обратно хеш-значение. соре за машинный перевод

wlr986
так оно.и делается) Вот еще с таймерами, const c...

Это всё равно блокирующая функция

wlr986
approve в студию

Эта функция выполняет вычисление синхронно. Результат можно получить асинхронно промисом, но вычисления как были блокирубщими так и остались. Просто получение результата отсрочилось async function func(){ console.log('async'); return crypto.createHash('sha256').update('data').digest('hex') }

Достаточно понимания того, что такое промисы. Они не порождают новый поток. Поэтому синхронная операция завёрнутая в промис точно так же будет блокировать event loop

Алексей Попов
Достаточно понимания того, что такое промисы. Они ...

спасибо, что просветил)) я до сих пор мыслил в рамках однопоточной модели

wlr986
спасибо, что просветил)) я до сих пор мыслил в рам...

Ну так правильно же, для упрощения можно считать что нода однопоточна. Поэтому промисы не порождают новые потоки

получается единственный способ добиться многопоточности это пилить кластер или использовать worker_threads ?

wlr986
получается единственный способ добиться многопоточ...

Кластер это для поднятия нескольких процессов, так же как и child_process Если нужны именно потоки, то это worker_threads

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта