开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 29 天,点击查看活动详情
今天来学习下Go常见的习题问题(三十九),也是面试中可能会遇到的,让我们来一起学习吧~
进程间的通信
- 管道
ps auxf | grep nginx
在linux层面中,上述代码中是通过|作为一个管道,它的功能就是将前一个命令的输出结果,作为下一个命令的输入,管道传输数据的单向的,如果要是实现双工通信,需要创建两个管道,这种管道是没有名字的,俗称匿名管道用完即销毁,管道的通信方式效率低,不适合进程间频繁交换数据
- 消息队列 消息队列可以解决频繁交换信息的问题,消息队列是保存在内核中的消息链表,发送的数据会被分成独立的数据单元,消息体是用户自定义的数据类型,如果没有释放消息队列或者关闭操作系统,消息队列就不会消失,那么这种模式就类似于平时发邮件一样,A发送一封,B发送一封
消息队列不能传输数据量很大的文件,在内核中每个消息体都有一个最大长度限制,队列长度也有限制,另一方面,消息队列通信的过程中,存在用户态与内核态之间的数据拷贝开销,写入数据的时候,会从用户态转到内核态将数据写入
- 共享内存 共享内存的机制就是,将虚拟内存地址映射到相同的物理内存地址中,这样写入数据的时候,另一个进程就能立刻看到,就减少了数据拷贝的开销,提高了进程间通讯速度
总结
今天浅谈了Go的习题(三十九),参考资料图解操作系统,接下来会继续分享其他的习题的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!