Мне нужно создать концепцию для обмена данными между двумя компьютерами с использованием разделяемой памяти или концепций программирования сокетов tcp. Как я могу это сделать? Возможно ли реализовать разделяемую память в архитектуре клиентского сервера? Как мне это сделать?Общайтесь с двумя компьютерами, используя общую память?
ответ
Вы не можете связываться между двумя компьютерами с использованием общей памяти, поскольку они не используют память.
Вы должны использовать сокеты TCP.
Я думаю, а не разделяемая память, то, что вы ищете, более правильно называется чем-то вроде «отражающей памяти».
С отражающей памятью каждый компьютер в сети владеет блоком памяти. Каждый блок накачивается вокруг шины между всеми компьютерами с высокой скоростью. Каждый компьютер получает копию памяти со всех других компьютеров для чтения, но обычно может писать только в свою собственную память.
Таким образом, каждый компьютер может «видеть» состояние памяти на каждом другом компьютере. Как правило, вы видите такую архитектуру в промышленных системах управления, которые распределяют контроль над физически отдельными машинами и хотят видеть общее состояние почти в режиме реального времени.
Что касается построения системы, то вы можете начать с UDP-пакетов, которые просто вызывают состояние локального компьютера, и все остальные компьютеры будут считывать эти данные.
Снежный ответ: «вы не можете этого сделать, потому что компьютеры не обмениваются памятью», просто неправильно. Процессоры на одном компьютере не обмениваются памятью, аппаратное и программное обеспечение реализует протоколы общей памяти, чтобы обеспечить иллюзию разделяемой памяти.
Общие протоколы памяти на разных процессорах очень похожи на протоколы разделяемой памяти на разных компьютерах, и та же проблема.
Поиск «распределенного кеша» «кортеж пространства» и "distributed shared memory" он может обеспечить некоторую пищу для размышлений. memcached - очень популярный продукт с открытым исходным кодом, на который вы можете взглянуть.
EDIT: Что касается комментария о «кеш-когерентной архитектуре». Каждый процессор имеет свой собственный локальный кэш памяти (например, кэш L1). Существует целая куча «материала», которая делает этот «кеш-когерентный» таким образом, что каждый процессор считывает и записывает в разделяемое пространство памяти. Процессоры абсолютно, положительно не записывают напрямую в одно разделяемое пространство памяти. Проблема концептуально одинакова для общей памяти на компьютерах.
Это неверно. В кеш-когерентной архитектуре (например, x86) процессоры на одном компьютере обмениваются памятью. – Zifre
Итак, что же такое кеш L1? –
Кэш каждого процессора. Процессоры по-прежнему используют основную память и заполняют кеш L1 из одной и той же ячейки памяти. –
Возможно, вы захотите изучить что-то вроде memcached, системы кеширования распределенной памяти.
Предоставлено, это все еще выполняется через TCP.
Вы CAN Общайтесь с удаленной системой с общей памятью.Удаленный DMA - это функция новых высокопроизводительных карт сетевого интерфейса (NIC).
Вот бумага, которая оценивает производительность RDMA 10 Gb ethernet. Я знаю бесконечно, а также RDMA, другие, вероятно. Не будет ли приятно, когда выйдет 802.11 XXX? Беспроводная RDMA? :)
Эта ссылка сейчас мертва, однако в wikipedia есть статья: http://en.wikipedia.org/wiki/Remote_direct_memory_access – RandomNickName42
Я рекомендую Beej's guide to Network Programming.
- 1. Общайтесь между двумя различными приложениями, используя signalR
- 2. Как координировать общую память между двумя процессами
- 3. Общайтесь с двумя модулями Android
- 4. Общайтесь над двумя проектами
- 5. Общайтесь между двумя макросами
- 6. Общайтесь между двумя процессами
- 7. Общайтесь между двумя компонентами reactjs
- 8. Как профилировать общую память?
- 9. Запись в общую память
- 10. Gnuradio транслируется между двумя компьютерами?
- 11. Общайтесь со всеми сетевыми компьютерами независимо от IP-адреса
- 12. передачи файлов между двумя компьютерами
- 13. минимизировать общую память STRUCT
- 14. Связь между двумя компьютерами с помощью C#
- 15. Невозможно выделить общую память CUDA
- 16. Не удается сопоставить общую память
- 17. Общайтесь между двумя устройствами, использующими Apache Thrift
- 18. Общайтесь с основным классом, используя Mqtt-подписчик
- 19. Общайтесь между двумя различными процессами Java
- 20. java System.currenttimemillis() имеет смещение между двумя компьютерами
- 21. C++ destructor удаляет общую память
- 22. Общайтесь между сайтами (используя Javascript или?)
- 23. Как использовать общую память с Golang?
- 24. обмен указателями через общую память
- 25. Как использовать именованную общую память?
- 26. Ввод структуры в общую память
- 27. Проверить общую память Redis v2.8
- 28. Связь между двумя компьютерами с использованием интернет-браузера и сокетов?
- 29. Как передать данные между двумя компьютерами?
- 30. Mongodb: обмен базой данных между двумя компьютерами
Вы можете сделать это на флеш-накопителе :) – Prankster
У меня есть ощущение, что майкан знает, что из коробки два компьютера не используют память - «возможно ли реализовать разделяемую память в архитектуре клиентского сервера? об этом?" Ответ «да, его возможное, поиск распределенной общей памяти» –
Распределенная разделяемая память намного сложнее (и медленнее), чем сокеты. – Zifre