共享内存

简介: 共享内存

共享内存

共享内存是针对其他通信机制运行效率较低而设计的,它可以让多个进程可以可以直接读写同一块内存空间,是最快的IPC形式。
为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。
由于多个进程共享一段内存,因此需要依靠某种同步机制来达到进程间的同步和互斥。
信号量

信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它是一种类似于锁的机制,就是防止某进程正在访问共享资源时,其他进程也访问该资源。参考这里。

Socket

Socket就是套接字,套接字也是一种通信机制,凭借这种机制,可以让不在同一台主机上的两个进程,通过网络进行通信,一般可以用在客户端和服务器之间的通信。
实际上,Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 协议的传输层里面复杂的操作,抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。
延伸问题:Socket通信流程是怎样的?

概括地说,就是通信的两端都建立了一个 Socket ,然后通过 Socket 对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。
对于客户端,它的的过程比较简单,首先创建 Socket,通过TCP连接服务器,将 Socket 与远程主机的某个进程连接,然后就发送数据,或者读取响应数据,直到数据交换完毕,关闭连接,结束 TCP 对话。
对于服务端,先初始化 Socket,建立流式套接字,与本机地址及端口进行绑定,然后通知 TCP,准备好接收连接,调用 accept() 阻塞,等待来自客户端的连接。如果这时客户端与服务器建立了连接,客户端发送数据请求,服务器接收请求并处理请求,然后把响应数据发送给客户端,客户端读取数据,直到数据交换完毕。最后关闭连接,交互结束。
延伸问题:从TCP连接的角度说说Socket通信流程。

首先是三次握手的Socket交互流程。

服务器调用 socket()、bind()、listen() 完成初始化后,调用 accept() 阻塞等待;
客户端 Socket 对象调用 connect() 向服务器发送了一个 SYN 并阻塞;
服务器完成了第一次握手,即发送 SYN 和 ACK 应答;
客户端收到服务端发送的应答之后,从 connect() 返回,再发送一个 ACK 给服务器;
服务器 Socket 对象接收客户端第三次握手 ACK 确认,此时服务端从 accept() 返回,建立连接。
接下来就是两个端的连接对象互相收发数据。
然后是四次挥手的Socket交互流程。

某个应用进程调用 close() 主动关闭,发送一个 FIN;
另一端接收到 FIN 后被动执行关闭,并发送 ACK 确认;
之后被动执行关闭的应用进程调用 close() 关闭 Socket,并也发送一个 FIN;
接收到这个 FIN 的一端向另一端 ACK 确认。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
8月前
mmap实现共享内存
mmap实现共享内存
103 0
|
存储 并行计算 算法
C++进程间通信之共享内存
C++进程间通信之共享内存
802 0
|
8月前
|
Linux
进程通信——共享内存
进程通信——共享内存
109 0
|
存储
进程间通讯-共享内存
进程间通讯-共享内存
60 0
|
Linux C语言
进程内存空间
进程内存空间
45 0
【共享内存】
【共享内存】
77 0
|
C语言 C++
进程间通信(二)/共享内存
学习进程间通信的第二种方法:共享内存。了解共享内存和管道的区别,共享内存的优缺点。以及通过代码来感受共享内存实现的进程间通信。
进程间通信(二)/共享内存
使用共享内存作为进程互斥锁的代码
使用共享内存作为进程互斥锁的代码
116 0
进程间通信——共享内存
进程间通信——共享内存
217 0
进程间通信——共享内存
|
C++
进程间通信:共享内存2
http://blog.csdn.net/ljianhui/article/details/10253345   #include #include #include #include #include #include #include #include #include #i...
886 0