有接受回调并在需要时执行回调的事件循环。如果我理解这是一个线程事件循环,那么它一次只执行一个回调。我写测试
setInterval(() => { console.log('INTERVAL')}, 801);
setInterval(() => { while(true) { }}, 800);首先到达事件循环的是第一个setinterval()。第二个setinterval() (具有无限循环)第二个到达。所以有一个线程执行while(true),但它不能执行console.log('INTERVAL')。
这是否意味着,如果我将在NodeJs上编写服务器,在一个端点上执行连续的计算,如果一个客户端发送请求,其他客户端应该等待,直到服务器完成了这些长时间的计算,然后将服务于其他客户端?
在CLR中,我们使用任务,c#线程拉取创建两个线程,Console.WriteLine("Interval")和'while true‘都是并行执行的。
发布于 2019-03-29 15:50:01
是的,如果一个端点正在执行复杂的计算,则服务器挂起,如果其他端点请求,它必须等待。节点只有一个事件循环和有限数量的工作线程
您不应该阻塞事件循环。不应在节点js中同步或异步执行复杂的计算。
有关更多信息,请参阅:https://nodejs.org/en/docs/guides/dont-block-the-event-loop/
发布于 2019-03-29 06:15:51
不要使用while(true){}
改用下面的代码:
setInterval(() => { console.log('INTERVAL1')}, 801);
// change 1000ms with time you need
setInterval(() => { {setInterval(() => { console.log('INTERVAL2')}, 1000) }}, 800);https://stackoverflow.com/questions/55406880
复制相似问题