Я читал, что node.js является однопоточным и синхронным. Однако запросы ввода-вывода выполняются асинхронно [1].node.js - точность о пути выполнения кода
У меня вопрос. С учетом следующего фрагмента кода:
c.query( //#1
'SELECT SLEEP(20);', //#2
function (err, results, fields) {
console.log("query executed"); //#3
}
);
console.log("hello"); //#4
Предположим, что в очереди есть 2 запроса. Мое понимание таково: Первый запрос делает этот путь # 1 -> # 2 -> # 4 -> # 3. После этого обрабатывается второй запрос.
Из того, что я читал, кажется, автор подразумевает # 1 -> # 2 -> # 4. Поскольку # 3 является асинхронным (ожидание ввода-вывода), второй запрос обрабатывается тем временем.
Может ли кто-нибудь прояснить это? Благодарю.
С # 1 делает сон базы данных MySQL для 20, # 1 -> # 3 -> # 2 означает, что # 2 выполняется через 20 секунд. Затем # 1 блокирует выполнение, правильно? – Kamil
Не совсем. Мы говорим о потоке выполнения node.js. Если вы сделаете что-то вроде «SELECT SLEEP (20000)», ваш db будет спать в течение 20 секунд, но node.js не будет заблокирован и продолжит выполнение следующих строк кода. Другая логика зависит от приложения, которое вы создаете. –
Итак, если # 3 занимает много времени, то мы можем предположить, что путь может стать # 1 -> # 2 -> # 3? – Kamil