提交 1ade87d0 编写于 作者: K Kozlov Dmitry

core: queue zero-priority context if number of threads is reached maximum

上级 b2f9d706
...@@ -278,6 +278,7 @@ int rad_req_wait(struct rad_req_t *req, int timeout) ...@@ -278,6 +278,7 @@ int rad_req_wait(struct rad_req_t *req, int timeout)
req->timeout.expire = rad_req_timeout; req->timeout.expire = rad_req_timeout;
triton_context_register(&req->ctx, req->rpd->ppp); triton_context_register(&req->ctx, req->rpd->ppp);
triton_context_set_priority(&req->ctx, 1);
triton_md_register_handler(&req->ctx, &req->hnd); triton_md_register_handler(&req->ctx, &req->hnd);
triton_md_enable_handler(&req->hnd, MD_MODE_READ); triton_md_enable_handler(&req->hnd, MD_MODE_READ);
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#endif #endif
int thread_count = 2; int thread_count = 2;
int thread_count_max = 200;
int max_events = 64; int max_events = 64;
static spinlock_t threads_lock = SPINLOCK_INITIALIZER; static spinlock_t threads_lock = SPINLOCK_INITIALIZER;
...@@ -255,10 +256,8 @@ struct _triton_thread_t *create_thread() ...@@ -255,10 +256,8 @@ struct _triton_thread_t *create_thread()
pthread_mutex_init(&thread->sleep_lock, NULL); pthread_mutex_init(&thread->sleep_lock, NULL);
pthread_cond_init(&thread->sleep_cond, NULL); pthread_cond_init(&thread->sleep_cond, NULL);
pthread_mutex_lock(&thread->sleep_lock); pthread_mutex_lock(&thread->sleep_lock);
if (pthread_create(&thread->thread, &attr, (void*(*)(void*))triton_thread, thread)) { while (pthread_create(&thread->thread, &attr, (void*(*)(void*))triton_thread, thread))
triton_log_error("pthread_create: %s", strerror(errno)); sleep(1);
return NULL;
}
__sync_add_and_fetch(&triton_stat.thread_count, 1); __sync_add_and_fetch(&triton_stat.thread_count, 1);
__sync_add_and_fetch(&triton_stat.thread_active, 1); __sync_add_and_fetch(&triton_stat.thread_active, 1);
...@@ -273,7 +272,8 @@ int triton_queue_ctx(struct _triton_context_t *ctx) ...@@ -273,7 +272,8 @@ int triton_queue_ctx(struct _triton_context_t *ctx)
return 0; return 0;
spin_lock(&threads_lock); spin_lock(&threads_lock);
if (list_empty(&sleep_threads) || need_config_reload || triton_stat.thread_active > thread_count) { if (list_empty(&sleep_threads) || need_config_reload || triton_stat.thread_active > thread_count ||
(ctx->priority == 0 && triton_stat.thread_count > thread_count_max)) {
if (ctx->priority) if (ctx->priority)
list_add(&ctx->entry2, &ctx_queue); list_add(&ctx->entry2, &ctx_queue);
else else
...@@ -614,6 +614,10 @@ void __export triton_run() ...@@ -614,6 +614,10 @@ void __export triton_run()
if (opt && atoi(opt) > 0) if (opt && atoi(opt) > 0)
thread_count = atoi(opt); thread_count = atoi(opt);
opt = conf_get_opt("core", "thread-count-max");
if (opt && atoi(opt) > 0)
thread_count_max = atoi(opt);
for(i = 0; i < thread_count; i++) { for(i = 0; i < thread_count; i++) {
t = create_thread(); t = create_thread();
if (!t) if (!t)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册