【问题标题】:How nginx multiplexes a single socketnginx如何多路复用单个socket
【发布时间】:2016-10-17 00:33:27
【问题描述】:

我一直在阅读有关 nginx 内部的文章,他们提到 nginx 主进程创建了几个工作进程,并且每个进程都等待同一个端口上的连接。这可以通过 fork 实现,因为 fd 结构是在进程之间共享的。我不明白的是,如果这是它的工作方式,那么accept(fd) 内不会存在跨多个进程的竞争条件吗?也许我对工作进程如何接受请求的理解不清楚

【问题讨论】:

    标签: sockets events nginx request


    【解决方案1】:

    允许在同一个套接字上有多个侦听器(线程或进程)accepting。在启动连接时,保证一个(并且只有一个)从accept 调用返回。

    附带说明,您还可以有多个侦听器recvfroming 同一个套接字(TCP 风格的recving 也是如此,但这是不确定的值)。

    【讨论】:

    • 这清除了大部分事情!所以每个工作进程就像一个事件循环,等待它接受的 fd?
    • recvfrom 的多个听众究竟有什么好处?
    • @FaizHalde,如果每个数据报都可以独立处理(通常是这种情况),这将为您提供一种非常简单的方法来并行处理它们。
    猜你喜欢
    • 2017-03-14
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多