Tag: 螺纹安全

你如何为高吞吐量multithreadingRails应用选择gem?

基本上,我被EventMachine烧毁,声称JRuby兼容性,但java实现在标准模式中的线程安全问题上失败( Thread.new{EM.run}在JRuby下不起作用) – 我们说的是非常基本的EM函数这里。 不幸的是,大多数JRubygem都是以前在正确的multithreading环境中没有真正使用的MRIgem(偶尔会有乘客的Thread.new不计算),有点编码为合理的线程安全并且在JRuby中“调整直到测试为绿色”。 考虑到捕获和测试线程安全问题的难度,可以合理地假设这些gem中的许多都会在负载下中断。 当然,基准测试将确定许多这些问题,但基准测试通常很难用于更复杂的工作流程(例如“与第三方登录用户事务处理”),并且几乎肯定会泄漏有趣且难以将错误捕获到生产中足够复杂的应用程序。 所以问题是,如果您有运行相对复杂的高吞吐量multithreadingrails应用程序的经验, 你如何选择gem? (有资源列出经过实战考验的gem等) 如何在部署之前测试线程安全性以及测试后问题多久会泄漏到生产中? 平均而言,您是否经常遇到声称线程安全和/或jruby合规性的gem中的线程安全问题? gem更新多久烧一次你?

在Mongoid中find_or_create_by是否安全?

我有一个使用Mongoid的find_or_create_by方法的Web应用程序。 poll = Poll.find_or_create_by(fields) 在我们投入生产之前,我正在尝试运行故障情况,并且我发现多个用户可以尝试使用此方法访问此资源。 是否有可能创建同一对象的多个实例? 我该怎么做才能防止这种情况发生?

Rails引擎线程安全 – ActiveResource

我的Rails 3.1应用程序使用引擎,我想知道访问此引擎是否是线程安全的。 我在引擎中有/lib/mymodule.rb,它看起来像这样: module MyModule def self.my_method() begin data = WebResource.find(:all) # Where WebResource < ActiveResource::Base rescue data = nil end return data end end 然后在我的视图/控制器中,我将此方法称为: MyModule::WebResource.headers[:some_id] = cookies[:some_id] MyModule::my_method() 在我的主应用程序中,我有线程安全! 配置选项集。 我知道线程安全! 启用后,每个Controller都存在于每个请求的自己的线程中。 但是,这个模块线程安全吗? 我怀疑这个模块只有一个副本用于所有请求,因此它本身并不是线程安全的,并且需要使用类似Mutex的手动同步。 具体来说,我有一些代码,用于在ActiveResource类WebResource 之外设置HTTP请求的标头。 这会导致线程问题吗?

在请求期间设置Time.zone:线程安全吗?

我想让我的应用用户指定一个时区,然后在每个请求的开头设置他们的时区。 在Rails,AFAICT中,这是通过设置单例对象来完成的: Time.zone = “America/Los_Angeles” 我对最佳实践的理解是,一般来说,应该将单例设置为ONCE。 例如,在应用程序配置中。 从类似问题的答案,有人建议在ApplicationController中设置它 class ApplicationController ‘London’ Time.zone = current_user.time_zone if current_user && current_user.time_zone end end 这样安全吗? 或者我冒一个线程影响另一个线程的风险? 我将尝试对此进行测试,但这不是最简单的测试方案,所以我想我应该看看是否有人已经这样做了。

线程安全的Rails控制器操作 – 设置实例变量?

我必须编写一个线程化的Rails应用程序,因为我在Neo4j.rb上运行它,它在Rails进程中嵌入了一个Neo4j图形数据库,因此我必须提供来自同一进程的多个请求。 是的,如果连接到像SQL数据库一样的Neo4j数据库会很酷,但事实并非如此,所以我会放弃抱怨而只是使用它。 我非常担心编写并发代码的含义(我应该这样做),只需要一些关于如何处理常见情况的建议 – 控制器在会话哈希中设置实例变量或变量,然后是一些东西发生。 考虑以下原始代码来certificate我的意思: # THIS IS NOT REAL PRODUCTION CODE # I don’t do this in real life, it is just to help me ask my question, I # know about one-way hashing, etc.! class SessionsController def create user = User.find_by_email_and_password(params[:email], params[:password]) raise ‘auth error’ unless user session[:current_user_id] = user.id redirect_to :controller […]