nginx的高并发性能,众人皆知。如果是我们自己写的服务器软件,能做到这样的高并发吗?昨天我接着上次的代码继续读,看到源码包目录src/os/unix/ngx_writev_chain.c文件,在108行有这样一个函数,如图1:
图 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是空的。
测试程序:
编译运行:
分析:
文件1.txt和文件2.txt中的内容被读到buf1、buf2缓冲区,然后writev以顺序iov[0]至iov[iovcnt-1]从缓冲区中聚集输写数据到文件3.txt,返回值为所有缓冲区长度值和,此处为18。1.txt中9个字符;2.txt中9个字符。
博友学会了吗?当你自己编写软件的时候,不妨尝试着用一下。
图 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是空的。
测试程序:
编译运行:
分析:
文件1.txt和文件2.txt中的内容被读到buf1、buf2缓冲区,然后writev以顺序iov[0]至iov[iovcnt-1]从缓冲区中聚集输写数据到文件3.txt,返回值为所有缓冲区长度值和,此处为18。1.txt中9个字符;2.txt中9个字符。
博友学会了吗?当你自己编写软件的时候,不妨尝试着用一下。