Веб-сервер Mongoose получает текущие рабочие потоки

Я начинаю веб-сервер mongoose с x потоков. Есть ли способ, которым я могу войти, когда все потоки x заняты, так что я могу увеличить количество потоков, если это необходимо?

2 ответа

Решение

Это невозможно без изменения кода Mongoose. Я бы, например, изменить static void worker_thread(struct mg_context *ctx) функция в mongoose.c:

  1. Пока рабочий поток находится внутри цикла while while (consume_socket(ctx, &conn->client))Вы можете считать рабочий поток занятым.
  2. После close_connection(conn); рабочий поток свободен для обработки нового события в очереди сокетов.

Вы можете использовать эту точку для подсчета количества занятых потоков.

Как подсказал Diewie, вы можете:

  • добавить "int num_idle" в структуру mg_context
  • в потребление_сокете выполните:

    ctx->num_idle++;
    
    // If the queue is empty, wait. We're idle at this point.
    while (ctx->sq_head == ctx->sq_tail && ctx->stop_flag == 0) {
      pthread_cond_wait(&ctx->sq_full, &ctx->mutex);
    }
    
    ctx->num_idle--;
    assert(ctx->num_idle >= 0);
    if (ctx->num_idle == 0) {
      ... your code ...
    }
    
Другие вопросы по тегам