【发布时间】:2021-04-12 13:56:06
【问题描述】:
const run = ()=> {
console.log("Begin")
for(var i=0;i<10000000000;i++){
}
console.log("End")
}
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
run()
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
这是一个最小的节点应用程序,在每个请求上,它都会调用循环(5-10 秒)并返回响应。 我尝试了两次,几乎同时,到达第二个的请求必须等待第一个完全完成。
from flask import Flask
def run():
print("Begin")
for i in range(1000000000):
pass
print("End")
app = Flask(__name__)
@app.route('/')
def hello_world():
run()
return 'Hello, World!'
if __name__ == '__main__':
app.run()
这是一个做同样事情的最小烧瓶应用程序,该方法大约需要 10 秒,但是当我两次点击 API 时,“Begin”被打印了两次(2 Threads)。
我确定我在 Node 应用程序中遗漏了一些东西,这使我无法为每个请求提供自己的线程,因为涉及 CPU 绑定操作。我知道 NodeJS 在单线程事件循环上运行,但我确信当它服务多个请求时,应该涉及一些线程。我错过了什么?
【问题讨论】:
标签: javascript node.js multithreading web server