博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程间通信方式—综述
阅读量:3955 次
发布时间:2019-05-24

本文共 1176 字,大约阅读时间需要 3 分钟。

linux进程间一共有六种通信方式:

1.管道:无名管道(pipe)和有名管道(FIFO)
2.信号(signal)
3.信号量(Semaphore)
4.消息队列(MessageQueue)
5.共享内存(shared memory)
6.套接字(socket)


1.管道:

管道分为无名管道(pipe)和有名管道(fifo)。
无名管道是一种半双工的通信方式,数据只能往一个方向流动,且只能在有亲缘关系的进程之间使用,进程间的亲缘关系一般是指父子进程;

有名管道也是一种半双工的通信方式,可以再没有亲缘关系的进程之间通信;

有名管道和无名管道的主要区别在于,命名管道有一个名字,命名管道的名字对应于一个磁盘索引节点,有了这个文件名,任何进程有相应的权限都可以对它进行访问。


2.信号(signal):

信号是Linux系统中用于进程之间通信或操作的一种机制,处理异步事件,是异步通信方式。信号主要有两个来源:
1)硬件来源;
2)软件来源,例如使用系统调用或者命令发出信号。
主要作为进程间以及同一进程不同线程之间的同步手段。
信号的机制参考:


3.信号量(Semaphore):

信号量是一种计数手段,可以用来控制多个进程对共享资源的访问。经常作为一种锁机制,防止一个进程在访问共享资源时,有其他的进程也来访问该资源。因此作为进程间以及统一进程不同线程之间的同步手段。


4.消息队列(MessageQueue):

由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点


5.共享内存(shared memory)

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。


6.套接字( socket )

套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信

更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

转载地址:http://hjvzi.baihongyu.com/

你可能感兴趣的文章
转载: nginx 域名跳转一例~~~(rewrite、proxy)
查看>>
博客搬到了新地址: shensiwei.com / siwei.me
查看>>
linux内核编译 fatal error: openssl/opensslv.h: No such file or directory
查看>>
zip bzip2 gzip xz tar文件解压缩
查看>>
c++程序复制文件C:\Windows\system32\文件夹问题,windows上的坑
查看>>
linux CentOS修改网卡名
查看>>
多路IO复用:poll、select、epoll 函数
查看>>
linux kernel asmlinkage的作用
查看>>
Java 之23种设计模式解析
查看>>
Java 之23种设计模式解析
查看>>
Java 之23种设计模式解析
查看>>
Java 之23种设计模式解析
查看>>
Java 之23种设计模式解析
查看>>
Java常用英语汇总(更新升级版)
查看>>
Java常用英语汇总(更新升级版)
查看>>
Java常用英语汇总(更新升级版)
查看>>
Java常用英语汇总(更新升级版)
查看>>
Java常用英语汇总(更新升级版)
查看>>
Java常用英语汇总(更新升级版)
查看>>
Java常用英语汇总(更新升级版)
查看>>