jRuby与Rails 4的好处

问题描述 投票:1回答:1

我正在考虑转移到jRuby,我仍然不确定一切是如何工作的,但让我们考虑一下这种假设情况。

一个user 1在我的应用程序中加载一个页面需要大约2.5秒,并且在执行中大约500msuser 2尝试打开不同页面,需要1秒钟才能加载。

如果我的估计是正确的,那么如果您使用单个过程在MRI中运行它会发生什么:

  1. 用户1等待他的页面加载2.5秒
  2. 用户2等待他的页面加载3秒钟(2秒等待用户1完成他的页面加载,1秒钟他的页面完成渲染)

我的估计是否正确?

让我们说如果我在jRuby下运行相同的应用程序,就会发生这种情况:

  1. 用户1等待他的页面加载2.5秒
  2. 用户2等待1秒或更多秒但小于3秒,这取决于来自用户1的请求占用多少内存/ CPU

我的其他估计是否正确?当然假设您的代码是线程安全的。如果我的估计不正确,请纠正我,或者如果它是正确的,我是否需要确保某些配置设置为rails app级别,或者我应该注意除线程安全代码之外的其他内容?

更新

我刚刚完成了一个小型的jRuby POC应用程序,使用warbler gem构建war文件,并将战争部署到Tomcat Web服务器。我不认为我对jRuby的估计是正确的,这是我观察到的:

  1. 用户1等待他的页面加载2.5秒
  2. 用户2等待3秒钟

哪个与MRI相同,在请求处理方面,不应该jRuby并行处理这些?

ruby-on-rails ruby multithreading ruby-on-rails-4 jruby
1个回答
0
投票

我们说的是假设的事情(和假设)

如果“在我的应用程序中加载页面大约需要2.5秒”,所有用户将继续加载此内容(同时),除非您在第一次加载后对其他用户进行缓存或存储。

不同之处在于,每当执行Ruby代码时(不等待数据库等IO或从http://加载某些内容),2个线程将不会同时运行,而在JRuby中它们将会运行。

如果你在JRuby上看到User 2 waits for 3 seconds,那就意味着smt会阻止多个请求,例如沿途某处有一个Mutex(例如Rack::Lock)。

© www.soinside.com 2019 - 2024. All rights reserved.