![](/img/trans.png)
[英]How to handle multiple requests for CPU intensive tasks in NodeJS?
[英]How does NodeJS/Express handle multiple CPU bound requests at the same time
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()
這是一個最小的 flask 應用程序,它執行相同的操作,該方法大約需要 10 秒,但是當我點擊 API 兩次時,“開始”被打印了兩次(2 線程)。
我確信我在我的 Node 應用程序中遺漏了一些東西,這使我無法為每個請求提供自己的線程,因為涉及 CPU 綁定操作。 我知道 NodeJS 在單線程事件循環上運行,但我確信當它服務多個請求時,應該涉及一些線程。 我錯過了什么?
它不會同時處理多個同步的 CPU 綁定任務。 單個線程的含義正是它聽起來的樣子。 如果您有一段代碼正在執行,則在它完成或通過執行某種異步調用讓給另一段代碼之前,不會執行其他代碼。 有關更多詳細信息,有很多關於該主題的文章。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.