предположим, я создаю новый локальный процесс в приложении erlang и хочу отправить ему большое сообщение.
-module(chain_hello).
start(N, Some_big_data)->
Pid1 = spawn(chain_hello, some_fun, [N]),
Pid1 ! Some_big_data,
io:format("done \n").
несмотря на Some_big_data
- это ссылка на действительно большие данные (например, содержимое файла) - копируется ли при отправке? Есть большие штрафы за производительность?
Обычно я бы использовал какой-нибудь потокобезопасный общий объект (и / или мьютекс). Есть ли какое-либо решение в Erlang, чтобы избежать копирования содержимого сообщения?
ДОБАВЛЕНО:
Интересен случай, когда Some_big_data представляет собой структурированный контент, а именно: карту, на которой я могу выполнять некоторые операции.
ДОБАВЛЕНО2
Хорошо, я вижу, что нет такого решения для Erlang (разделение некоторых структурированных данных, таких как map в рабочем процессе) - из-за дизайна Erlang. Но я думаю, что это оправдано солидной работой и легким совпадением управления.