1

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

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

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

4

2 回答 2

5

...找到当前执行Threadruby​​-way 的“唯一”线程 id:

Thread.current.object_id

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

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

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

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

于 2013-09-22T12:23:08.900 回答
3

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

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

#<Thread:0x8301ef4 run>

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

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

希望能帮助到你

于 2013-08-07T22:35:10.273 回答