linux下关于IPC(进程间通讯)

linux下进程间通讯的主要几种方式

  1. 管道(Pipe)及有名管道(named pipe):管道可用于具备亲缘关系进程间的通讯,有名管道克服了管道没有名字的限制,所以,除具备管道所具备的功能外,它还容许无亲缘关系进程间的通讯;
  2. 信号(Signal):信号是比较复杂的通讯方式,用于通知接受进程有某种事件发生,除了用于进程间通讯外,进程还能够发送信号给进程自己;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又可以统一对外接口,用sigaction函数从新实现了signal函数);
  3. 报文(Message)队列(消息队列):消息队列是消息的连接表,包括Posix消息队列system V消息队列。有足够权限的进程能够向队列中添加消息,被赋予读权限的进程则能够读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  4. 共享内存:使得多个进程能够访问同一块内存空间,是最快的可用IPC形式。是针对其余通讯机制运行效率较低而设计的。每每与其它通讯机制,如信号量结合使用,来达到进程间的同步及互斥。
  5. 信号量(semaphore):主要做为进程间以及同一进程不一样线程之间的同步手段。
  6. 套接口(Socket):更为通常的进程间通讯机制,可用于不一样机器之间的进程间通讯。起初是由Unix系统的BSD分支开发出来的,但如今通常能够移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

多线程和多进程的区别

  • 进程:程序执行的一次动态过程。
  • 线程:可执行代码的分派单元。
  • 多进程:linux中,进程经过fork函数进行建立,建立的子进程会彻底复制父进程的task_struct结构,并为子进程的堆栈分配物理页。显然,我能够简单的将进程的建立理解为一次进程的复制。
  • 多线程:linux中,若是咱们把进程比做是一条大河,那么将这条大河切分不少段的小段河流就能够认为是一个个的线程。在基于线程的多任务的环境中,全部进程有至少一个线程,可是它们能够具备多个任务。这意味着单个程序能够并发执行两个或者多个任务,实现并发执行。
  • 多进程和多线程相比:首先,多进程会比多线程有更高的开销,咱们能够从大河的复制和大河的切分这个观点上来了解。多进程在执行大量CPU密集型操做时优于多线程的。固然,因为多线程同属于一个进程,因此他们之间直接共享内存和地址,可是对于多进程,就必须经过特定的方式进行数据传递。进程对于系统性能的提升理论上是没有限制的,只要能有足够强的CPU和内存,进程的建立是不受影响的。可是对于多线程,他对于系统性能的提高是有限度的,在达到某一限度值后,即便在建立线程,不只不会提升性能,反而有可能会下降整个系统的性能,同时多线程的个数一样也会给CPU调度带来一些困扰。
  • 特性分析:

  • 优缺点分析:

相关文章
相关标签/搜索