【发布时间】:2016-10-17 00:33:27
【问题描述】:
我一直在阅读有关 nginx 内部的文章,他们提到 nginx 主进程创建了几个工作进程,并且每个进程都等待同一个端口上的连接。这可以通过 fork 实现,因为 fd 结构是在进程之间共享的。我不明白的是,如果这是它的工作方式,那么accept(fd) 内不会存在跨多个进程的竞争条件吗?也许我对工作进程如何接受请求的理解不清楚
【问题讨论】:
标签: sockets events nginx request
我一直在阅读有关 nginx 内部的文章,他们提到 nginx 主进程创建了几个工作进程,并且每个进程都等待同一个端口上的连接。这可以通过 fork 实现,因为 fd 结构是在进程之间共享的。我不明白的是,如果这是它的工作方式,那么accept(fd) 内不会存在跨多个进程的竞争条件吗?也许我对工作进程如何接受请求的理解不清楚
【问题讨论】:
标签: sockets events nginx request
允许在同一个套接字上有多个侦听器(线程或进程)accepting。在启动连接时,保证一个(并且只有一个)从accept 调用返回。
附带说明,您还可以有多个侦听器recvfroming 同一个套接字(TCP 风格的recving 也是如此,但这是不确定的值)。
【讨论】: