Шрифт:
Сравнение различных систем межпроцессного взаимодействия
Заканчивая разговор о межпроцессном взаимодействии в UNIX, приведем сводную сравнительную таблицу рассмотренных систем.
Каналы | FIFO | Сообщения | Разделяемая память | Сокеты (домен UNIX) | |
---|---|---|---|---|---|
Пространство имен | — | Имя файла | Ключ | Ключ | Имя файла |
Объект | Системный канал | Именованный канал | Очередь сообщений | Разделяемая область памяти | Коммуникационный узел |
Создание объекта | pipe | mknod | msgget | shmget | socket |
Связывание | pipe | open | msgget | shmat | bind connect |
Передача данных | read write | read write | msgrcv msgsnd | Непосредственный доступ memcpy | read write recv send recvfrom sendto |
Уничтожение | close | close unlink | msgctl | shmdt | close unlink |
Если говорить о производительности IPC, то наиболее быстрым способом передачи данных между неродственными процессами является разделяемая память. Разделяемая память является частью адресного пространства для каждого из взаимодействующих процессов, поэтому чтение и запись в эту область неотличимы, например, от чтения и записи в область собственных данных процесса. Однако при использовании разделяемой памяти необходимо обеспечить синхронизацию процессов. При использовании семафоров, необходимо иметь в виду следующие обстоятельства: