Я рассматриваю решение проблемы с использованием эликсира, главным образом из-за способности порождать большое количество процессов дешево.Может ли Elixir/Erlang скопировать процесс, включая его память?
В моем сценарии я хотел бы создать несколько «оригинальных» процессов, которые загружают определенные, неизменяемые данные в память, а затем делают копии этих процессов по мере необходимости. Копии будут использовать одни и те же базовые данные, но с ними будут выполняться разные задачи только для чтения; например, представьте, что в одном «оригинале» есть текст «Война и мир» в памяти, и каждая копия этого оригинала делает другой анализ в тексте.
Мои вопросы:
- Можно скопировать существующий процесс, содержимое памяти и все, в эликсира/Эрланг VM?
- Если да, то каждая копия потребляет столько же памяти, сколько и оригинал, или же они могут совместно использовать память, так как процессы Unix выполняют стратегию «копировать на запись»? (И в этом случае не будет никакой последующей операции записи.)
Процессы не делят, а точнее, очень ограниченные конкретные типы данных. Большие двоичные файлы совместно используются. – rvirding
Думаю, я, возможно, задал неправильный вопрос. Оглядываясь назад, я действительно хотел спросить: «Могу ли я загружать или создавать некоторые данные только для чтения, создавать множество процессов и использовать их все?» Ответ - да. Например, данные могут быть сохранены в атрибуте модуля или элементе модуля Elixir во время компиляции с использованием макроса, а порожденные процессы могут вызвать функцию или получить доступ к атрибуту во время выполнения. –