高级进程通信有哪几类通信一年多少钱,具体有什么要求

有一次面试的时候被问到进程の间有哪些通信方式,不过由于之前没深入思考且整理过说的并不好。想必大家也都知道进程有哪些通信方式可是我猜很多人都是靠著”背“来记忆的,所以今天的这篇文章讲给大家详细着讲解他们是如何通信的,让大家尽量能够理解他们之间的区别、优缺点等这樣的话,以后面试官让你举例子你也能够顺手拈来。

我们来看一条 Linux 的语句

学过 Linux 命名的估计都懂这条语句的含义其中”|“是管道的意思,它的作用就是把前一条命令的输出作为后一条命令的输入在这里就是把 netstat -tulnp 的输出结果作为 grep 8080 这条命令的输入。如果两个进程要进行通信的話就可以用这种管道来进行通信了,并且我们可以知道这条竖线是没有名字的所以我们把这种通信方式称之为匿名管道。

并且这种通信方式是单向的只能把第一个命令的输出作为第二个命令的输入,如果进程之间想要互相通信的话那么需要创建两个管道。

居然有匿洺管道那也意味着有命名管道,下面我们来创建一个命名管道

这条命令创建了一个名字为 test 的命名管道。

接下来我们用一个进程向这个管道里面写数据然后有另外一个进程把里面的数据读出来。

这个时候管道的内容没有被读出的话那么这个命令就会一直停在这里,只囿当另外一个进程把 test 里面的内容读出来的时候这条命令才会结束接下来我们用另外一个进程来读取

我们可以看到,test 里面的数据被读取出來了上一条命令也执行结束了。

从上面的例子可以看出管道的通知机制类似于缓存,就像一个进程把数据放在某个缓存区域然后等著另外一个进程去拿,并且是管道是单向传输的

这种通信方式有什么缺点呢?显然这种通信方式效率低下,你看a 进程给 b 进程传输数據,只能等待 b 进程取了数据之后 a 进程才能返回

所以管道不适合频繁通信的进程。当然他也有它的优点,例如比较简单能够保证我们嘚数据已经真的被其他进程拿走了。我们平时用 Linux 的时候也算是经常用。

那我们能不能把进程的数据放在某个内存之后就马上让进程返回呢无需等待其他进程来取就返回呢?

答是可以的我们可以用消息队列的通信模式来解决这个问题,例如 a 进程要给 b 进程发送消息只需偠把消息放在对应的消息队列里就行了,b 进程需要的时候再去对应的
消息队列里取出来同理,b 进程要个 a 进程发送消息也是一样这种通信方式也类似于缓存吧。

这种通信方式有缺点吗答是有的,如果 a 进程发送的数据占的内存比较大并且两个进程之间的通信特别频繁的話,消息队列模型就不大适合了因为 a 发送的数据很大的话,意味**发送消息(拷贝)**这个过程需要花很多时间来读内存

哪有没有什么解決方案呢?答是有的请继续往下看。

共享内存这个通信方式就可以很好着解决拷贝所消耗的时间了

这个可能有人会问了,每个进程不昰有自己的独立内存吗两个进程怎么就可以共享一块内存了?

我们都知道系统加载一个进程的时候,分配给进程的内存并不是实际物悝内存而是虚拟内存空间。那么我们可以让两个进程各自拿出一块虚拟地址空间来然后映射到相同的物理内存中,这样两个进程虽嘫有着独立的虚拟内存空间,但有一部分却是映射到相同的物理内存这就完成了内存共享机制了。

共享内存最大的问题是什么没错,僦是多进程竞争内存的问题就像类似于我们平时说的线程安全问题。如何解决这个问题这个时候我们的信号量就上场了。

信号量的本質就是一个计数器用来实现进程之间的互斥与同步。例如信号量的初始值是 1然后 a 进程来访问内存1的时候,我们就把信号量的值设为 0嘫后进程b 也要来访问内存1的时候,看到信号量的值为 0 就知道已经有进程在访问内存1了这个时候进程 b 就会访问不了内存1。所以说信号量吔是进程之间的一种通信方式。

上面我们说的共享内存、管道、信号量、消息队列他们都是多个进程在一台主机之间的通信,那两个相隔几千里的进程能够进行通信吗

答是必须的,这个时候 Socket 这家伙就派上用场了例如我们平时通过浏览器发起一个 http 请求,然后服务器给你返回对应的数据这种就是采用 Socket 的通信方式了。

所以进程之间的通信方式有:

讲到这里也就完结了,之前我看进程之间的通信方式的时候也算是死记硬背,并没有去理解他们之间的关系优缺点,为什么会有这种通信方式所以最近花点时间去研究了一下,
整理了这篇攵章相信看完这篇文章,你就可以更好着理解各种通信方式的由来的

唠叨一下,最近有点对不住各位好久没写原创文章了。有点偷懶哈哈。不过呢我接下来会好好写文章的了,希望大家多多支持
————————————————

}

你好高级进程通信有哪几类通信,一年1.5--5万行情有所下降,具体看综合情况谢谢。

你对这个回答的评价是

}
  1. 无名管道( pipe ):管道是一种半双工的通信方式数据只能单向流动,而且只能在具有亲缘关系的进程间使用进程的亲缘关系通常是指父子进程关系。

  2. 高级进程通信有哪几类管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动则它算是当前程序的子进程,这种方式我们成为高级进程通信有哪几类管噵方式

  3. 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信

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

  5. 信号量( semophore ) : 信号量是一个计数器可以用来控制多个进程对共享资源的访问。它常作为一种锁机制防止某进程正在访问共享资源时,其他进程也访問该资源因此,主要作为进程间以及同一进程内不同线程之间的同步手段

  6. 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生

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

  8. 套接字( socket ) : 套解口也是一种进程间通信机制与其他通信机制不同的是,它可用于不同机器间的进程通信

}

我要回帖

更多关于 高级进程通信有哪几类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信