【问题标题】:What happens if all puma's threads are handling a request and a new connection attempt happens?如果所有 puma 的线程都在处理请求并且发生新的连接尝试会发生什么?
【发布时间】:2022-03-01 21:46:14
【问题描述】:

我习惯于使用节点,该进程将接受任意数量的传入连接。

在 Ruby/puma 中有什么不同?

对于 puma,我需要定义多个线程:这个数字是否定义了服务器可以同时处理的最大请求数?

如果发生以下情况会发生什么:

  1. 我的服务器有长时间运行的请求
  2. 所有线程当前都在处理一个请求

又有新的请求进来了?

套接字是否立即打开但等待有空闲线程? 套接字连接是否会停止,直到有空闲线程? 或者线程可以处理多个请求吗?

【问题讨论】:

    标签: multithreading ruby-on-rails-5 puma


    【解决方案1】:

    这个数字是否定义了服务器可以同时处理的最大请求数?

    这取决于工人和线程的数量。

    最大请求数 = Workers * Threads

    如果在没有空闲线程的情况下有新请求进来会发生什么

    它将被阻塞,直到至少有一个可用的工作线程。

    套接字是否立即打开但等待有空闲线程?

    是的。

    在有空闲线程之前,套接字连接会停止吗?

    没有。

    启动时,Puma 侦听 TCP 或 UNIX 套接字。 Puma 正在使用循环调度跨一组工作线程和线程的请求。 所以Puma启动后socket总是打开的。

    或者线程可以处理多个请求吗?

    没有。

    一个线程一次只能处理一个请求。

    更多详情可以查看https://github.com/puma/puma/blob/master/docs/architecture.md

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2018-07-21
      • 1970-01-01
      • 2020-06-26
      • 2021-05-17
      • 2017-08-10
      相关资源
      最近更新 更多