Потоковая передача данных в V8 / из V8 - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть приложение C ++ со встроенным ядром V8, и я хочу использовать V8 для гибкого преобразования данных с помощью Javascript. Объем данных потенциально велик и поступает из разных форматов файлов, поэтому он обрабатывается по одной записи за раз. Как я могу сделать данные доступными для V8 по одной записи за раз?

2 варианта, о которых я думаю, - это сделать поток записей C ++ доступным через Accessors как javascript объекты - но я не не знаю, как вернуть ArrayBuffer из объекта C ++.

Другой вариант, о котором я думал, - это создание с каждой новой записью нового ArrayBuffer с использованием API v8 и привязка его к одной и той же глобальной переменной - так что сценарии могут получить к нему доступ.

Каков наилучший / наиболее эффективный способ потоковой передачи данных в / из?

1 Ответ

0 голосов
/ 29 апреля 2020

Это действительно зависит, есть так много опций ...

Вы можете иметь один долговременный (Shared) ArrayBuffer, совместно используемый между JavaScript и вашим вложением, плюс некоторый механизм уведомлений. Таким образом, вы даже можете получить параллелизм: код JavaScript может выполняться в одном потоке, а остальная часть встраиваемого устройства - в другом, и вы можете использовать Atomics для подачи сигнала «пожалуйста, посмотрите на индексы массива от x до y сейчас», «хорошо, результаты в x через y готовы ", et c. По крайней мере, при определенных допущениях это может оказаться подходом с наивысшей производительностью.

Вы также можете использовать свой код JavaScript так, чтобы у вас просто была функция, которая вызывается один раз для каждой записи и возвращает результат. Это, вероятно, самый простой подход, и вполне может быть достаточно быстрым.

...