场景
服务端主动给客户端发送一条简单的TCP消息,具体的消耗有多大?
所经历的步骤
将数据二进制序列化
- 服务器的代码一般都已经全部加载到内存中了,于是不需要去硬盘上读取
- 去内存的指定位置调出逻辑代码
- 将指令 Decode 成 CPU 可以直接执行的指令
- 将指令存入CPU的 高速缓存 和 **指令寄存器(IR)**中
- 去内存的指定位置调出要编码的数据
- 将数据存入CPU的 高速缓存 和 数据寄存器(DR) 中
- 执行序列化的逻辑运算
补充内容:
- Fetch-Decode-Execute Cycle
- 六大寄存器
应用层发送数据
- 获得 Socket 句柄
- 调用 socket 的 write 函数
- 将CPU寄存器中的数据写到内核栈,保留当前程序运行环境
- 从用户态切换到内核态,将 二进制数据 拷贝到 socket 的 write 缓冲区中
- 将内核栈中的数据还原到CPU寄存器中,恢复上下文切换前的程序运行环境
- 从内核态回到用户态
补充内容:
- socket write 是线程不安全的
- writ