AppleEvent против уведомления

Я ищу высокопроизводительную систему межпроцессного взаимодействия в macos X.

Какая система лучше? AppleEvents или же NSNotifications?

2 ответа

Решение

Распределенные уведомления (т.е. уведомления, отправленные через NSDistributedNotificationCenter), скорее всего, не являются хорошим вариантом, если ваша цель - высокая производительность и / или надежность. Вот собственное мнение Apple на эту тему:

Размещение распределенного уведомления - дорогостоящая операция. Уведомление отправляется на общесистемный сервер, который распределяет его по всем задачам, в которых объекты зарегистрированы для распределенных уведомлений. Задержка между отправкой уведомления и прибытием уведомления в другой задаче не ограничена. Фактически, когда слишком много уведомлений отправлено и очередь сервера заполняется, уведомления могут быть отброшены. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html

В зависимости от того, что вы подразумеваете под "высокой производительностью", вы можете рассмотреть распределенные объекты или простые старые механизмы Unix IPC (сокеты, каналы, разделяемая память и т. Д.).

Если вы контролируете как отправителя, так и получателя, вы можете открыть сокет между двумя процессами ( man socketpair), что является довольно высокой производительностью. Вы также можете открыть файл в общей папке (например, /tmp) и записать в него один процесс и прочитать другой, что довольно быстро. Вы также можете открыть два порта TCP/IP на локальном компьютере, по одному в каждом процессе, а затем отправлять их с одного на другой "по сети".

Если вы выбираете только два варианта - NSNotifications или AppleEvents, то, скорее всего, AppleEvents будет работать лучше.

Другие вопросы по тегам