我对网络编程不是很有经验,

本文解释了当我们使用基于线程的方法来处理请求时可能发生的一些不好的事情,应该 Select 事件驱动的方法.

难道不能使用IHTTPassynchandler正确处理吗?

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

所以,基于事件驱动和基于线程(不要带"因为它是Javascript和每个浏览器…"有人能告诉我使用Node的实际好处是什么吗.js而不是现有的技术?

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

推荐答案

首先, node .js不是多线程的.这很重要.你必须是一个非常有天赋的程序员,才能设计出在线程环境中完美工作的程序.线很硬.

你必须是一个god岁的人才能维护一个设计不当的线程项目.大型项目中有很多难以避免的问题.

其次,整个平台设计为异步运行.你看到ASP了吗.NET项目,其中每个IO交互都是异步的?简单地说,ASP.NET不是为事件驱动而设计的.

然后,由于每个打开的连接有一个线程,以及整个扩展问题,内存占用也会增加.如果我错了,请纠正我,但我不知道如何避免在ASP中 for each 连接创建新线程.网

另一个问题是一个 node .js请求在未被使用或等待IO时处于空闲状态.另一方面,C#thread会Hibernate .现在,可以睡眠的线程数量是有限制的.在 node 中.js,您可以轻松地在一台开发机器上同时并行处理10k客户端.您try 在一台开发机器上并行处理10k线程.

JavaScript本身作为一种语言使异步编码更容易.如果你还在使用C#2.0,那么异步语法真的很麻烦.如果你到处定义Action<>Function<>并使用回调,很多开发人员就会感到困惑.ASP.NET项目是以事件方式编写的,一般ASP.NET开发者.

至于线程和内核. node .js是单线程的,通过创建多个 node 进程进行扩展.如果你有一个16核,那么你可以运行16个 node 实例.js服务器,只有一个 node .前面是js负载均衡器.(如果需要的话,可以使用nginx负载平衡器).

这些都是从一开始就以非常低的级别写入平台的.这不是后来固定的功能.

Other advantages

node .js比上面提到的要多得多.以上是唯一的原因.js处理事件循环的方式比在ASP中使用异步功能要好.网

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

Disadvantages of Node.js

这很难.很年轻.作为一名skilled名JavaScript开发人员,我很难用Node编写一个网站.js只是因为它的低水平性质和我的控制水平.这感觉就像C.很多灵活性和力量,无论是用于我还是吊死我.

API没有冻结.变化很快.我可以想象,因为数量 node ,我不得不在5年内完全重写一个大型网站.js将在那时更改.这是可以做到的,您只需要知道 node 上的维护.js网站并不便宜.

further reading

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

http://blip.tv/file/2899135

http://nodeguide.com/

Node.js相关问答推荐

无法从ejs Web应用程序中的正文中提取数据

利用Gemini:通过Vertex AI还是通过Google/generative-ai?

正在try 使用Azure Function App上载文件时未上载文件(&Q;)

MongoDB上的updateOne和findOneAndUpdate在Node.js中无法正常工作

如何在Angular jest测试中调用Nodejs的垃圾收集? node v20的测试速度慢且内存泄漏

无法使用NPM安装REDUX和DATEPPICER

谷歌应用程序脚本UrlFetchApp和nodejs-axios返回不同的结果;MyFitnessPal日记

Node-Red Tasmota 错误:连接 ECONNREFUSED 192.168.77.21:1883

mongoose findOneAndUpdate 不更新数据库

使用 Nodejs 获取 Firebase 云消息传递历史记录

Electron 模板(Typescript + Webpack)中的这个 Electron Forge ERROR 是什么?

从数据库读取数据并将其作为可下载的 zip 文件发送

Cassandra node.js 驱动程序有替代品吗?

如何使用 superagent/supertest 链接 http 调用?

这到底是什么';拒绝未经授权';对我来说是什么意思?

构建 vue cli 后如何运行生产站点

在 Mongoose 中创建外键关系

nodejs - 如何读取和输出 jpg 图像?

需要 node-gyp 的 npm install 在 Windows 上失败

Express js 阻止 GET /favicon.ico