Мангустовые "обещанные" запросы блокируют потоки - PullRequest
0 голосов
/ 15 января 2019

Итак, я увидел некоторые действия по блокировке потоков в моем бэкэнд-проекте.Я отлаживал каждую строку, чтобы увидеть, что только запросы 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 ().Поток никогда не блокировался при всех попытках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...