gpt4 book ai didi

algorithm - 非 fork Web 服务器如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:29:53 27 4
gpt4 key购买 nike

非 fork (也称为单线程或基于 select())的网络服务器,如 lighttpd 或 nginx越来越受欢迎。

虽然有大量文档解释了 fork 服务器(位于各种级别的细节),非 fork 服务器的文档很少。

我正在寻找鸟瞰如何非 fork 网络服务器工作的观点。(伪)代码或状态机图,精简到裸露最低限度,那就太好了。

我知道以下资源并发现它们很有帮助。

但是,我对原理感兴趣,而不是实现细节。

具体来说:

  • 为什么这种类型的服务器有时称为非阻塞,而 select() 本质上是阻塞的?

  • 请求的处理可能需要一些时间。在没有特定监听器线程或进程的这段时间内,新请求会发生什么情况?请求处理是否以某种方式中断或时间片化?

编辑:据我了解,在处理请求时(例如文件读取或 CGI 脚本运行)服务器无法接受新连接。这是否意味着这样的服务器可能会错过很多如果 CGI 脚本运行 2 秒左右,新连接的数量?

最佳答案

基本伪代码:

setup
while true
select/poll/kqueue
with fd needing action do
read/write fd
if fd was read and well formed request in buffer
service request
other stuff
  • 虽然 select() & friends 阻塞,但套接字 I/O 没有阻塞。只有在您有乐趣可做时,您才会被阻止。
  • 处理单个请求通常涉及从文件(静态资源)或进程(动态资源)读取文件描述符,然后写入套接字。这可以轻松完成,无需保留太多状态。
  • 所以上面的服务请求通常意味着打开一个文件,将其添加到select 的列表中,并注意从那里读取的内容会输出到某个套接字。适当时用 FastCGI 替换文件。

编辑:

  • 不确定其他的,但 nginx 有 2 个进程:一个主进程和一个工作进程。 master 进行监听,然后将接受的连接提供给 worker 进行处理。

关于algorithm - 非 fork Web 服务器如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/912974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com