我在 JRuby 1.7 上使用带有 Puma 的 Rails3,并 config.threadsafe!
启用了线程模式 ()。
现在按照理论:对于进来的多个客户端请求,将使用一个新线程来为用户提供服务,而不是每次都启动一个新的 rails 进程。
如果我想找到这个新请求线程的 id,我该怎么做?
我在 JRuby 1.7 上使用带有 Puma 的 Rails3,并 config.threadsafe!
启用了线程模式 ()。
现在按照理论:对于进来的多个客户端请求,将使用一个新线程来为用户提供服务,而不是每次都启动一个新的 rails 进程。
如果我想找到这个新请求线程的 id,我该怎么做?
...找到当前执行Thread
ruby-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
对象本身,该对象本身不会被应用程序/服务器重用(回收)。
为此,您会发现以下方法很有用:
Thread.current
获取当前正在执行的线程
#<Thread:0x8301ef4 run>
Thread.list
为所有可运行或已停止的线程获取 Thread 对象数组。
[
[0] #<Thread:0x8301ef4 run>
]
希望能帮助到你