什么是node.js的非阻塞模型和ASP.NET MVC非阻塞async/await与Tasks之间的区别? 我的意思是他们是否以相同的方式成功地解决了相同的问题,或者我错过了什么?我认为其他框架在node之前已经有了相同的解决方案?
在高层次上,它们是等效的,但有一个主要区别。在Node中,所有请求都由同一线程处理;而在ASP.NET中,所有请求都由线程池处理。Node是单线程异步方法,而ASP.NET是多线程异步(或同步)方法。因此,Node无法处理同步API,如果有一个本应该是异步的API却不是,Node将会假装它是异步的,通过将其推送到线程池线程上,以便主线程可以继续处理其他请求。相比之下,ASP.NET从一开始就是多线程的,所以在这个环境中推送同步工作到线程池线程上是一种反模式。理论上,这意味着ASP.NET在多核服务器上更具可扩展性,但据我所知,没有人证明或否定这一点。Node服务器可以采用的一种缓解方法是在同一服务器上运行多个Node副本,以及负载均衡器(nginx或仅另一个Node副本)。然而,在此时,任何共享状态/缓存都被强制为出站状态。关于哪个先支持异步,我敢打赌很可能是ASP.NET。自首次发布以来,ASP.NET就支持异步,并且MVC在2.0中增加了支持。然而,在最近发布的.NET 4.5中,使用async和await变得(相对)容易;在那之前,大多数公司都认为这不值得复杂化。