01f-threads.md becomes threading.dox.

This commit is contained in:
Nick Mathewson 2019-11-12 12:05:05 -05:00
parent 91f377deec
commit d1a1631a05
2 changed files with 15 additions and 10 deletions

View File

@ -1,26 +1,28 @@
/**
## Threads in Tor ## @page threading Threading in Tor
Tor is based around a single main thread and one or more worker Tor is based around a single main thread and one or more worker
threads. We aim (with middling success) to use worker threads for threads. We aim (with middling success) to use worker threads for
CPU-intensive activities and the main thread for our networking. CPU-intensive activities and the main thread for our networking.
Fortunately (?) we have enough cryptography that moving what we can of the Fortunately (?) we have enough cryptography that moving what we can
cryptographic processes to the workers should achieve good parallelism under most of the cryptographic processes to the workers should achieve good
loads. Unfortunately, we only have a small fraction of our parallelism under most loads. Unfortunately, we only have a small
cryptography done in our worker threads right now. fraction of our cryptography done in our worker threads right now.
Our threads-and-workers abstraction is defined in workqueue.c, which Our threads-and-workers abstraction is defined in workqueue.c, which
combines a work queue with a thread pool, and integrates the combines a work queue with a thread pool, and integrates the
signalling with libevent. Tor main instance of a work queue is signalling with libevent. Tor's main instance of a work queue is
instantiated in cpuworker.c. It will probably need some refactoring instantiated in cpuworker.c. It will probably need some refactoring
as more types of work are added. as more types of work are added.
On a lower level, we provide locks with tor_mutex_t, conditions with On a lower level, we provide locks with tor_mutex_t in \refdir{lib/lock}, and
tor_cond_t, and thread-local storage with tor_threadlocal_t, all of higher-level locking/threading tools in \refdir{lib/thread}, including
which are specified in compat_threads.h and implemented in an OS- conditions (tor_cond_t), thread-local storage (tor_threadlocal_t), and more.
specific compat_\*threads.h module.
Try to minimize sharing between threads: it is usually best to simply Try to minimize sharing between threads: it is usually best to simply
make the worker "own" all the data it needs while the work is in make the worker "own" all the data it needs while the work is in
progress, and to give up ownership when it's complete. progress, and to give up ownership when it's complete.
**/

View File

@ -33,6 +33,9 @@ Tor repository.
@subpage dataflow @subpage dataflow
@subpage certificates @subpage certificates
@subpage threading
**/ **/
/** /**