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 будет работать лучше.