Как создать объект V8 в другом потоке, а затем скопировать его обратно в область nodejs?

Мне нужно разобрать очень длинный текст JSON в объект JSON. Я попытался измерить время выполнения с помощью следующего кода.

var t = process.hrtime()
JSON.parse(jsonStr);
t = process.hrtime(t);

Это занимает около 0,5 миллисекунды, что довольно много. поскольку nodejs является однопоточным для своего двигателя V8, если эта операция настолько тяжелая и частая, это сильно повлияет на пропускную способность.

Поэтому я планирую написать асинхронный JSON.parse на C в качестве собственного дополнения NodeJS, используя uv_queue_work, чтобы тяжелая операция выполнялась в другом потоке, используя многоядерность и избегая основного цикла nodejs.

Проблема в том, что объект V8 в nodeJS не может быть доступен из другого потока, кроме основного потока.

Есть ли способ проанализировать текст и создать объект V8 в другом потоке, а затем скопировать новый созданный объект V8 в основной поток?

Br


person Mr.Wang from Next Door    schedule 13.02.2014    source источник
comment
Я также думал об этой проблеме, я попытался реализовать асинхронный парсер json в JavaScript ( "nofollow noreferrer">github.com/micnic/simpleS/blob/ ), но производительность относительно нативного JSON.parse довольно низкая. Надеюсь, вам повезет больше с нативным аддоном.   -  person micnic    schedule 13.02.2014


Ответы (1)


Есть ли способ проанализировать текст и создать объект V8 в другом потоке, а затем скопировать новый созданный объект V8 в основной поток?

Нет хорошего способа сделать это.

Если вы хотите использовать все ядра, лучше создать несколько процессов node.js с использованием модуля cluster и позволить каждому из них обрабатывать разные запросы.

person alex    schedule 13.02.2014