E.5. Differences Between Thread Packages
MySQL is very dependent on the thread package used. So when
choosing a good platform for MySQL, the thread package is very
important.
There are at least three types of thread packages:
User threads in a single process. Thread switching is managed
with alarms and the threads library manages all
non-thread-safe functions with locks. Read, write and select
operations are usually managed with a thread-specific select
that switches to another thread if the running threads have to
wait for data. If the user thread packages are integrated in
the standard libs (FreeBSD and BSDI threads) the thread
package requires less overhead than thread packages that have
to map all unsafe calls (MIT-pthreads, FSU Pthreads and RTS
threads). In some environments (for example, SCO), all system
calls are thread-safe so the mapping can be done very easily
(FSU Pthreads on SCO). Downside: All mapped calls take a
little time and it's quite tricky to be able to handle all
situations. There are usually also some system calls that are
not handled by the thread package (like MIT-pthreads and
sockets). Thread scheduling isn't always optimal.
User threads in separate processes. Thread switching is done
by the kernel and all data are shared between threads. The
thread package manages the standard thread calls to allow
sharing data between threads. LinuxThreads is using this
method. Downside: Lots of processes. Thread creating is slow.
If one thread dies the rest are usually left hanging and you
must kill them all before restarting. Thread switching is
somewhat expensive.
Kernel threads. Thread switching is handled by the thread
library or the kernel and is very fast. Everything is done in
one process, but on some systems, ps may
show the different threads. If one thread aborts, the whole
process aborts. Most system calls are thread-safe and should
require very little overhead. Solaris, HP-UX, AIX and OSF/1
have kernel threads.
In some systems kernel threads are managed by integrating user
level threads in the system libraries. In such cases, the thread
switching can only be done by the thread library and the kernel
isn't really “thread aware.”