首先,Node.js不是多线程的。这个很重要。您必须是一个非常有才华的程序员,才能设计在线程环境中完美运行的程序。线程很难。
您必须成为一个维护未正确设计的线程项目的上帝。在大型项目中,有太多问题是很难避免的。
其次,整个平台被设计为异步运行。您是否看到任何单个IO交互都是异步的ASP.NET项目?简而言之,ASP.NET并非设计为事件驱动的。
然后,由于每个开放连接只有一个线程以及整个扩展问题,因此存在内存占用。如果我错了,请纠正我,但我不知道您如何避免为ASP.NET中的每个连接创建一个新线程。
另一个问题是,不使用或等待IO时,Node.js请求处于空闲状态。另一方面,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/