2、深究pipeline
在上述简介中,提到了管道技术优化的是网络传输的耗时时间,这里通过Redis客户端-服务端的一次完整的网络请求来回,深入探索pipeline的本质。
-
客户端调用write将数据写入操作系统内核(kernel)为socket连接分配的发送缓冲区(send buffer)
-
客户端操作系统内核将发送缓冲区(send buffer)的数据发送到网卡(NIC)
-
网卡(NIC)将数据通过路由(route)将数据送到Redis服务器机器网卡(NIC)
-
服务器操作系统内核(kernel)将网卡(NIC)接收的数据,写入内核为socket分配的接收缓冲区(recv buffer)
-
服务器进程从接收缓冲区调用read读取数据,并进行数据逻辑处理
-
数据处理完成之后,服务器进程调用write将响应数据写入操作系统内核为socket分配的发送缓冲区
-
操作系统内核将发送缓冲区的数据发送到服务器网卡
-
服务器网卡将响应数据通过路由发送到客户端网卡
-
客户端网卡接收响应数据
-
客户端操作系统内核读取网卡接收到的服务器响应数据,并写入操作系统为socket连接分配的介绍缓冲区
-
客户端进程调用read从接收缓冲区中读取