Nodejs性能事件循环
Nodejs performance event loop
有文章声称nodejs的单线程事件循环具有卓越的性能我不是在征求意见,我是在征求力学解释。
线程开始处理一个请求,计算一点,然后发现它需要从数据库中读取。这是异步完成的。不涉及延迟,线程可以继续。。。但如果没有这些数据,它该怎么办?
- A1回答"还不知道"
- A2获取另一个请求
A1对我来说没有什么意义。我可以想象客户端同时发出其他请求(比如在第一个站点访问时加载多个资源),但总的来说,没有。
A2当它获取另一个请求时,就会丢失整个上下文。这个上下文保存在promise中,当数据到达时,promise将被实现,但哪个线程处理这个promise?
- B1以后的线程相同
- B2不同的螺纹
在B1的情况下,你可能很幸运,一些相关数据可能仍在线程的缓存中,但考虑到DB请求需要几毫秒的时间,收益很低。
情况B2实际上不是等同于上下文切换吗?
A:Node.js不会响应任何请求,除非您编写了主动发送响应的代码。代码是同步运行还是异步运行并不重要
客户端(甚至服务器的网络堆栈)无法知道或关心在此期间是否发生了异步。
B: 只有一个Node.js线程,句点
当Node.js代码中启动的异步操作的响应到达时,Node.js事件循环线程中会引发一个事件,并调用相应的回调/处理程序。
线程在内部用来伪造所有系统调用。libuv还使用线程,要异步执行实际上正在阻塞的任务,请通过生成一个线程并在完成后收集结果。
线程开始处理一个请求,进行一些计算,并发现它需要从数据库中读取。这是异步完成的。不涉及延迟,线程可以继续。。。但如果没有这些数据,它该怎么办
将回调传递给DB模块的方法,并从作为事件侦听器调用的当前函数返回。事件循环将继续到队列中的下一个事件。上下文可以作为函数的闭包在回调中访问。
- 如何在for循环中添加事件侦听器
- 注册OpenLayers事件时,即使使用匿名函数或绑定,JavaScript关闭也会触发循环内的所有内容
- 在循环中附加事件处理程序时出现浏览器性能问题
- 如何使用for循环添加所有按钮'单击事件
- 事件循环、回调队列和 Javascript 的单线程是如何连接的
- JavaScript运行时事件循环现有技术
- 事件循环的MEAN.JS setInterval进程(从另一个服务器获取数据)
- jQuery触发器事件在一个循环中多次出现
- 单击中每个循环的事件多次激发
- 使用javascript点击事件的循环引用
- jQuery:如何在没有for循环的情况下将事件处理程序应用于$('#text'+'任意整数
- 基于事件在循环中隐藏元素
- 关于动态元素中循环中的事件
- 页面卸载期间的JavaScript事件循环
- 当从jquery的点击事件中的每个循环创建的数组到它之外时,它显示空白数组
- Node.js阻止事件循环
- 循环(事件)中的闭包问题
- 在FullCalendar插件上创建一个循环事件
- Jquery对话框循环事件
- 如何使用angular引导日历为循环事件提供dtStart和until