Я хочу написать функцию, которая будет вызываться следующим образом:
send("message","address");
Где какой-то другой поток, который делает
let k = recv("address");
println!("{}",k);
видит message
.
В частности, сообщение может быть большим, и поэтому мне нужна семантика "переместить" или "ноль-копировать" для отправки сообщения.
В C решение выглядит примерно так:
- Размещать сообщения в куче
- Иметь глобальную поточно-ориентированную хеш-карту, которая сопоставляет «адрес» с некоторой ячейкой памяти.
- Записывайте указатели в ячейку памяти при отправке и пробуждайте получателя с помощью семафора.
- Считайте указатели из области памяти при получении и подождите, пока семафор обработает новые сообщения.
Но, согласно другому вопросу SO, шаг № 2 "звучит как плохая идея а>". Так что я хотел бы увидеть более идиоматический подход к этой проблеме.