basyura's blog

あしたになったらほんきだす。

マルチスレッド対応できるのか?

AccountController#login のソースをちょっと見てみたらびっくりしたんだけど

class AccountController < ApplicationController
  def login
    if request.get?
      # Logout user
      self.logged_user = nil
・・・省略・・・
private
  def logged_user=(user)
    if user && user.is_a?(User)
      User.current = user
      session[:user_id] = user.id
class User < ActiveRecord::Base
  def self.current
    @current_user ||= User.anonymous
  end

User クラスのインスタンス変数にセットしてるわけだけど、これって rails が 1 リクエストに対して 1 プロセスを使用して処理しないといけないから成り立つわけで、メモリ領域を共有するマルチスレッド対応にしようとしたら泣けそうな気がするんだけど。
rails 2.2 からはマルチスレッド対応だーって盛り上がってるのになぁ。
rails アプリは 1 プロセスでの動作を前提につくるものなんだろうか?
それとも User.current = user なんて処理はスレッドローカルになってるのか?なわけないよなぁ。不思議。