天天看点

nginx研究之“writev函数”

      nginx的高并发性能,众人皆知。如果是我们自己写的服务器软件,能做到这样的高并发吗?昨天我接着上次的代码继续读,看到源码包目录src/os/unix/ngx_writev_chain.c文件,在108行有这样一个函数,如图1:

nginx研究之“writev函数”

图 1

      从函数名字理解,我只知道,这个函数跟写操作有关系,类似于write函数,但是这两个的区别,我并不知道。既然Igor Sysoev把它用在了这里,说明从性能方面考虑,它是优于write函数的。作为研究,我google,明白了write的用法,下面是一个小实例:

函数:

        ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

        ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

说明:readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。

实例:

        测试文件:

        1.txt

        2.txt 

        3.txt     #文件3.txt是空的。

nginx研究之“writev函数”

       测试程序:

nginx研究之“writev函数”
nginx研究之“writev函数”

编译运行:

nginx研究之“writev函数”

分析:

     文件1.txt和文件2.txt中的内容被读到buf1、buf2缓冲区,然后writev以顺序iov[0]至iov[iovcnt-1]从缓冲区中聚集输写数据到文件3.txt,返回值为所有缓冲区长度值和,此处为18。1.txt中9个字符;2.txt中9个字符。

      博友学会了吗?当你自己编写软件的时候,不妨尝试着用一下。

继续阅读