Ruby on rails 线程如何在RubyonRails中工作?

Ruby on rails 线程如何在RubyonRails中工作?,ruby-on-rails,ruby,multithreading,Ruby On Rails,Ruby,Multithreading,我需要一些帮助,因为我在rails中有一段代码,将在email\u open\u order操作中执行,以便我可以在后台运行电子邮件任务并发布GUI def email_open_order @order_list = OpenOrder.where(:user_id => current_user) t = Thread.new { invoke_webservice method: 'post', action: 'send_open_order', data: { cus

我需要一些帮助,因为我在rails中有一段代码,将在
email\u open\u order
操作中执行,以便我可以在后台运行电子邮件任务并发布GUI

def email_open_order  
  @order_list = OpenOrder.where(:user_id => current_user)
  t = Thread.new { invoke_webservice method: 'post', action: 'send_open_order', data: { custNo: current_user,custEm: session[:buyer_email], orders: @order_list} }

  at_exit { t.join }
end
invoke_webservice
方法调用web服务,即HTTP POST并向用户组发送电子邮件

交付所有未结订单列表所需的正常时间为
87.12

Benchmark.measure { invoke_webservice method: 'post', action: 'send_open_order', data: { custNo: current_user,custEm: session[:buyer_email], orders: @order_list} }
=> 0.010000 0.000000 0.010000 ( 87.124463)
当我创建一个新线程并将
invoke\uwebservice
方法传递给threadblock时,它就会开始发送邮件,GUI就会被释放

我想知道当代码块的执行完成/失败时线程会发生什么情况

线程是否终止或保持睡眠模式

这根线是怎么工作的?它会创建一个新的PID吗

我使用Unicorn作为我的web服务器


提前感谢

它不会创建新的PID(因为这意味着一个新进程而不是一个新线程)。当线程完成您的工作时,它将终止


通常,rails应用程序通过使用延迟作业、sidekiq等在单独的进程中处理这些作业,而不是在应用程序中创建线程来实现这一点——请求完成后,web服务器进程的生存时间通常不确定(乘客根据负载启动/终止应用程序进程)而且您对这些线程的状态没有太多的可见性。

我明白了,但是一旦线程终止,它会不会导致任何问题。 我有一个应用程序,我需要发送邮件,我不想使用任何背景工作

我创建的线程只需7秒即可处理和终止,是否需要销毁线程对象,如:

thread = Thread.new { 4+7 }
thread.destroy