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

Node.js的事件驱动有何不同?我们不能在ASP.Net的HttpAsyncHandler中做到这一点吗?

步致远
2023-03-14
问题内容

我对Web编程的经验不是很丰富,并且实际上还没有在Node.js中编写任何代码,只是对事件驱动的方法感到好奇。看起来确实不错。

这篇文章解释了当我们使用基于线程的方法来处理请求时可能发生的一些不好的事情,而应该选择事件驱动的方法。在基于线程的情况下,收银员/线程会一直困扰我们,直到我们准备好食物/资源为止。在事件驱动下,收银员将我们发送到请求队列之外的某个地方,因此我们在等待食物时不会阻止其他请求。要缩放基于阻塞线程的线程,您需要增加线程数量。对我来说,这似乎是不好用的借口,原因是未正确使用线程/线程池。

使用IHttpAsyncHandler无法正确处理吗?ASP.Net接收一个请求,使用ThreadPool并运行处理程序(BeginProcessRequest),然后在其中加载带有回调的文件/数据库。然后,该线程应该可以自由处理其他请求。一旦文件读取完成,ThreadPool将再次被调用并执行剩余的响应。对我来说没什么不同,那为什么不那么可扩展?

我确实知道基于线程的缺点之一是,使用线程需要更多的内存。但是只有有了这些,您才能享受多核的好处。我怀疑Node.js根本没有使用任何线程/内核。

因此,仅基于事件驱动与基于线程(不要带“因为它是Javascript和每个浏览器…”参数),有人可以指出我使用Node.js而不是使用它的实际好处是什么。现有技术?

这是一个很长的问题。谢谢 :)


问题答案:

首先,Node.js不是多线程的。这个很重要。您必须是一个非常有才华的程序员,才能设计在线程环境中完美运行的程序。线程很难。

您必须成为维护一个设计得不正确的线程项目的 上帝 。在大型项目中,有太多问题是很难避免的。

其次,整个平台被设计为异步运行。您是否看到任何每个IO交互都是异步的ASP.NET项目?简而言之,ASP.NET并非设计为事件驱动的。

然后,由于每个开放连接只有一个线程和整个扩展问题,因此存在内存占用。如果我错了,请纠正我,但我不知道您如何避免为ASP.NET中的每个连接创建一个新线程。

另一个问题是Node.js请求在不使用或等待IO时处于空闲状态。另一方面,C#线程处于休眠状态。现在,可以休眠的这些线程的数量受到限制。在Node.js中,您可以在一台开发计算机上轻松轻松地同时并行处理1万个客户端。您尝试在一台开发计算机上并行处理10k线程。

JavaScript本身作为一种语言使异步编码更加容易。如果您仍在使用C#2.0,那么异步语法确实很痛苦。如果你定义很多开发商只会感到困惑Action<>Function<>所有的地方,并使用回调。以事件方式编写的ASP.NET项目是普通ASP.NET开发人员无法维护的。

至于线程和核心。Node.js是单线程的,并通过创建多节点进程进行扩展。如果您有16个核心,那么您将运行16个node.js服务器实例,并在其前面有一个Node.js负载均衡器。(如果需要,也许是一个nginx负载均衡器)。

从一开始,所有内容都以非常低的级别被写入平台。这并不是稍后再添加的某些功能。

其他优点

Node.js的功能远不止上述。以上仅是为什么Node.js处理事件循环的方法比使用ASP.NET中的异步功能更好的原因。

  • 性能。它很快。真快。
  • Node.js的一大优势是其底层API。您有很多控制权。
  • 您将整个HTTP服务器直接集成到代码中,然后外包给IIS。
  • 您拥有整个Nginx与Apache的比较。
  • 整个C10K挑战由节点很好地处理,而不是由IIS处理
  • AJAX和JSON通信自然而轻松。
  • 实时通信是Node.js的一大优点。它是为此而做的。
  • 与基于文档的nosql数据库一起很好地玩。
  • 也可以运行TCP服务器。可以进行文件写入访问,可以在服务器上运行任何unix控制台命令。
  • 您使用例如CouchDB和map / reduce在javascript中查询数据库。您使用JavaScript编写客户端。在Web堆栈上进行开发时,没有上下文切换。
  • 丰富的社区驱动的开源模块集。node.js中的所有内容都是开源的。
  • 占地面积小,几乎没有依赖性。您可以自己构建node.js源。

Node.js的缺点

这个很难(硬。还很年轻 作为一名 熟练的
JavaScript开发人员,由于Node.js的底层特性和我所拥有的控制级别,我面临着用Node.js编写网站的困难。感觉就像C。很多灵活性和力量可用于我或使我吊死。

该API未冻结。它正在迅速变化。我可以想象,由于到那时Node.js将会改变的数量,不得不在5年内完全重写一个大型网站。这是可行的,您只需要知道在node.js网站上进行维护并不便宜。

进一步阅读

http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-
loop/

http://blip.tv/file/2899135

http://nodeguide.com/



 类似资料:
  • 本文向大家介绍Node.js事件驱动,包括了Node.js事件驱动的使用技巧和注意事项,需要的朋友参考一下 Node.js事件驱动实现概览 虽然在ECMAScript的标准里并没有(也没有必要)明确规定“事件”,但是在浏览器中,事件作为一个极为重要的机制,给予JavaScript响应用户操作与DOM变化的能力;在Node.js中,异步事件驱动模型则是其高并发能力的基础。 学习JavaScript也

  • 我有一个注册了ActionListener的JTextField。当这个JTextField有焦点时,按下enter键,就会创建一个ActionEvent。 如何将此事件链接到另一个组件ActionListener(如JButton),以便运行其代码?

  • 我有一个关于TestFX4的问题。有一个GUI对象,我想在其中将文本设置为TextField(“#SearchField”)。 它在TestFX3中的工作方式如下:

  • 我创建了一个选择菜单,要求您输入要运行的命令,我是通过使用和语句来完成的,但是当命令(if语句)完成时,我希望它们转到行询问运行哪个命令。这是我目前的代码(现在我没有这样的代码): 如果有人能帮忙,那就太棒了,谢谢。

  • 本文向大家介绍Node.js中的事件驱动编程详解,包括了Node.js中的事件驱动编程详解的使用技巧和注意事项,需要的朋友参考一下 在传统程编程模里,I/O操作就像一个普通的本地函数调用:在函数执行完之前程序被堵塞,无法继续运行。堵塞I/O起源于早先的时间片模型,这种模型下每个进程就像一个独立的人,目的是将每个人区分开,而且每个人在同一时刻通常只能做一件事,必须等待前面的事做完才能决定下一件事做什

  • 约翰在一家服装店工作。他有一大堆袜子,必须按颜色配对出售。给定一个表示每只袜子颜色的整数数组,确定有多少双颜色匹配的袜子。 例如,有颜色的袜子。有一对颜色和一对颜色。剩下三只零零散散的袜子,每种颜色一只。对数为。 我的代码: 我试着用不同的方法来做这个问题。例如:首先频率是3,包含自身,然后如果和如果则增加,所以如果来然后再次从计数频率。然后我们得到了频率从到,到,到。 因此我们得到对,对:tot