различие между очередью сообщений и общей памятью?

Я прочитал много статей о различиях между очередью сообщений и общей памятью. Но все еще ясный, какой хорош для достижения хорошей производительности.

Как общая память, предполагают, чтобы быть хорошим по очередям, но это также имеет проблему производительности в случае синхронизации ее.

11
задан khushi 18 February 2010 в 10:51
поделиться

3 ответа

Как разделяемая память, так и очереди сообщений могут использоваться для обмена информацией между процессами. Разница в в том, как они используются.

Общая память - это именно то, что вы думаете: это область хранения, которая может быть прочитана и записана более чем одним процессом. Он не обеспечивает внутренней синхронизации; Другими словами, программист должен убедиться, что один процесс не затирает данные другого. Но он эффективен с точки зрения пропускной способности: чтение и запись - относительно быстрые операции.

Очередь сообщений является односторонним конвейером: один процесс записывает в очередь, а другой считывает данные в том порядке, в котором они были записаны, до тех пор, пока не произойдет условие конца данных. При создании очереди устанавливаются размер сообщения (байтов на сообщение, обычно довольно мало) и длина очереди (максимальное количество ожидающих сообщений). Доступ происходит медленнее, чем к общей памяти, поскольку каждая операция чтения / записи обычно представляет собой одно сообщение. Но очередь гарантирует, что каждая операция либо успешно обработает все сообщение, либо завершится с ошибкой без изменения очереди. Таким образом, писатель никогда не может потерпеть неудачу после написания только частичного сообщения, а читатель либо получит полное сообщение, либо вообще ничего.

31
ответ дан 3 December 2019 в 01:38
поделиться

При использовании разделяемой памяти с учетом возможных условий гонки, когда один процесс пишет в него, а другой читает из него, о чем нужно помнить. Существует связанный риск использования первого, предположим, что два процесса используют его: один для записи в него, другой для чтения из него, тот, который записывает, умирает из-за ненормального состояния, процесс, читающий его, может зависнуть или дать сбой.

Общая память может считаться более быстрой (низкие накладные расходы, большой объем передачи данных), чем очереди. Но очереди, с другой стороны, требуют больших накладных расходов (настройка для создания постоянной очереди и т. Д.) С низким объемом данных.

Бремя общей памяти заключается в том, что вам необходимо реализовать синхронизацию, чтобы обеспечить безопасность потоков. Взгляните на отличную статью Биджа о IPC.

При использовании очередей они являются потокобезопасными, и не только сообщения хранятся в очереди независимо от результата, предположим, что два процесса используют очередь, когда один процесс записывает в нее (в форме сообщения ), а другой процесс, который собирается читать из него, умирает или завершается из-за сбоя или ненормального состояния при таких обстоятельствах, это сообщение все еще на месте, другой процесс при перезапуске может читать из очереди, т. е. нет данные потеряны.

В этом разница между ними.

4
ответ дан 3 December 2019 в 01:38
поделиться

Очередь сообщений имеет внутренние накладные расходы на синхронизацию, гарантируя безопасность за счет производительности. Общая память не имеет гарантий - если два потока обращаются к ней одновременно, они могут конфликтовать (записывать несогласованные данные), если вы не обеспечиваете безопасность потоков вы сами. Это может быть несущественным, если допускаются незначительные ошибки (например, данные поступают на аналоговый выход, и некоторый шум допустим), поэтому вы можете вообще пропустить проверку ошибок и придерживаться "достаточно хорошего" подхода при довольно высоком приросте производительности. Кроме того, общая память позволяет обмениваться большими фрагментами данных и общим и постоянным хранилищем данных, общих для нескольких приложений, экономя память. Очереди сообщений предназначены для снижения пропускной способности - вы можете, например, использовать их для защиты доступа к общей памяти.

2
ответ дан 3 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: