Представьте себе простое express веб-приложение, как показано ниже.
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
takeTimePlain()
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
function takeTimePlain () {
/* Long Job Operation Simulation */
let date = Date.now();
let end = Date.now() + 5000;
while (date < end ) {
console.log ("Iterating through while loop")
date = Date.now()
}
return
}
Тогда я звоню http://localhost:3000
3 раза одновременно. Если я проверяю задержку или время ожидания сервера,
- Если задержка для первого запроса равна
x
- , то для второго запроса требуется
2x
время - и для третьего запроса требуется
3x
время для завершения
Если мы предполагаем, что 10 клиентов подключаются к конечной точке одновременно, тогда 10-й клиент должен ждать 10x
время получить ответ. Отображение нескольких тысяч запросов в секунду.
Почему Nodejs хвалят за его масштабируемость, управляемость событиями и однопоточный характер, даже если он не может справиться с общим сценарием, как описано выше, без помощи сторонних решений, таких как запуск нескольких экземпляров одного и того же сервиса?
Есть ли неблокирующая альтернатива takeTimePlain()
? Я знаю о setTimeout(cb, 5000)
, однако я не собираюсь ждать 5 секунд. Это takeTimePlain()
может быть что угодно, как сортировка и массив, упорядочение, поиск и т. Д. c. Это распространенное решение для кодирования, позволяющее реплицировать процесс, который требует времени процессора.
Редактировать: Этот вопрос не о скептицизме или предложениях. Речь идет о разъяснении фактов после показа реальных ориентиров. Не стесняйтесь редактировать заголовок, если он не соответствует содержанию.