前面提到进程间通信的几种方式这里进行一个铺开
由于管道仅仅是将一个进程的读端和另一个进程的写端连通的单通信方法,所以又叫“半双工管道”。在shell中管道用“|”表示。
管道的历史很悠久了。
管道部分这篇讲的清楚了,栗子也在里面,我就留着篇幅写别的啦。
1、消息队列是内核地址空间中的内部链表,通过Linux内核在不同的进程间传递消息。
2、消息顺序的发送到消息队列中,并以几种不同的方式从队列中获取。
3、内核中的消息队列是通过IPC标识符来进行区别的,不同消息队列之间是互相独立的。
4、每个消息队列中的消息又构成一个独立的链表。
我把它看作一个“丰巢”。
我的第一个服务器项目分了前后端,而其中前后端的数据通讯就是使用shm共享内存的方式,所以对于这块会比较有感觉。
1、共享内存是在多个进程之间共享内存区域的一种进程间的通信方式。
2、它是在多个进程间通过对指定内存段进行映射实现内存共享的。
3、这是IPC最快捷的方式,因为它没有中间商赚差价。
4、多个进程间共享的是同一块物理空间,仅仅是挂载地址不同而已,因此不需要进行复制,可以直接使用这段空间。
1、mmap()函数用来将文件或者设备映射到内存中。
2、mmap的特点是按需调页。最开始只申请vma,并不调真正的页。当对某些页进行引用的时候,会引起一个缺页中断,再将页面调入到内存当中,这样避免了对内存的浪费。
mmap的优势: 操作文件就像操作内存一样,适合于对较大文件的读写。
mmap的缺点:
1、文件如果很小,比如60bytes,由于在内存当中的组织都是按页组织的,将文件调入到内存当中是一个页4k,这样其他的4096-60=4036 bytes的内存空间就会浪费掉了。