Mac OS下的IPC方式种类很多,大约有下面几种。
1. Mach API
2. CFMessagePort
3. Distributed Objects (DO) NSDistributedNotificationCenter
4. Apple events
5. UNIX domain sockets
6. Internet sockets 或者 XPC( NSConnection)
第2,3,4种是苹果提供的较为高层的通讯机制 .
第5,6种大家应该都知道,用sockets方法离散度,移植性更好。5和6有一些区别,5使用unix文件系统作为通讯媒介,可以使用unix文件权限系统做通讯限制,它的另外一个名字就叫ipc sokets,6可以做机器间通讯做本地ipc也可以,不过要额外做一些努力。
第7种适合数据比较大的情况.
1. 假如你的进程间通讯不频繁,只是发送一些异步信号,DO是很好的选择,也就是NSDistributedNotificationCenter.
2. 如果你的进程间通讯频繁,但数据量不大,需要响应度高,domain sockets很好.
3. 最后如果进程间通讯频繁,数据流巨大例如音频,图片等,需要real-time级别的, 选择Memory Mapping.
1. Mach API
2. CFMessagePort
3. Distributed Objects (DO) NSDistributedNotificationCenter
4. Apple events
5. UNIX domain sockets
6. Internet sockets 或者 XPC( NSConnection)
7. Memory Mapping
还有Pipe,NSTask,消息队列,远程过程调用,通知,信号量和锁设置之类
第1种太底层,很少有人用苹果也不推荐 .
第2,3,4种是苹果提供的较为高层的通讯机制 .
第5,6种大家应该都知道,用sockets方法离散度,移植性更好。5和6有一些区别,5使用unix文件系统作为通讯媒介,可以使用unix文件权限系统做通讯限制,它的另外一个名字就叫ipc sokets,6可以做机器间通讯做本地ipc也可以,不过要额外做一些努力。
第7种适合数据比较大的情况.
1. 假如你的进程间通讯不频繁,只是发送一些异步信号,DO是很好的选择,也就是NSDistributedNotificationCenter.
2. 如果你的进程间通讯频繁,但数据量不大,需要响应度高,domain sockets很好.
3. 最后如果进程间通讯频繁,数据流巨大例如音频,图片等,需要real-time级别的, 选择Memory Mapping.