nginx研究之“writev函数”

简介:       nginx的高并发性能,众人皆知。如果是我们自己写的服务器软件,能做到这样的高并发吗?昨天我接着上次的代码继续读,看到源码包目录src/os/unix/ngx_writev_chain.c文件,在108行有这样一个函数,如图1: 图 1       从函数名字理解,我只知道,这个函数跟写操作有关系,类似于write函数,但是这两个的区别,我并不知道。
      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个字符。
      
      博友学会了吗?当你自己编写软件的时候,不妨尝试着用一下。
目录
相关文章
|
应用服务中间件 网络安全 nginx
Nginx学习研究-Nginx 安装 SSL 配置 HTTPS
Nginx学习研究-Nginx 安装 SSL 配置 HTTPS
393 0
|
6月前
|
Java Serverless 应用服务中间件
Serverless 应用引擎产品使用合集之Web函数启动的Spring Boot项目可以通过什么方式配置Nginx
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
Java 应用服务中间件 nginx
Spring Boot 学习研究笔记(二十)-docker部署SpringBoot使用nginx配置域名
Spring Boot 学习研究笔记(二十)-docker部署SpringBoot使用nginx配置域名
313 0
|
负载均衡 算法 应用服务中间件
Nginx学习研究-Nginx配置详解
Nginx学习研究-Nginx配置详解
|
应用服务中间件 Linux nginx
Nginx学习研究-Docker安装Nginx 实现反向代理
Nginx学习研究-Docker安装Nginx 实现反向代理
206 0
|
前端开发 应用服务中间件 程序员
nginx中SSI问题的研究
nginx中SSI问题的研究
234 0
|
Web App开发 应用服务中间件 Linux
《深入理解Nginx:模块开发与架构解析》一第1章 研究Nginx前的准备工作1.1 Nginx是什么
本节书摘来自华章出版社《深入理解Nginx:模块开发与架构解析》一书中的第1章,第1.1节,作者 陶辉,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1601 0
|
23天前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
55 7
|
2月前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
19天前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?