2010-08-06 26 views
0

Je suis à la recherche d'un système de communication inter processus haute performance dans macos X.appleevent contre notification

Quel est le meilleur système? AppleEvents ou NSNotifications?

Répondre

1

Les notifications distribuées (c'est-à-dire les notifications envoyées via NSDistributedNotificationCenter) ne sont probablement pas une bonne option si votre objectif est la haute performance et/ou la fiabilité. Voici la propre opinion d'Apple sur ce sujet:

La publication d'une notification distribuée est une opération coûteuse. La notification est envoyée à un serveur système qui la distribue à toutes les tâches dont les objets sont enregistrés pour les notifications distribuées. La latence entre l'affichage de la notification et l'arrivée de la notification dans une autre tâche est illimitée. En fait, lorsque trop de notifications sont enregistrées et que la file d'attente du serveur se remplit, les notifications peuvent être abandonnées. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html

En fonction de ce que vous entendez par « haute performance », vous pouvez regarder des objets distribués, ou anciens mécanismes simples Unix IPC (sockets, tubes, mémoire partagée, etc.).

1

Si vous contrôlez à la fois l'expéditeur et le destinataire, vous pouvez ouvrir un socket entre les deux processus (man socketpair), ce qui est assez performant. Vous pouvez également ouvrir un fichier dans un emplacement partagé (comme/tmp) et y écrire à partir d'un processus et lire à partir de l'autre, ce qui est assez rapide. Vous pouvez également ouvrir deux ports TCP/IP sur la machine locale, un dans chaque processus, puis les envoyer de l'un à l'autre "sur le réseau".

Si vos deux seuls choix sont NSNotifications ou AppleEvents, AppleEvents fonctionnera probablement mieux.