tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit d1a1631a05521279041a9ed41383d886e5580250
parent 91f377deec9d2d65f8bebe1ac7ea01974b90d376
Author: Nick Mathewson <nickm@torproject.org>
Date:   Tue, 12 Nov 2019 12:05:05 -0500

01f-threads.md becomes threading.dox.

Diffstat:
Ddoc/HACKING/design/01f-threads.md | 26--------------------------
Asrc/lib/thread/threading.dox | 28++++++++++++++++++++++++++++
Msrc/mainpage.dox | 3+++
3 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/doc/HACKING/design/01f-threads.md b/doc/HACKING/design/01f-threads.md @@ -1,26 +0,0 @@ - -## Threads in Tor ## - -Tor is based around a single main thread and one or more worker -threads. We aim (with middling success) to use worker threads for -CPU-intensive activities and the main thread for our networking. -Fortunately (?) we have enough cryptography that moving what we can of the -cryptographic processes to the workers should achieve good parallelism under most -loads. Unfortunately, we only have a small fraction of our -cryptography done in our worker threads right now. - -Our threads-and-workers abstraction is defined in workqueue.c, which -combines a work queue with a thread pool, and integrates the -signalling with libevent. Tor main instance of a work queue is -instantiated in cpuworker.c. It will probably need some refactoring -as more types of work are added. - -On a lower level, we provide locks with tor_mutex_t, conditions with -tor_cond_t, and thread-local storage with tor_threadlocal_t, all of -which are specified in compat_threads.h and implemented in an OS- -specific compat_\*threads.h module. - -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 -progress, and to give up ownership when it's complete. - diff --git a/src/lib/thread/threading.dox b/src/lib/thread/threading.dox @@ -0,0 +1,28 @@ +/** + +@page threading Threading in Tor + +Tor is based around a single main thread and one or more worker +threads. We aim (with middling success) to use worker threads for +CPU-intensive activities and the main thread for our networking. +Fortunately (?) we have enough cryptography that moving what we can +of the cryptographic processes to the workers should achieve good +parallelism under most loads. Unfortunately, we only have a small +fraction of our cryptography done in our worker threads right now. + +Our threads-and-workers abstraction is defined in workqueue.c, which +combines a work queue with a thread pool, and integrates the +signalling with libevent. Tor's main instance of a work queue is +instantiated in cpuworker.c. It will probably need some refactoring +as more types of work are added. + +On a lower level, we provide locks with tor_mutex_t in \refdir{lib/lock}, and +higher-level locking/threading tools in \refdir{lib/thread}, including +conditions (tor_cond_t), thread-local storage (tor_threadlocal_t), and more. + + +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 +progress, and to give up ownership when it's complete. + +**/ diff --git a/src/mainpage.dox b/src/mainpage.dox @@ -33,6 +33,9 @@ Tor repository. @subpage dataflow @subpage certificates + +@subpage threading + **/ /**