所有
我是Node和Express的新手,我想知道是否有人能给我一些解释Express服务器在处理请求时如何工作,我在服务器卡住了一些CPU计算量大的请求时,举个简单的例子:
app.get("/", function(req, res){
// some long time math calculation in for loop or while to get data
res.json(data);
})
我认为Node是基于事件循环的单个进程,当一个任务被触发时,任务将被放入一个线程池,并且这个单个进程一直在询问它是否完成,对于我的例子,我认为app.get可以将处理程序功能任务放在该池中并等待其他请求,但不幸的是,它似乎不会以这种方式工作。
那么它在app.get中是如何工作的呢?我如何分离这个繁重的计算任务并让这个请求处理程序等待其他请求呢?
任何例子都将受到赞赏
由于
答案 0 :(得分:0)
与浏览器JavaScript一样,NodeJS是单线程的。要执行的任务(例如处理函数)放在事件队列中,并按顺序执行。因此,如果一个函数需要很长时间才能执行,它将阻止队列中的其他内容(例如另一个请求)运行。
如果您不希望长计算阻止处理其他请求,则可以通过事件循环多次将其拆分,例如:与setImmediate()
。请参阅this page on the NodeJS event loop。
一个(可能更好)选项是在另一个线程/进程中进行计算,这样它就不会干扰请求处理。