异步,线程,node.js和Ruby on Rails

|| 除了使用不同的脚本语言之外,似乎node.js的主要吸引力在于它对事件驱动的编程的支持,这使其更易于编写可伸缩服务器(或其他通常受I / O绑定的应用程序)。简化的非阻塞I / O调用。但是,此功能的代价是必须学习一种新的编程模型,该模型本质上要求您在回调函数之后传递回调,这会使一些简单的任务(例如,相关的动作序列)更加复杂。 将该编程模型与Ruby on Rails的传统编程模型进行对比,后者可阻止所有I / O操作,并且是(有效)单线程的(由于MRI的绿色线程实现)。 只是在这里大声做梦,似乎应该有可能实现一个Ruby(或Rails)运行时,该运行时通过捕获I / O调用,透明地将其替换为非阻塞版本,存储当前的延续并进行调用来协调这些模型。 I / O操作完成时。这样,您将获得熟悉的过程编程风格以及事件驱动/异步/回调模型的好处。 这样的运行时(或运行时转换器)在技术上是否可行?是否已经有Web框架在执行此类操作?     
已邀请:
        是。 进行异步但命令式编程有两种可能性 使用真正的异步语言: Erlang是一个示例,您可以编写命令式命令,执行该代码并将其转换为异步命令。我不认为这会一直进行。 使用编译器 您可以使用将阻塞样式代码转换为非阻塞代码的编译器。我个人强烈建议您不要这样做,因为这是一个黑匣子,是调试的噩梦。 一个例子就是风暴   但是,此功能的代价是必须学习一种新的编程模型,该模型本质上要求您在回调函数之后传递回调,这会使一些简单的任务(例如,相关的动作序列)更加复杂。 但是,我建议您咬一口子,进行范例切换。从长远来看,这将是一个更好的投资。请注意,不必使用node.js,那里有很多强大的替代方案,例如erlang和haskell。     
        感谢@ igorw,async-rails项目正是我所想象的。 但是正如@Raynos和@apneadiving所指出的那样,可能有更好的解决方案,例如Ruby EventMachine和stormjs。     

要回复问题请先登录注册