【问题标题】:Finding current Thread Id with JRuby on Rails使用 JRuby on Rails 查找当前线程 ID
【发布时间】:2013-09-30 18:57:24
【问题描述】:

我在启用线程模式 (config.threadsafe!) 的 JRuby 1.7 上使用带有 Puma 的 Rails3。

现在按照理论:对于进来的多个客户端请求,将使用一个新线程来为用户提供服务,而不是每次都启动一个新的 Rails 进程。

如果我想找到这个新请求线程的id,我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 multithreading jruby jrubyonrails


    【解决方案1】:

    ...查找当前正在执行的Thread ruby​​-way 的“唯一”线程 id:

    Thread.current.object_id
    

    这将适用于所有红宝石,但它可能不是真正“独特的”......看到一些服务器(并且 puma 也可能这样做)可能会重新使用“本机”线程(例如使用固定线程池)因此对于一个接一个地执行的 2 个请求,ID 可能实际上是相同的。

    根据实现细节,它可能是一个不同的 ruby​​ Thread(虽然不太可能)对象,但在 JRuby 下将是相同的 Java 线程......您可以使用以下方法获得“本机”java.lang.Threadid

    JRuby.reference(Thread.current).native_thread.id
    

    一般来说,如果您需要每个请求真正独特的东西,您应该基于例如(Rack/Rails) Request 对象本身不被应用程序/服务器重用(回收)。

    【讨论】:

      【解决方案2】:

      为此,您会发现以下方法很有用:

      Thread.current 获取当前正在执行的线程

      #<Thread:0x8301ef4 run>
      

      Thread.list 为所有可运行或已停止的线程获取 Thread 对象数组。

      [
          [0] #<Thread:0x8301ef4 run>
      ]
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2015-01-25
        • 2011-03-18
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多