文档章节

Linux进程间通信总述

没有脚的大笨鸟
 没有脚的大笨鸟
发布于 2014/09/18 00:06
字数 832
阅读 48
收藏 0

 

功能描述

缺陷

1.       信号(SIGNAL)

信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。

1、早期信号承载信息量少,后来得到改善

2、是比较复杂的通信方式

 

 

2.       管道(PIPE)\有名管道(FIFO)

管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信

1、速度慢

2、管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小);

3、管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等;

3.       消息队列(MSG)

消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。

1、每个消息队列的字节数有限制,该值因系统不同而不同。

2、每个消息队列所能容纳的最大消息数也有限制

3、除此之外还有系统级总数的限制

4.       信号灯(SEM)

信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。

不能传递复杂消息,只能用来同步

 

5.       共享内存(SHM)

共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。因为进程可以直接读写内存,而不需要任何数据的拷贝

/proc/sys/kernel/目录下,记录着系统V共享内存的一下限制,如一个共享内存区的最大字节数shmmax,系统范围内最大共享内存区标识符数shmmni等,可以手工对其调整,但不推荐这样做。

 

6.       套接口(SOCKET)

不仅可以实现单机内的进程间通信,还可以实现不同计算机进程之间的通信。

 


© 著作权归作者所有

上一篇: Git学习方法
下一篇: dup and dup2的剖析
没有脚的大笨鸟
粉丝 5
博文 11
码字总数 5230
作品 0
浦东
程序员
私信 提问
Android(IPC)进程间通讯1:详解Binder由来?

完整原文:http://tryenough.com/android-ipc1 Android开发的进程间通讯,整个Android的应用都依赖于binder做底层通信机制。而Linux中提供的进程间通讯方式并没有binder机制,那么android中为...

TryEnough
02/22
0
0
深刻理解Linux进程间通信(IPC)

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实 验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信...

墙头草
2010/11/19
369
0
Linux环境进程间通信(二)--信号

Linux环境进程间通信(二): 信号(上) www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html Linux环境进程间通信(二): 信号(下) www.ibm.com/developerworks/cn/linux/l-ip...

长平狐
2012/09/03
35
0
进程间通信 IPC interprocess communication

1,管道,FIFO 2, 信号 3,消息队列 4,共享类存 5.文件映射 6.socket 通信就是说进程之间传递数据。常见的方法有 pipe(管道),FIFO(命名管道),socket(套接字),SysVIPC 的 shm(共享内...

企图穿越
2010/05/02
1K
0
【Linux进程间通信】 - 匿名管道

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xiejingfa/article/details/50819660 原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/detail...

Fred^_^
2016/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

1. 加载动态链接库

c_long的大小和平台有关:(32)位。 64位 编译出来的dll如果和python的版本不一样,那么就会出现下面的错误 当前是64的,所以修改了之后就可以了。 #include<stdio.h>extern "C" void show()...

鬼上身跳不过门槛
18分钟前
5
0
宝塔授权版部署

宝塔授权版部署 宝塔安装授权源码教程 注意:3.0之后不支持从免费版升级到授权版。 授权源码购买后,大家登录Niushop官网,点击授权账号进入到个人中心,在首页就可以看到购买的授权信息,包...

Geek-Chic
38分钟前
5
0
GUAVA--基础工具(Throwables)

1、异常传播 有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在 Error 或 RuntimeException 被捕获的时候,你 没想捕获它们,但是声明捕获 Throwable 和 Exception 的时候,也包括了...

MrYuZixian
56分钟前
8
0
电磁兼容入门篇之辐射发射(辐射骚扰)试验

今天我们一起学习的是四个EMI测试项之一:辐射发射(RE),较前两篇相比的话,今天可能会有一点点深度,不过不用担心,我们先做一个了解,等到测试时或测试后再回过来结合本文,就能掌握的更...

demyar
今天
9
0
Redis 事务:将一组命令放在同一个事务中进行处理

事务 MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令。事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺...

须臾之余
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部