进程通信 : 不同进程之间传播或交换信息    为什么要进程通信呢? 协同运行,项目模块化 通信原理 : 给多个进程提供一个都能访问到的缓冲区. 根据使用场景,我们能划分为以下几种通信 : 1.管道(匿名管道.命名管道) 因为是半双工通信(单向传递信息),所以叫"管道".原理是在内核中创建一个缓冲区让通信双方传递信息.                             匿名管道 :创建的缓冲区没有标识 , 只能用于具有亲缘关系的进程通信. 通信流程及代码: /* *…
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友自己参考相关资料.此书出版较早,分析的版本为2.4.16,故出现的一些概念可能跟最新版本内核不同. 此书已经开源,阅读地址 http://www.kerneltravel.net 一.管道 在Linux…
http://www.cnblogs.com/fengwei/archive/2012/09/12/2682646.html php作为脚本程序,通常生命周期都很短,如在web应用中,一次请求就是php运行的 一个周期,请求结束则生命周期截止.所以php在处理需要共 享的资源时,一般会将共享数据保存在数据库或dbm之类的文件中,再者就是利用内存实现共享.你可以选择已有的工具辅助你,像memcache:也可以自 己编写代码访问操作系统的共享内存段. php中对共享内存段的操作有两组函数:Syste…
信号量:用于管理对资源的访问: 共享内存:用于在程序之间高效的共享数据: 消息队列:在程序之间传递数据的一种简单方法: 一.信号量 临界代码:需要确保只有一个进程或者一个执行线程可以进入这个临界代码并拥有对资源独占式的访问权. 临界区:真正执行数据更新的代码需要独占式的执行,它们被称为临界区域:它们通常只在一个大型程序中占据一小段的代码. 信号量是一个特殊的变量,它只取正整数值,并且程序对其访问都是原子操作:只允许对它进行等待和发送信号这两种操作. 在Linux编程中,等待和发送信号都已具有特殊…
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里).而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源.比如对全局变量的访问,有时要加锁,操作完了,在解锁.有的时候锁和信号量会同时使用的”也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自…
在Android中,经常使用Handler来实现线程间通信,必然要理解Looper , Handler , Message和MessageQueue的使用和原理,下面说一下Looper , Handler , Message有什么关系?下面从源码角度介绍3者关系,再给出一个结论. 1.导论 Handler . Looper .Message 这三者都与Android异步消息处理线程相关的概念. 什么叫异步消息处理线程呢? 异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的消…
最近学习了操作系统的并发:以下是关于进程间实现并发,通信的两个方法. 例子: 求100000个浮点数的和.要求: (1)随机生成100000个浮点数(父进程). (2)然后创建4个后代进程,分别求25000个浮点数的和. (3)父进程对4个后代进程的结果求和. (4)每个子进程在屏幕上以格式“(ID_k) Child_k sum: XXX”打印信息, 其中k的取值为1-4,代表子进程的编号,ID_k表示第k个子进程的ID,XXX是该子进程计算的结果. (5)父进程在屏幕上以格式 “(ID)Par…
一:任务描写叙述 A,B两个进程通过管道通信,像曾经的互相聊天一样,然后A进程每次接收到的数据通过A1进程显示(一个新进程,用于显示A接收到的信息),A和A1间的数据传递採用共享内存,相应的有一个B1进程.用于显示B进程接收到的信息. 针对A,B进程,退出时採用ctrl+c退出,当收到相应信号后.自身进程可以通过信号处理函数进行资源清理,清理后exit退出进程.(A1,B1,手动关闭就可以).界面图例如以下. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZX…
ipcs ipcs -q : 显示所有的消息队列 ipcs -qt : 显示消息队列的创建时间,发送和接收最后一条消息的时间 ipcs -qp: 显示往消息队列中放消息和从消息队列中取消息的进程ID ipcs -q -i msgid: 显示该消息队列结构体中的消息信息: ipcs -ql : 显示消息队列的限制信息: 取得ipc信息: ipcs [-m|-q|-s] -m 输出有关共享内存(shared memory)的信息 -q 输出有关信息队列(message queue)的信息 -s 输出…
在上一篇博客中,我们已经熟悉并使用了匿名管道,这篇博客我们将讲述进程间通信另外两种常见方式--命名管道与共享内存. 1.命名管道 管道是使用文件的方式,进行进程之间的通信.因此对于管道的操作,实际上还是用诸如write,read等接口实现. 匿名管道应用的一个限制就是只能在具有亲缘关系(如父进程与子进程.兄弟进程)之间进行通信.如果想在不相关的进程间进行数据交换,可以使用FIFO文件来做这种工作. 这里的FIFO文件即我们所说的命名管道.必须强调的是,虽然FIFO是一种文件,但实际上数据的读写都…