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