0

xスレッドでマングースWebサーバーを起動しています。すべての x スレッドがビジー状態であることをログに記録して、必要に応じてスレッド数を増やす方法はありますか?

4

2 に答える 2

2

これは、Mongoose のコードを変更しない限り不可能です。たとえば、static void worker_thread(struct mg_context *ctx)関数をmongoose.c次のように変更します。

  1. ワーカー スレッドが while ループ内にある間はwhile (consume_socket(ctx, &conn->client))、ワーカー スレッドがビジーであると見なすことができます。
  2. close_connection(conn);ソケット キュー内の新しいイベントを処理するためにワーカー スレッドが解放された後。

そのポイントを使用して、ビジー スレッドの数をカウントできます。

于 2012-05-09T08:29:18.690 に答える
1

diewie が提案したように、次のことができます。

  • "int num_idle" を構造体 mg_context に追加します
  • consumer_socket で、次のようにします。

    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 ...
    }
    
于 2012-05-17T19:57:26.487 に答える