Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1359080
  • 博文数量: 166
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 4061
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-11 13:45
个人简介

现任职北京某互联网公司运维经理,高级架构师,涉足互联网运维行业已经超过10年。曾服务于京东商城,互动百科等互联网公司,早期运维界新星。 长期专研,C语言开发,操作系统内核,大型互联网架构。http://www.bdkyr.com

文章分类

分类: 架构设计与优化

2014-04-08 11:38:38

      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个字符。
      
      博友学会了吗?当你自己编写软件的时候,不妨尝试着用一下。
阅读(4568) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~