为什么Rails不能完全支持把写出来的代码写出来

在Node.js出来之后,这是推广编程的一件事情。 但是,Ruby确实有EventMachine,它支持编写代码。

在rails中支持事件的要求是:
1.运行反应堆的服务器(薄型,彩虹)
2. Fibers(Ruby 1.9.3)为了使写代码更简单,否则我们可以使用线程。
3.所有的gem均匀(例如mysql2)。

Nodejs显示了编程的明显好处。 那么为什么rails社区不采用eventmachine? 我认为rails不能完全移植到eventmachine的原因之一是因为依赖于底层的gem,这可能并不平坦。 但是有没有人知道是否有计划向这个方向迈进?

Rails可以完成Nodejs的工作,但是Nodejs是通过在所有的库制造商中推广编程来实现的,所以按照惯例,你添加到package.json中的大多数依赖关系,你知道它会被调用,并且会和nodejs一起工作盒子。

最大的原因是Rails生态系统并不是为了平衡的IO而构build的,在应用程序中引入一个未平衡的IO消除了好处。 在Ruby(和Rails)中编写代码是很有可能的,但是并不总是很简单,因为当gems执行或不执行IO时,并不总是很清楚,开发人员需要花费大量的时间追查应用程序可能被阻止的位置。 相比之下,Node创build了一个隐含的理想:IO不应该是同步的,它的整个生态系统已经从理想中stream出,这意味着开发人员不必关心他们的IO操作是否将会同步或不; 默认情况下是假设它们是asynchronous的。

另外,当IO绑定时,偶数的Web应用程序才真正有用。 如果你的应用程序是CPU限制的,或者正在做大量的同步CPU工作,那么一个偶数模型可能不是正确的方法。 Ruby可能需要大量的CPU,主要是由于语言的元编程结构和垃圾收集器(在Ruby 2.1中应该大大改进),这可能使得它比Node节点更不适合编程。

Rails有许多可用的并发模型 – 分叉,抢占式线程和事件 – 开发人员可以select最适合其应用程序域的模型。 分叉是默认的,因为它很容易,不需要任何特殊的考虑(只要你在POSIX系统上部署),而Ruby在创buildRails时没有系统线程。 现在,使用Ruby 1.9+(系统线程,GIL)和JRuby(无GIL!),线程代码非常易于部署。 Ruby 2.0带来了COW友好的垃圾收集器,这意味着分叉比以前更有效率。

在一天结束的时候,代码并不是默认的,因为它需要开发人员做更多的工作,对于很多人来说,默认的分叉模型已经足够了。 在不是的情况下,开发人员可以select使用线程代码或者代码,以便最适合他们的基础架构和应用程序域。