Я сейчас работаю с Isolates и хочу знать, может ли использование IndexedDB для обмена данными между Isolates - хороший способ общения? В частности, я хочу, чтобы один Изолят мог написать ему, а затем рассказать другим Изолятам, которые они могут прочитать только. Это данные, которые считаются неизменными после их написания и достаточно велики. Основная причина, по которой я хочу это сделать, - это то, что я не хочу отправлять карту 6 МБ в 3 разных Изолята, так как она немного интенсивна в программе.Общая память между изолятами с использованием IndexedDB
ответ
Если вы хотите хранить данные в IndexedDB, все равно это нормально. Если вы делаете это только для оптимизации связи, я не думаю, что это улучшение по сравнению с отправкой напрямую. Сериализация/десериализация, как правило, самая интенсивная часть процессора. Использование IndexedDB дополнительно записывает один раз и три раза считывает с/с медленного диска.
Работники веб-сайта позволяют передавать массивные буферы между рабочими без копирования. Однако, как только вы передаете буфер массива другому работнику, первоначальный работник теряет доступ к его содержимому.
Таким образом, вы можете попробовать хранить свою структуру данных в буфере массива, чтобы воспользоваться этим.
См. Это mdn article и html5rocks.
Итак, для Dart сохраните свои данные в файле ByteData, а затем, когда скомпилировано через dartjs, это не следует копировать, а переносить.
Замечание: Mozilla также проводит эксперименты с общим изменением доступа к буферам массивов для нескольких веб-работников. Это позволит emscripten скомпилировать многопоточный код c javascript. Такой общий доступ, скорее всего, займет некоторое время, чтобы стандартизировать и широко реализовать.
Я еще не изучал его, но если ссылка потеряна, я не могу отправить те же данные нескольким веб-работникам без копирования? – Salgat
Правильно. Невозможно использовать данные у нескольких веб-работников одновременно, не копируя их. Разве это не async indexedb api, тот, который доступен для работников, в основном просто передача сообщений с данными, хранящимися в одном потоке/изоляторе/работнике, в любом случае, не знаете, почему вы видите indexedb как работу для этого, поскольку это будет иметь те же ограничения, насколько я могу видеть. –
Я надеялся, что только транзакции привели к отправке единственной ссылки на все запрошенные данные. – Salgat
- 1. Общая память между потоками
- 2. Общая память между процессами python
- 3. , где распределяется общая память?
- 4. Одиночная ценность Общая память/свободная память Свободная память/общая память
- 5. Общая память с докером
- 6. POSIX Общая память
- 7. Общая память между C++ и JS-программой
- 8. общая память не используется между процессами
- 9. Общая память между PHP и QT
- 10. Общая память и связь между программами
- 11. Java Параллелизм: Общая память между потоками
- 12. Общая память между двумя процессами (приложениями)
- 13. Общая память с массивом структур
- 14. electronic.atom.io и общая память
- 15. Постоянная общая память GPU
- 16. Общая память для fork
- 17. Форки и общая память
- 18. Общая память - матричное отображение
- 19. Общая память в mpi4py
- 20. Как работает общая память CICS?
- 21. mod_fcgi + APC + Общая память
- 22. Передача данных и общая память
- 23. CUDA общая память проблемы понимания
- 24. Общая память с раздвоенным ребенком
- 25. Jetson Tegra TX1 Общая память
- 26. Общая память устройства UWP
- 27. Общая память + каталоги POSIX
- 28. Python - многопроцессорная и общая память
- 29. Общая память Segv
- 30. cuda общая память перезаписывается?
Вы не думаете, что будет продолжаться кеширование, чтобы улучшить производительность? Моя основная идея заключается в том, что просто отправка между веб-рабочими означает, что программа должна делать deepCopy на огромном фрагменте данных (карта 6MB в моем случае), прежде чем отправлять его в каждый поток, а просто читать из одной и той же кешированной ссылки. – Salgat
Не думал об этом. Я бы оценил его, чтобы увидеть, что работает лучше. –