zoco

《Linux高性能服务器编程》

2016-03-21


使用“池”以牺牲空间换取效率,使用零拷贝函数以避免内核和用户空间的切换等 ;其次,介绍一些高效的编程模式及其应用,比如使用有限状态机来分析用户数据,使用进程池或线程池来处理用户请求。

NTYktK.png

正向代理要求客户端自己设置代理服务器的地址。客户的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。比如处于防火墙内的局域网机器要访问Internet,或者要访问一些被屏蔽掉的国外网站。

反向代理则被设置在服务器端,因而客户端无需进行任何设置。反向代理是指用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。在这种情况下,代理服务器对外就表现为一个真实的服务器。

NTYJ1g.png

Linux服务器程序必须处理三类事件:I/O事件、信号和定时事件。

两种高效的事件处理模式:Reactor和Proactor事件处理模式。同步I/O模型通常用于实现Reactor模式,异步I/O模型则用于实现Proactor模式。

NTY2u9.png

NTYRBR.png

NTYhAx.png

NTYo9O.png

如果程序是计算密集型的,并发编程并没有优势,反而由于任务的切换使效率降低。但如果程序是I/O密集型的,比如经常读写文件、操作数据库等,则情况就不一样了。