Как ведут себя потоки Ruby 1.8 в Phusion Passenger? - PullRequest
1 голос
/ 25 октября 2011

Если я запускаю 1 или 1000 из них в действии контроллера:

Thread.new {
  # do some stuff
}
  1. Будут ли они действительно работать асинхронно с запросом http?
  2. Если возникает исключениегде это доходит до?
  3. Что-нибудь еще, о чем я должен знать?

1 Ответ

0 голосов
/ 25 октября 2011

Потоки и исключения не обязательно являются друзьями, поскольку исключения не могут выпасть из текущего потока и предупредить родительский поток. Вам также необходимо включить уведомления об исключениях потоков, иначе вы никогда о них не услышите:

Thread.new do
  Thread.abort_on_exception = true
end

Вам также нужно будет вызывать Thread.join в каждом новом потоке, иначе основной будет работать без них.

Таким образом, ваш код по крайней мере остановится на исключении, вместо того, чтобы просто завершить поток, который его сгенерировал, и продолжить, как будто ничего не произошло.

Убедитесь, что вещи, которые вы вызываете в своей ветке, потокобезопасны, иначе вы можете получить неожиданные результаты.

...