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

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

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

15 ответов

9 просмотров

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

Любая синхронноя операция блокирует 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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта