回答一个 ,您的逻辑是正确的:第二个事件将等待。并且将在其排队的回调时间到来之前执行。
同样,请记住,技术世界中没有“同时”这样的事情。一切都有非常特定的时间和地点。
node.js管理成千上万个连接的方式是,当有一些数据库调用阻塞逻辑,或者正在处理另一个IO *** 作(例如流)时,无需保持线程空闲。它可以“服务”第一个请求,也许创建更多的回调,然后继续处理其他请求。
因为没有办法阻止执行(无用的while(true)和类似的东西除外),所以在整个应用程序逻辑上分配实际资源变得非常有效。
线程-
昂贵,线程的服务器容量与可用内存直接相关。因此,大多数经典的Web应用程序都将遭受苦难,因为仅在存在数据库查询块或类似事件的情况下,空闲的线程上使用了RAM。在节点中,情况并非如此。
尽管如此,它仍允许通过创建多个线程(作为child_process)
cluster,从而扩展了更多可能性。
回答二 。您可能不会想到“循环”之类的东西。幕后将不会有循环来检查是否有连接或接收到的任何数据,等等。如今,异步方法也可以处理它。
因此,从应用程序的角度来看,没有“主循环”,而从开发人员的角度来看,一切都是事件驱动的(不是事件循环)。
如果使用
http.createServer,则将回调绑定为对请求的响应。所有套接字 *** 作和IO事务以及HTTP握手,解析标头,查询,参数等都将在幕后发生。一旦它在后台发生并且完成了工作,它将保留数据,并将回调与某些数据一起推送到事件循环。一旦事件循环变得免费并且将要到时,它将在node.js应用程序上下文中执行您的回调,其中包含来自幕后的数据。
与数据库请求-同样的故事。它会准备和询问问题(甚至可能再次异步),然后一旦数据库响应并且将为应用程序上下文准备数据,就会回调。
坦白地说,使用node.js所需要做的只是了解概念,而不是了解事件的实现。 最好的方法-实验。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)