在阅读 REMOVING CONFIG.THREADSAFE! 的时候,发现下面一段代码:
class UsersController < ApplicationController
@counter = 0
class << self
attr_accessor :counter
end
trap(:INFO) {
$stderr.puts "Count: #{UsersController.counter}"
}
def index
counter = self.class.counter # read
sleep(0.1)
counter += 1 # update
sleep(0.1)
self.class.counter = counter # write
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
end
我对上面的代码有一些不理解。我们知道 Rails 为每一个 Action 都会创建一个新的 Controller 实例, 那么这段代码其实想表达的应该上为 UserController 添加一个 @@counter = 0 然后再并发请求发现 @@counter 的值会与请求数量不一样。