0

我正在使用 x 个线程启动 mongoose 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 回答