2014-02-15 5 views
3

Я сейчас работаю с Isolates и хочу знать, может ли использование IndexedDB для обмена данными между Isolates - хороший способ общения? В частности, я хочу, чтобы один Изолят мог написать ему, а затем рассказать другим Изолятам, которые они могут прочитать только. Это данные, которые считаются неизменными после их написания и достаточно велики. Основная причина, по которой я хочу это сделать, - это то, что я не хочу отправлять карту 6 МБ в 3 разных Изолята, так как она немного интенсивна в программе.Общая память между изолятами с использованием IndexedDB

ответ

0

Если вы хотите хранить данные в IndexedDB, все равно это нормально. Если вы делаете это только для оптимизации связи, я не думаю, что это улучшение по сравнению с отправкой напрямую. Сериализация/десериализация, как правило, самая интенсивная часть процессора. Использование IndexedDB дополнительно записывает один раз и три раза считывает с/с медленного диска.

+0

Вы не думаете, что будет продолжаться кеширование, чтобы улучшить производительность? Моя основная идея заключается в том, что просто отправка между веб-рабочими означает, что программа должна делать deepCopy на огромном фрагменте данных (карта 6MB в моем случае), прежде чем отправлять его в каждый поток, а просто читать из одной и той же кешированной ссылки. – Salgat

+1

Не думал об этом. Я бы оценил его, чтобы увидеть, что работает лучше. –

2

Работники веб-сайта позволяют передавать массивные буферы между рабочими без копирования. Однако, как только вы передаете буфер массива другому работнику, первоначальный работник теряет доступ к его содержимому.

Таким образом, вы можете попробовать хранить свою структуру данных в буфере массива, чтобы воспользоваться этим.

См. Это mdn article и html5rocks.

Итак, для Dart сохраните свои данные в файле ByteData, а затем, когда скомпилировано через dartjs, это не следует копировать, а переносить.

Замечание: Mozilla также проводит эксперименты с общим изменением доступа к буферам массивов для нескольких веб-работников. Это позволит emscripten скомпилировать многопоточный код c javascript. Такой общий доступ, скорее всего, займет некоторое время, чтобы стандартизировать и широко реализовать.

+0

Я еще не изучал его, но если ссылка потеряна, я не могу отправить те же данные нескольким веб-работникам без копирования? – Salgat

+0

Правильно. Невозможно использовать данные у нескольких веб-работников одновременно, не копируя их. Разве это не async indexedb api, тот, который доступен для работников, в основном просто передача сообщений с данными, хранящимися в одном потоке/изоляторе/работнике, в любом случае, не знаете, почему вы видите indexedb как работу для этого, поскольку это будет иметь те же ограничения, насколько я могу видеть. –

+0

Я надеялся, что только транзакции привели к отправке единственной ссылки на все запрошенные данные. – Salgat

Смежные вопросы