时间:2021-07-16 | 标签: | 作者:Q8 | 来源:网络
小提示:您能找到这篇{怎么实现一个网站的Web Server(上)}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的怎么实现一个网站的Web Server(上)内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。那么怎么实现一个网站的Web Server? 单线程 + Non-Blocking
Vino 整体采用了基于事件驱动的单线程 + Non-Blocking 模型。采用单线程模型,避免了系统分配多线程及线程之间通信的开销,同时降低了内存的耗用。由于采用了单线程模型,为了更好的提高线程利用率,Vino 将默认 Blocking 的 I/O 设置为 Non-Blocking I/O,即在线程读/写数据的过程中,如果缓冲区为空/缓冲区满,线程不会阻塞,而是立即返回,并设置 errno。
Vino 最初的灵感来源于 Computer Systems: A Programmers Perspective 一书讲述网络编程时实现的一个简单的 Web Server,每到来一个请求,Web Server 都会 fork 一个进程去处理。显然,在高并发的场景下,这种模型是不合理的。每次 fork 进程会带来巨大的开销,并且系统中进程的数量是有限的。同时,伴随多进程带来的进程调度的开销也不可小觑,CPU 会花费大量的时间用于决定调用哪一个进程。进程调度引发的进程上下文之间的切换,也需要耗费相当大的资源。
很容易联想到采用多线程模型来替代多进程模型,相比于多进程模型,多线程模型占用的系统资源会大大降低,但是本质上并没有减小线程调度带来的开销。为了减小由线程调度导致的开销,我们可以采用线程池模型,即固定线程的数量,但是问题依旧存在:因为 Linux 默认 I/O 是阻塞(Blocking)的,如果线程池中所有的线程同时阻塞于正在处理的请求,那么新到来的请求就没有线程去处理了。因此,如果我们用 Non-Blocking 的 I/O 替换默认的 Blocking I/O,线程将不会阻塞于数据的读写,问题便可得到解决。
HTTP Keep-Alive
Vino 支持 HTTP 长连接(Persistent Connections),即多个请求可以复用同一个 TCP 连接,以此减少由 TCP 建立/断开连接所带来的性能开销。每到来一个请求,Vino 会对请求进行解析,判断请求头中是否存在 Connection: keep-alive 请求头。如果存在,在处理完一个请求后会保持连接,并对数据缓冲区(用于保存请求内容,响应内容医药营销平台)及状态标记进行重置,否则关闭连接。
以上就是小编对要做电视广告于怎么实现一个网站的Web Server的解答。
|
上一篇:移动端网站建设怎么才能做好?
下一篇:怎么实现一个网站的Web Server(下)
小提示:您应该对本页介绍的“怎么实现一个网站的Web Server(上)”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通怎么实现一个网站的Web Server(上)的相关事宜。
关键词:怎么实现一个网站的Web