xスレッドでマングースWebサーバーを起動しています。すべての x スレッドがビジー状態であることをログに記録して、必要に応じてスレッド数を増やす方法はありますか?
質問する
1211 次
2 に答える
2
これは、Mongoose のコードを変更しない限り不可能です。たとえば、static void worker_thread(struct mg_context *ctx)
関数をmongoose.c
次のように変更します。
- ワーカー スレッドが while ループ内にある間は
while (consume_socket(ctx, &conn->client))
、ワーカー スレッドがビジーであると見なすことができます。 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 に答える