进程间通信(IPC)解决和问题和算法

所属分类: 软件教程 / 网络通讯 阅读数: 2013
收藏 0 赞 0 分享
谈谈我们的进程间通信,上次我们谈进程是什么?进程是社会的一个个人,每个都有自己的财产,都有自己的空间,那么人需要通信吗?人需要通信,否则社会不会向前流通,而进程作为一个个实体也会有自己的沟通,否则一个个憋在那能干什么?当然当个笑话听!这里面涉及到三个问题,第一是比较棘手的,怎么把信息从一个进程传给另外一个进程?这个我们这样想,人在社会上生存是不是要交流,你给老外讲中文他能听懂?所以信息必须以一种约定好的规格传递,当然,这只是我这样想。第二点,人在社会中生存,我们都会有竞争,我们都需要抢夺资源,这对于进程来讲也一样的,而且很多时候两者会产生冲突造成一些不可预估的结果,我们想人之间有冲突会打架需要调节,进程不一样的吗?最后一点是进程间的执行有时是需要秩序的,进程A获得数据而进程B打印数据,诸如此类。 所以我们归纳进程间通信(IPC)主要解决三个问题:在进程间传递数据进程间约定秩序协调对于共享数据的互斥访问 topic1: 竞争条件:当两个或多个进程同时访问某个共享区域时(通常会有读写两种情况),最后的运行结果取决于进程的运行时序,这样就产生了竞争条件,很经典的问题就是对文件的读写,一个在读,一个在写,读出来的东西很可能不是你想要的,所有IPC必需要协调好对于共享数据的互斥访问,也就是说,必需要有这样一种机制能够避免这种竞争的发生! 临界区的概念: 既然有竞争,那我们就必须要去协调!如何避免?比如张三和李四都想要某个东西,两个人打起来了,现在怎么办,他们自己肯定不想停下来,都想要这个东西,现在我们作为他们的上级,肯定要说,你们不要打了,让其中一个拿走这个东西,或者更好的建议是,我们在之前就应该分配好,在更高的层次上说,比如张三就应该先拿走这个东西,可是这样对于其他人(其他进程)是不公平的,所以谁先到先得,我们只需要保证,当他拿到这个东西的时候,其他人不能抢夺,拿不走,同样的思想,运用在进程上!这种思想的根本在于对于互斥的实现,一个人在做,另外的人只能看! 不知你懂否,看了这么久,其实我们就是在探讨一个问题,上面的问题3,如何达到互斥访问,但是这样的描述其实还不够精确,因为事实上,进程真正访问共享区域的只有一部分时间而已,为了把互斥做得更细致,我们要往下走!一个进程访问共享区域的那部分代码,我们不妨称之临界区,其实名字无所谓,但是这个考试或者面试经常考,而且很多人误以为是内存或者资源,不要闹了笑话!那我们以这样的视角看,大家都有开车的时候,这么多人,都某个点开出来那么肯定会堵车,那我们只要让大家错开时间段出来就好了啊! 当然这依然是一个很粗的模型,事实上,我们需要提出一个方案(也就是一个算法)解决互斥(如同解决交通堵塞问题一样),这个方案最好应该满足以下的条件: 基本条件,解决互斥 你的方案不应该对cpu速度和这类条件作任何假设,这个很容易理解,cpu的执行在多道程序模型下是具有不可再现性的! 因为临界区互斥,A进程在占用,B进程阻塞,但是C进程不能因为B进程的阻塞阻塞,也就是说不要引起无关人的损伤! A执行,B阻塞,你让我一直等!no!那我还咋混!笑话听。 上面最后两点涉及到后面会谈到的死锁,活锁,饥饿,反正大家记住,系统就是要让每个进程都能安安稳稳的执行! 说白了,比较好的结果就,A执行,B等一会,A走了,B跑,大家走,理想的效果! 下面就这个算法向大家介绍一些比较典型的算法! 这个为了讲清楚,我不想讲的很笼统,首先大家要知道从大的角度看,有两种方式,忙等待与非忙等待! 忙等待和非忙等待不是两种算法,而是两种思路,下面包括实际的解决方法,其实忙等待和非忙等待是很经典的两个模型,不仅在进程通信有这个概念,其实就是事件模型,当某个事件发生的时候,你如何知道?比如你在等某一个人,如果你很急,你可能会不断跑到门口去看,来了没有啊!这就是忙等待,非忙等待就是我在这睡觉,咦,有人敲门了,好,等到了!这个听懂了,很多其他开发你自然理解了! 我们说忙等待,如何实现互斥? 笼统的讲,忙等待实现互斥是通过不断的检测一个状态变量,当这个状态变量为某个值的时候就往下执行!你也可以按你的思路理解,这个状态变量,就像一把锁,你不断去看开了没有,也可以理解为一个信号灯,随你的想法了,但是思想都是一样的! 忙等待的几个算法: first:禁止中断,这种方法你需要知道一个前提,我们需要让进程1执行完后进程2,3,4.。。依次执行,如何实现?我们通过时间中断,每次时间中断后更新进程x的执行时间,到了时间了,对不起了您,收拾东西先回去吧!所以如果你关了中断,这就是开了外挂啊,哥想执行多久就执行多久,谁还能抢夺我的时间,我得资源?可是这样带来了一些问题,第一用户没有权利开关中断,限于内核编程,另外现在cpu多核,关一般关一个核的中断,最后,你掌控了全局的寿命,这不是很安全的做法,要是你小子不把时间给其他人咋办?所以,现在这种方式不是很有用。 second:严格交替法,设置一个变量不妨为x,这种方法在进程1和进程0间讨论,设x最开始为0,进程0不断对x检测看是否为0,进程1不断对x检测看是否为1,这里先叙述到这,下章再续。
更多精彩内容其他人还在看

轻松搞定MSN频繁显示脱机

MSN频繁显示脱机 一招帮你搞定!
收藏 0 赞 0 分享

GGPO 街机无法连接之路由器设置篇

关于GGPO能上但是不能和他人联机的问题解决方法----开通DMZ功能
收藏 0 赞 0 分享

路由器 端口映射/触发与 DMZ 主机

下面将以WGR614v5为例来陈述,且局域网网段没有使用WGR614v5的默认设置192.168.1.0,而是使用的192.168.6.0网段。
收藏 0 赞 0 分享

Connectify 将win7系统变成无线热点的使用教程

如果需要随时建立无线热点的话,Connectify完全可以胜任。如果大家在寻找一种简单方法来使Windows 7电脑和其他设备共享无线网络,并且还要保证安全的话,就是Connectify了。
收藏 0 赞 0 分享

HP520笔记本 无法识别CDMA无线上网卡的解决办法

新买的十几台这型号机器插上CDMA无线上网卡装完驱动无法正常识别,在设备管理器里查看CDMA卡上都是感叹号,属性里显示设备不可用。
收藏 0 赞 0 分享

QQ 无法视频聊天的解决方法

好不容易买了摄像头,以为这下子可以和QQ上的MM聊个痛快。但谁知在连接时总是无法成功,面对这样的窘状该怎么办呢?不要着急,很多时候都是因为通讯模式设置不正确所导致的。
收藏 0 赞 0 分享

qq2009 天气预报去除方法

我用的是09qq官方下载的版本,每次登录时右上角都会有一个天气预报信息,可是我又不需要这样的信息,请问大家如何将其取消呢?
收藏 0 赞 0 分享

QQ空间打不开或QQ空间不显示原因分析和解决

自从有了QQ空间,许多问题也随之而来。什么QQ空间打不开,QQ空间不显示等等,这都是广大网友经常碰到的问题,下面本文将会对QQ空间打不开原因做个比较全面的介绍!相信你看过之后,一定会大有收获。
收藏 0 赞 0 分享

在QQ空间中随意加入土豆网Flash视频

我们今天就来教大家如何在QQ空间中随意加入土豆网Flash视频。
收藏 0 赞 0 分享

QQ远程协助 花屏解决方法

QQ的远程协助,非常方便。不仅能帮忙解决一些常见的电脑问题,还可以进行远程的产品演示。在使用中,经常会发现连接不了。连接后黑屏,花屏(图像倾斜)。
收藏 0 赞 0 分享
查看更多