假期day2

进程间通信方式:

通过内核提供的原始通信方式有三种

1.无名管道:没有名字的管道文件,存储在内存上不在文件系统中显示。无名管道有读端和写端,当两端都关闭后无名管道会在内存上消失。无名管道不能用open 函数打开因为它没有真实的名字存在。无名管道只是用于亲缘间的进程的通信,可以自己和自己通信。特点:大小是64K,当管道的读端存在,写管道有多少写多少,直到写满64K后在WRITE处阻塞。当管道读端不存在,写管道会造成管道破裂,内核会向用户发送一个信号导致进程结束。当管道的写端存在,读管道有多少就读多少,没有数据则会在read处阻塞。当管道的写端不存在,读管道有多少读多少,没有数据不会在read处阻塞。

2.有名管道:有名字的管道,会在文件系统中创建一个管道文件。仅仅是用来完成进程间的通信,不用于存储数据。有名管道可以使用open函数打开,所以既可以用于亲缘间通信也可以用非亲缘间进程的通信。

3.信号:信号是终端进程向正在运行的进程发送一个信号让它打断当前正在进行的事情去做另一间事情。用户可以给某个进程发送信号,一个进程也能给另一个进程发送信号,内核也可以给某个进程发送信号。信号有三个操作:默认,捕获,忽略。特点:只起到通知作用不携带数据。

System V提供的进程间通信有三种

1.消息队列:消息队列能够保证信息的不丢失,但时效性较差。消息队列是一种先进先出的队列数据结构,实际上是系统内核中的一个内部链表。消息被顺序插入队列中,其中发送进程将消息添加到队列末尾,接受进程从队列头读取消息。多个进程可同时向一个消息队列发送消息,也可以同时从消息队列中接受消息。消息一旦被读取就从队列中删除。

2.共享内存:共享内存能够保证消息的实时更新但是信息容易丢失。共享内存的操作不是一次性的,当数据被读取后依然存在。共享内存是所有进程间通信方式中效率最高的。所谓共享内存就是使得多个进程可以访问同一块内存空间。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数据处理过程中内存的消耗。

3.信号灯集:信号量是完成多个进程之间的同步机制。一个信号灯集中可以有多个信号灯,每个信号灯集控制一个进程,每个灯维护了一个value值,当value值为0则一直阻塞,当为1则解除阻塞。

套接字通信:是网络通信中使用的介质,是一种特殊文件,可以实现通过网络跨主机进行通信。有两种通信方式分别是TCP和UDP。

你可能感兴趣的:(网络)