为什么要用node.js

https://jingyan.baidu.com/article/597a064322df37312a524346.html

总之,在利用 Node.js 编程时,任何耗时操作一定要使用异步来完成,避免阻塞当前函数。因为你在为客户端提供服务,而所有代码总是单线程、顺序执行。

很多文章都提到 Node.js 是单线程的,然而这样的说法并不严谨,甚至可以说很不负责,因为我们至少会想到以下几个问题:

Node.js 在一个线程中如何处理并发请求? Node.js 在一个线程中如何进行文件的异步 I/O? Node.js 如何重复利用服务器上的多个 CPU 的处理能力? 网络 I/O

Node.js 确实可以在单线程中处理大量的并发请求,但这需要一定的编程技巧。我们回顾一下文章开头的代码,执行了 app.js 文件后控制台立刻就会有输出,而在我们访问网页时才会看到 “Hello,World”。

这是因为 Node.js 是事件驱动的,也就是说只有网络请求这一事件发生时,它的回调函数才会执行。当有多个请求到来时,他们会排成一个队列,依次等待执行。

这看上去理所当然,然而如果没有深刻认识到 Node.js 运行在单线程上,而且回调函数是同步执行,同时还按照传统的模式来开发程序,就会导致严重的问题。举个简单的例子,这里的 “Hello World” 字符串可能是其他某个模块的运行结果。假设 “Hello World” 的生成非常耗时,就会阻塞当前网络请求的回调,导致下一次网络请求也无法被响应。

解决方法很简单,采用异步回调机制即可。我们可以把用来产生输出结果的 response 参数传递给其他模块,并用异步的方式生成输出结果,最后在回调函数中执行真正的输出。这样的好处是, http.createServer 的回调函数不会阻塞,因此不会出现请求无响应的情况。

猜你喜欢

转载自blog.csdn.net/myidea999/article/details/85248093
今日推荐