PKV*_*PKV 47 asynchronous nonblocking node.js async-await
有人可以解释/重定向我,Node.js的异步模型(非阻塞线程)与任何其他语言之间的区别是什么,例如c#处理I/O的异步方式.在我看来,两者都是同一型号.请建议.
Ste*_*ary 79
两种型号都非常相似.有两个主要区别,其中一个很快就会消失(对于"很快"的某些定义).
一个区别是Node.js是异步单线程的,而ASP.NET是异步多线程的.这意味着Node.js代码可以做一些简化的假设,因为所有代码总是在同一个线程上运行.因此,当你的ASP.NET代码await,它可能会在不同的线程上恢复,并且由你来避免线程本地状态之类的事情.
但是,同样的差异也是ASP.NET的优势,因为它意味着asyncASP.NET可以开箱即用地扩展到服务器的全部功能.如果你考虑一个8核机器,那么ASP.NET可以同时处理(同步部分)8个请求.如果你将Node.js放在加强服务器上,那么实际运行8个独立的Node.js实例并添加类似nginx或简单的自定义负载均衡器来处理该服务器的路由请求是很常见的.这也意味着如果您希望在服务器范围内共享其他资源(例如,缓存),那么您还需要将它们移出proc-of-proc.
另一个主要区别实际上是语言的差异,而不是平台.JavaScript的异步支持仅限于回调和承诺,即使你使用最好的库,当你做任何非平凡的事情时,你仍然会得到非常尴尬的代码.相比之下,C#/ VB中的async/ awaitsupport允许您编写非常自然的异步代码(更重要的是,可维护的异步代码).
但是,语言差异正在逐渐消失.JavaScript的下一个版本将引入生成器,它们(以及帮助程序库)将使Node.js中的异步代码与现在使用async/ 一样自然await.如果你想现在玩"即将推出"的东西,在V8 3.19中添加了生成器,它被卷入Node.js 0.11.2(Unstable分支).通过--harmony或--harmony-generators明确启用生成器支持.
Ash*_*ian 18
Node.js的异步模型和C#的异步/等待模型之间的区别很大.具有Node.js的异步模型类似于C#和.Net中的旧异步模型,称为基于事件的异步模式(EAP).C#和.Net有3个异步模型,您可以在异步编程模式中阅读它们.C#中最现代的异步模型是基于任务的C#的异步和等待关键字,您可以在基于任务的异步模式中阅读它.C#的async/await关键字使异步代码成为线性,让你避免使用"Callback Hell",比其他任何编程语言都要好得多.你只需要尝试一下,之后你永远不会以其他方式去做.您只需编写消耗异步操作的代码,而不必担心可读性,因为它看起来像您编写任何其他代码.请观看此视频:
并且,请尝试在C#和Node.js中进行异步操作以进行比较.你会看到差异.
编辑:由于Node.js V8 JavaScript引擎支持ECMAScript 6 Draft中定义的生成器,因此可以轻松避免JavaScript代码中的"Callback Hell".它在JavaScript中为生活带来了某种形式的异步/等待
使用nodejs,所有请求都进入事件队列.Node的事件循环使用单个线程来处理事件队列中的项目,执行所有非IO工作,并发送到C++线程池(使用javascript回调来管理异步)所有IO绑定工作.然后,C++线程将其结果添加到事件队列中.
与ASP.NET的差异(两者首先适用于允许异步IO的所有Web服务器)是:
网上有很多描述节点架构的地方,但这里有一些东西:http://johanndutoit.net/presentations/2013/02/gdg-capetown-nodejs-workshop-23-feb-2013/index.html#1
| 归档时间: |
|
| 查看次数: |
11904 次 |
| 最近记录: |