《构建高性能web站点》–服务器并发处理能力(3)

作者:heyue 时间:2011-03-31 分类:互联网技术 评论:2 条 浏览:3210

继续昨天晚上的总结,每天学习一点,打算在这个月把所有的学习完,然后再细分一下每个地方,这一章太牛逼了,它完全可以把一个菜鸟编程一个中鸟。

总结一:系统调用

进程的运行态分为用户态和内核态两种运行模式,进程可以在这两种运行模式下切换,当然会有一定的开销。一般情况下,程序进行数据的运算,以及内存中数据的管理都是在用户态的,但是一旦要写磁盘、发送网络数据,就得切换到内核态进行系统调用,因为系统调用有更多的权利控制计算机,内核态完成后之后切换回用户态,这个比较好理解。

系统调用在linux下的查看方式,strace -p pid 就可以查看到一个进程的运行的系统调用了,这是nginx的子进程空闲的时候的strace过程。

[root@centos www]# strace -p 6991
Process 6991 attached - interrupt to quit
gettimeofday({1301575497, 166608}, NULL) = 0
epoll_wait(14, {}, 512, 500) = 0
gettimeofday({1301575497, 667346}, NULL) = 0
epoll_wait(14, {}, 512, 500) = 0
gettimeofday({1301575498, 167645}, NULL) = 0
epoll_wait(14, {}, 512, 500) = 0
gettimeofday({1301575498, 667913}, NULL) = 0

总结2:nginx的内存管理概况

nginx可以用多线程的方式来处理请求,线程之间可以共享内存资源,及时申请,及时释放,这让nginx的内存占用很低。官方介绍,nginx维护10000个非活跃的http连结只需要2.5m的内存,太bt了,2.5m的内存能做什么。

总结3:长连接的利弊

长连接是TCP层的一个概念,就是一次连结多次发送数据,因为建立连接的代价太大,需要3次握手确认,如果能重用连结,将减少不少的开销。

好处:提高了连结的重用,提高传输速度。如果是用户批量下载小图标、小图片之类的操作,用长连接可以大大提高速度。

弊端:比如apache 的进程数有限,但是它也必须在没有传输数据的时候继续维护这个长连接,就是占着茅房不xx,这个在上茅房的人很多的时候将严重影响别人的身体健康。

总结4:长连接协商

如果客户端浏览器支持长连接,它会在请求的时候发送一个

connection: Keep-Alive 的头(对于IE7,这个时间默认60s)

如果服务器设置了支持长连接,就会返回一个头(比如apache)

Keep-Alive: timeout=5,max=100(表示长连接持续5s,最多传输100次)

长连接时间是以短的那个为准。

标签:

相关推荐
更多