Skip to content

Latest commit

 

History

History
24 lines (12 loc) · 990 Bytes

零拷贝.md

File metadata and controls

24 lines (12 loc) · 990 Bytes

前言

零拷贝是网络编程的关键,很多性能优化都离不开零拷贝,本文就零拷贝分析下Java常用的零拷贝、NIO零拷贝。

正文

1. 再看IO

在深入零拷贝机制之前,先来了解下传统BIO通信底层发生了什么,为什么会这么“消耗资源”。Linux服务器是现在绝大多数系统的首选,它的优点就不再赘述,下面的分析都基于Linux环境来进行。作为一台服务器,最常见的功能就是 获取客户端发送过来的请求,然后再去查数据库DB获取到想要的数据,再将数据以一定的业务逻辑处理后传回给客户端,这一过程主要会调用Linux内核的以下两个函数:

read(file, tmp_buf, len);

write(socket, tmp_buf, len);

2. mmap和sendFile零拷贝

在Java程序中,常用的零拷贝有mmap(内存映射)和sendFile。让我们回到IO底层,在Java中,一次IO操作在操作系统底层都做了哪些工作。