Итак, я увидел некоторые действия по блокировке потоков в моем бэкэнд-проекте.Я отлаживал каждую строку, чтобы увидеть, что только запросы mongoose блокируют потоки.Я перепробовал все документы, но по какой-то причине запросы mongoose продолжали блокировать поток ...
Это пример кода, который подтверждает мою точку зрения
require('dotenv').config();
require("./models/Model1");
const blocked = require('blocked'),
assert = require('assert'),
mongoose = require('mongoose'),
Model1 = mongoose.model("Model1");
mongoose.connect("mongodb://localhost:27017/" + process.env.DATABASE, {useNewUrlParser: true});
mongoose.Promise = Promise;
//mongoose.Promise = global.Promise;
// Tried both of the options above, didn't worked.
mongoose.connection.on('connected', () => {
console.log("Connected to MongoDB!");
setTimeout(threadBlockingTest, 1500);
}).on('error', (err) => {
console.error("MongoDB connection error: " + err.message);
process.exit();
});
async function threadBlockingTest() {
let promise = Model1.findOne({_id: "uhT416tcypesZiT"}).exec();
assert.ok(promise instanceof Promise);
promise.then(function (doc) {
// Do something with the response
});
}
blocked(function (ms) {
console.error('BLOCKED FOR %sms', ms | 0);
});
И вывод
Подключено к MongoDB!
ЗАБЛОКИРОВАНО НА 92 мс
Где время блокировки потока находится в диапазоне 80-130 мс.Я попытался запустить несколько запросов одновременно, чтобы увидеть, что он блокируется еще больше.
Я также попытался прокомментировать внутреннюю часть threadBlockingTest ().Поток никогда не блокировался при всех попытках.