当前位置: 首页 > 面试题库 >

Haskell对Node.js的响应是什么?

陆高峰
2023-03-14
问题内容

我相信Erlang社区不会羡慕Node.js,因为它本身就进行非阻塞I /
O并具有将部署轻松扩展到一个以上处理器(Node.js甚至没有内置的功能)的方法。有关更多详细信息,请访问http://journal.dedasys.com/2010/04/29/erlang-
vs-node-js
和Node.js或Erlang

那Haskell呢?Haskell是否可以提供Node.js的某些好处,即一种避免使用I / O而不使用多线程编程的干净解决方案?

Node.js有很多吸引人的地方

  1. 事件:无线程操作,程序员仅提供回调(如Snap框架中一样)
  2. 回调保证在单个线程中运行:不可能出现竞争条件。
  3. 漂亮又简单的UNIX友好API。奖励:出色的HTTP支持。DNS也可用。
  4. 默认情况下,每个I / O都是异步的。这样可以更轻松地避免锁定。但是,回调中过多的CPU处理会影响其他连接(在这种情况下,任务应拆分为较小的子任务并重新安排)。
  5. 客户端和服务器端使用相同的语言。(但是,我认为这一点没有太大价值。jQuery和Node.js共享事件html" target="_blank">编程模型,但其余部分却大不相同。我只是看不到如何在服务器端和客户端之间共享代码。在实践中很有用。)
  6. 所有这些都包装在一个产品中。

问题答案:

好的,在观看了@gawi指向我的一些node.js演示文稿之后,我可以多说一点Haskell与node.js进行比较的情况。在演示中,Ryan描述了Green
Threads的一些好处,但是接着说,他认为缺少线程抽象并不是不利条件。我不同意他的立场,尤其是在Haskell的情况下:我认为线程提供的抽象对于使服务器代码更容易正确使用和更健壮至关重要。特别是:

  • 每个连接使用一个线程可使您编写表示与单个客户端进行通信的代码,而不是编写同时处理 所有 客户端的代码。可以这样认为:一台处理带有线程的多个客户端的服务器看起来与处理一个客户端的服务器几乎相同;主要区别在于fork前者中有某个地方。如果您要实现的协议非常复杂,则同时管理多个客户端的状态机将变得非常棘手,而线程使您仅可以编写与单个客户端的通信脚本。该代码更容易正确使用,也易于理解和维护。

  • 单个OS线程上的回调是协作式多任务处理,而不是抢先式多任务处理,这是线程获得的。协作式多任务处理的主要缺点在于,程序员负责确保没有饥饿。它失去了模块化:在一个地方犯一个错误,它会破坏整个系统。这确实是您不需要担心的事情,而抢占是简单的解决方案。此外,回调之间的通信是不可能的(这将导致死锁)。

  • 在Haskell中并发并不困难,因为大多数代码是纯净的,因此构造时线程安全的。有简单的通信原语。与使用无限制副作用的语言相比,在Haskell中并发射击自己要困难得多。



 类似资料:
  • 问题内容: 您可能知道Node.js中的对象: {Object}全局名称空间对象。 在浏览器中,顶级范围是全局范围。这意味着在浏览器中,如果您位于全局作用域var中,则将定义一个全局变量。在Node中,这是不同的。顶级范围不是全局范围;var Node模块内部的某些内容对于该模块而言是本地的。 现在,我偶然发现了似乎无处记录的物体。 尽管似乎我可以使用与以下方法相同的方法: test1.js te

  • 本文向大家介绍什么是iOS的响应者链?相关面试题,主要包含被问及什么是iOS的响应者链?时的应答技巧和注意事项,需要的朋友参考一下 响应者链条:是由多个响应者对象连接起来的链条 作用:能很清楚的看见每个响应者之间的联系,并且可以让一个事件多个对象处理。 响应者对象:能处理事件的对象

  • 从数学上讲,函数合成操作是关联的。因此: 因此,可以将函数合成操作定义为左关联或右关联。 由于Haskell中的正常函数应用(即术语的并列,而不是操作)是关联的,所以我认为函数组合也应该是关联的。毕竟,世界上大多数人(包括我自己)都习惯于从左到右阅读。 null

  • 现代CPU经过优化,使得访问和修改内存中的相同位置(时间位置)以及内存中的连续位置(空间位置)都是极其快速的操作。 现在,由于Haskell是一种纯粹的不可变语言,您自然不能覆盖现有的内存块,这可能会使 之类的操作比C中具有连续访问的结果变量的 循环慢得多。 Haskell在内部做了什么来减轻这种性能损失吗?一般来说,它关于局部性的性质是什么?

  • 主要内容:运行时是什么?,Node.js 的诞生,Node.js 的组成,总结JavaScript 诞生于 1995 年,几乎是和互联网同时出现;Node.js 诞生于 2009 年,比 JavaScript 晚了 15 年左右。 在 Node.js 之前,JavaScript 只能运行在浏览器中,作为网页脚本使用,为网页添加一些特效,或者和服务器进行通信。有了 Node.js 以后,JavaScript 就可以脱离浏览器,像其它编程语言一样直接在计算机上使用,想干什么就干

  • 问题内容: 我没有完全了解Node.js的全部含义。也许是因为我主要是基于Web的业务应用程序开发人员。它是什么,有什么用? 到目前为止,我的理解是: 编程模型是事件驱动的,尤其是它处理I / O的方式。 它使用JavaScript,解析器为V8。 它可以轻松用于创建并发服务器应用程序。 我的理解正确吗?如果是,那么事件I / O的好处是什么,并发性东西还有更多好处吗?另外,Node.js的发展方