浏览代码

Always start with one additional worker thread

Now that half the threads are permissive and half are strict, we
need to make sure we have at least two threads, so that we'll
have at least one of each kind.
Nick Mathewson 8 年之前
父节点
当前提交
250c88014d
共有 2 个文件被更改,包括 11 次插入1 次删除
  1. 3 0
      changes/more-threads
  2. 8 1
      src/or/cpuworker.c

+ 3 - 0
changes/more-threads

@@ -0,0 +1,3 @@
+  o Minor features (relay, performance):
+    - Always start relays with at least two worker threads, to prevent
+      priority inversion on slow tasks.  Part of the fix for bug 22883.

+ 8 - 1
src/or/cpuworker.c

@@ -89,7 +89,14 @@ cpu_init(void)
     event_add(reply_event, NULL);
   }
   if (!threadpool) {
-    threadpool = threadpool_new(get_num_cpus(get_options()),
+    /*
+      In our threadpool implementation, half the threads are permissive and
+      half are strict (when it comes to running lower-priority tasks). So we
+      always make sure we have at least two threads, so that there will be at
+      least one thread of each kind.
+    */
+    const int n_threads = get_num_cpus(get_options()) + 1;
+    threadpool = threadpool_new(n_threads,
                                 replyqueue,
                                 worker_state_new,
                                 worker_state_free,