Может ли кто-нибудь сказать, насколько медленными являются сокеты домена UNIX по сравнению с общей памятью (или альтернативным файлом с отображением памяти)?
Спасибо.
Может ли кто-нибудь сказать, насколько медленными являются сокеты домена UNIX по сравнению с общей памятью (или альтернативным файлом с отображением памяти)?
Спасибо.
Это скорее вопрос дизайна, чем скорость (общая память быстрее), сокеты домена окончательно больше UNIX-стиля и делают намного меньше проблем. С точки зрения выбора заранее знайте:
Преимущества доменных сокетов
Недостатки сокетов в домене
Преимущества общей памяти
Недостатки общей памяти
Это все, о чем я могу думать сейчас. Тем не менее, я бы пошел с сокетами домена в любой день - не говоря уже о том, что это намного проще, чем переопределить их для распределенных вычислений. Ускорение скорости общей памяти будет потеряно из-за необходимости безопасного дизайна. Однако, если вы точно знаете, что делаете, и используете правильные вызовы ядра, вы можете достичь большей скорости с общей памятью.
С точки зрения скорости разделяемая память, безусловно, является победителем. С сокетами у вас будет как минимум две копии данных - от отправки процесса до буфера ядра, а затем от ядра к процессу получения. В общей памяти задержка будет привязана только алгоритмом согласованности кеша между ядрами на ящике.
Как отмечает Kornel, использование общей памяти более активно, поскольку вам нужно разработать собственную схему синхронизации/сигнализации, которая может добавить задержку в зависимости от того, какой маршрут вы собираетесь. Определенно использовать семафоры в общей памяти (реализованные с помощью futex в Linux), чтобы избежать системных вызовов в неподтвержденном случае.
Оба являются механизмами взаимодействия между процессами (IPC). Сокеты домена UNIX используются для связи между процессами на одном хосте, подобно TCP-сокетам, используемым между разными хостами. Общая память (SHM) - это часть памяти, где вы можете помещать данные и делиться ими между процессами. SHM предоставляет вам произвольный доступ с помощью указателей, сокеты могут быть записаны или прочитаны, но вы не можете перемотать или сделать позиционирование.
В этом случае - сокеты быстрее. Запись в общую память выполняется быстрее, чем любой IPC, но запись в файл с отображением памяти и запись в общую память - это две совершенно разные вещи.
при записи в файл с отображением памяти вам необходимо "сбросить" то, что было записано в разделяемую память, в фактический связанный файл (не совсем, флеш для вас делается), поэтому сначала вы копируете свои данные в общий память, а затем вы копируете ее снова (на флеш) в фактический файл, и это супер-пупер экспансивный - более того, что угодно, даже больше, чем запись в сокет, вы ничего не получаете, делая это.