Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果在服务器端使用Node js,为什么需要异步呢?_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 如果在服务器端使用Node js,为什么需要异步呢?

Javascript 如果在服务器端使用Node js,为什么需要异步呢?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,在教程中,人们谈到Node JS的非阻塞、异步特性如何意味着UI在执行缓慢操作时保持响应——这些都是客户端关注的问题 然而,这不是服务器端节点的正常使用情况——例如,从数据库中提取数据,然后在API中提供数据。在这种情况下,异步很重要吗?数据只会在所有数据都准备好后才进行传递,因此所需时间相同(假设您只响应一个http请求)。在web应用程序中,您可能希望同时运行多个操作。Node的标准库通过使这些操作异步来实现这种并发性,也就是说,在代码中启动它们,定义它们完成后要执行的操作,并在不等待它们的

在教程中,人们谈到Node JS的非阻塞、异步特性如何意味着UI在执行缓慢操作时保持响应——这些都是客户端关注的问题


然而,这不是服务器端节点的正常使用情况——例如,从数据库中提取数据,然后在API中提供数据。在这种情况下,异步很重要吗?数据只会在所有数据都准备好后才进行传递,因此所需时间相同(假设您只响应一个http请求)。

在web应用程序中,您可能希望同时运行多个操作。Node的标准库通过使这些操作异步来实现这种并发性,也就是说,在代码中启动它们,定义它们完成后要执行的操作,并在不等待它们的情况下继续操作

您可能还希望web应用程序能够同时处理多个请求。节点恰好是一个单线程服务器,所以如果您有一个节点进程,那么您的单线程将必须是空闲的,才能开始处理新的请求。如果您正在等待一个异步操作完成,那么您可以自由工作

这种组合意味着,如果只使用同步操作来处理节点中的请求,则每个进程只能处理一个请求。有些web服务器就是这样构建的,产生处理新请求所需的尽可能多的新进程(在合理范围内),但Node不是。相反,您打算利用其事件循环在单个实例中并发处理多个请求

在教程中,人们谈到Node JS的非阻塞、异步特性意味着UI在执行缓慢操作时保持响应


除非您的UI正在使用Node(即Node是一个客户端或不涉及任何服务器),否则这是不正确的。不过,节点并不是异步JavaScript的唯一形式——比如浏览器中的XHR或
setTimeout
。可能教程是关于这些内容的,或者只是非常混乱。

Node.js在一个线程中运行。任何单线程运行时都需要非阻塞i/o以避免变得无响应

在web浏览器中,“无响应”意味着用户无法与页面交互,浏览器无法处理常规任务,如
requestAnimationFrame
。这是一件坏事,但它只影响一个用户


在web服务器中,无响应意味着服务器无法响应任何请求。如果10个用户同时访问您的网站,9个用户被阻止,而1个用户等待数据库。那是灾难性的。

在路上开车。然后走到一个4路停车标志处。 a路轮到他,b路轮到他,c路轮到他,d路不注意那里的交通。司机,e,f,g在其他三面咒骂这个司机没有轮到他,h,i,j在司机D后面的人咒骂为什么司机D在4路站没有轮到他

终于轮到司机D了

大约是同步的


你开车出去了,来到一个4路停车灯交叉口,那里有一条左转车道,一条横穿的车道,还有一条右转车道。在所有4个方向上,每条车道都有灯

有些时候你会等几分钟右转,另一些时候你不等待就直接通过(绿灯),其他时候你会看到黄灯和红灯。有时你会看到左转绿灯,而迎面而来的车辆也会同时看到左转绿灯。而右转车道的人可能会看到黄色/让步标志

这可能是在合理的范围内走走停停。但这将是一种更为异步的做法。多种事情同时发生


大多数大型应用程序都值得使用。是密集型数据库应用程序。一个数据库请求可能相当长。而且它可能需要服务器到数据库到服务器到数据库到服务器到数据库,再需要100次。获取所有数据。在服务器决定向客户端发送什么之前

有点像烹饪一顿饭,你有各种各样的肉类和烹调肉类的风格,这比其他的要花更长的时间,蔬菜餐桌也是如此,另外你还需要处理盘子、银器等。。。有些人可能会过敏,或者只喜欢以某种方式烹调的某种食物。这与服务器处理来自客户端的请求、从数据库获取数据、从服务器初始设置获取模板、获取图片以及准备打包所有数据,然后再将其返回客户端没有什么不同

你真的会做火鸡吗?比如说,一只火鸡,需要几个小时,然后一旦它做好了,开始做一些派,需要几个小时,当做派的时候,火鸡变冷了,当派做好的时候,你开始做一种蔬菜,而且,只有在上一道菜烹饪完毕,所有的菜都被清洗、晾干并收好后,才能烹饪下一道菜。你的计划是在天气热的时候什么都吃


烹饪多任务errr async,同时烹饪多种食物,因此最终所有食物都集中在一起,并且在几分钟内彼此分开,能够将所有食物端上餐桌。与异步代码没有太大区别。当您执行的每项任务都是同步的时,每顿饭都会变为异步的。

因此,如果一个客户端使用阻塞操作,您可以将服务器锁定吗?您没有响应一个HTTP请求,而是一次响应十几个请求。