linux进程间通讯的几种方式

linux进程间通讯的几种方式

ID:42563541

大小:20.68 KB

页数:8页

时间:2019-09-17

linux进程间通讯的几种方式_第1页
linux进程间通讯的几种方式_第2页
linux进程间通讯的几种方式_第3页
linux进程间通讯的几种方式_第4页
linux进程间通讯的几种方式_第5页
资源描述:

《linux进程间通讯的几种方式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.信号:(signal)是一种处理异步事件的方式。信号时比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身。 2.信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施,它负责协调各个线程,以保证它们能够正确、合理的使用公共资源。linux进程间通讯的几种方式的特点和优缺点,和适用场合1.管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。有名管道(namedpipe):有名管道也是半双工的

2、通信方式,但是它允许无亲缘关系进程间的通信。信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。消息队列(messagequeue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。信号(sinal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。共享内存(sharedmemory

3、):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。套接字(socket):套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。管道的主要局限性正体现在它的特点上:只支持单向数据流;只能用于具有亲缘关系的进程之间;没有名字;管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小);管道所传送的是无格式字节

4、流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等;2.用于进程间通讯(IPC)的四种不同技术: 1.消息传递(管道,FIFO,posix和systemv消息队列) 2.同步(互斥锁,条件变量,读写锁,文件和记录锁,Posix和SystemV信号灯) 3.共享内存区(匿名共享内存区,有名Posix共享内存区,有名SystemV共享内存区) 4.过程调用(Solaris门,SunRPC) 消息队列和过程调用往往单独使用,也就是说它们通常提供了自己的同步机制.相反,共享内存区通常需要由应用程序提供的某种

5、同步形式才能正常工作.解决某个特定问题应使用哪种IPC,不存在简单的判定,应该逐渐熟悉各种IPC形式提供的机制,然后根据特定应用的要求比较它们的特性. 必须考虑的四个前提: 1.联网的还是非联网的.IPC适用于单台主机上的进程或线程间的.如果应用程序有可能分布到多台主机上,那就要考虑使用套接字代替IPC,从而简化以后向联网的应用程序转移的工作. 2.可移植性. 3.性能,在具体的开发环境下运行测试程序,比较几种IPC的性能差异. 4.实时调度.如果需要这一特性,而且所用的系统也支持posix实时调度选项,那就考虑使用Posix的消息传递和同步函数. 各

6、种IPC之间的一些主要差异: 1.管道和FIFO是字节流,没有消息边界.Posix消息和SystemV消息则有从发送者向接受者维护的记录边界(eg:TCP是没有记录边界的字节流,UDP则提供具有记录边界的消息). 2.当有一个消息放置到一个空队列中时,Posix消息队列可向一个进程发送一个信号,或者启动一个新的线程.SystemV则不提供类似的通知形式. 3.管道和FIFO的数据字节是先进先出的.Posix消息和SystemV消息具有由发送者赋予的优先级.从一个Posix消息队列读出时,首先返回的总是优先级最高的消息.从一个SystemV消息队列读出时

7、,读出者可以要求想要的任意优先级的消息. 4.在众多的消息传递技术—管道,FIFO,Posix消息队列和SystemV消息队列—中,可从一个信号处理程序中调用的函数只有read和write(适用于管道和FIFO). 比较不同形式的消息传递时,我们感兴趣的有两种测量尺度: 1.带宽(bandwidth):数据通过IPC通道转移的速度.为测量该值,我们从一个进程向另一个进程发送大量数据(几百万字节).我们还给不同大小的I/O操作(例如管道和FIFO的write和read操作)测量该值,期待发现带宽随每个I/O操作的数据量的增长而增长的规律. 2.延迟(la

8、tency):一个小的IPC消息从一个进程到令一个进程再返回来所花的时间.我们测量的是只有一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。