管道

我对管理的理解,就是管道有点像HTTP长连接。

以某条指令为例:

1、客户端进程调用write将消息写到操作系统内核为套接字分配的发送缓冲send-buffer。

2、客户端操作系统内核将发送缓冲的内容发送到网卡,网卡硬件将数据通过「网际路由」送到服务器的网卡。

3、服务器操作系统内核将网卡的数据放到内核为套接字分配的接收缓冲recv-buffer。

4、服务器进程调用read从接收缓冲中取出消息进行处理。

5、服务器进程调用write将响应消息写到内核为套接字分配的发送缓冲send-buffer。

6、服务器操作系统内核将发送缓冲的内容发送到网卡,网卡硬件将数据通过「网际路由」送到客户端的网卡。

7、客户端操作系统内核将网卡的数据放到内核为套接字分配的接收缓冲recv-buffer。

8、客户端进程调用read从接收缓冲中取出消息返回给上层业务逻辑进行处理。

9、结束。

这里就是标准的TCP/IP的网络协议,write操作只负责将数据写到本地操作系统内核的发送缓冲然后就返回了。剩下的事交给操作系统内核异步将数据送到目标机器。但是如果发送缓冲满了,那么就需要等待缓冲空出空闲空间来,这个就是写操作 IO 操作的真正耗时。

read操作只负责将数据从本地操作系统内核的接收缓冲中取出来就了事了。但是如果缓冲是空的,那么就需要等待数据到来,这个就是读操作 IO 操作的真正耗时。

也就是说write操作几乎没有耗时,直接写到发送缓冲就返回,而read就会比较耗时了,因为它要等待消息经过网络路由到目标机器处理后的响应消息,再回送到当前的内核读缓冲才可以返回。

因此,所谓的管道,就是客户端拼命的向send-buffer压入指令,压到send-buffer满为止,这样一次网络通信就可以一次性发送多条指令到服务器,而服务器也一次性返回多条应答结果。

发布了167 篇原创文章 · 获赞 10 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章