代码改变世界

Linux IPC系列

2011-10-13 15:48  Aga.J  阅读(636)  评论(0编辑  收藏  举报

Mark Down! When I am spare, I will review it.

1 管道
半双工,可以有关系或无关系的进程间使用,FIFO(特殊文件),使用时管道的读写规则如读写打开,读写过程,阻塞读写,有较多地方需要注意!
2 信号
  异步方式,可靠和不可靠,kill,raise(向自身发送信号),sigqueue(支持信号带参数,之前可以配置信号处理函数),alarm(只有SIGALRM信号),settimer(更加强大的定时器),abort(SIGABORT信号)
  信号安装靠signal和sigaction(与sigqueue配合)
3 消息队列
消息队列与管道以及有名管道相比,具有更大的灵活性,首先,它提供有格式字节流,有利于减少开发人员的工作量;其次,消息具有类型,在实际应用中,可作为优先级使用。这两点是管道以及有名管道所不能比的。同样,消息队列可以在几个进程间复用,而不管这几个进程是否具有亲缘关系,这一点与有名管道很相似;但消息队列是随内核持续的,与有名管道(随进程持续)相比,生命力更强,应用空间更大。
4 信号灯
  可以说不是一种纯粹的进程间通信,更加侧重于对进程间共享资源的访问控制。而且这种控制可以由其他进程来修改。
semaphores aren't just thread-safe, they're even signal-safe. If for some reason you have to use thread synchronization inside signal handlers, they have to be semaphores. Otherwise you'll cause deadlocks.
5 共享内存
  最快的IPC方式,但是要考虑被拿来map的文件的存在问题,同时,多个进程操作共享内存也要保证一致性,除此以外,共享内存的大小也有限制,还有map后不能越页访问!!
6 网络
  多机器间的进程通信