Go to the first, previous, next, last section, table of contents.
MySQL is very dependent on the used thread package. 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 not thread- safe functions
with locks. Read, write and select 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-threads, FSU-threads and RTS threads). In some
environments (for example SCO), all system calls are thread- safe so the
mapping can be done very easily (FSU-threads 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-threads and sockets). Thread
scheduling isn't always optimal.
-
User threads in separate processes. Thread switching is done by the
kernel and all data is 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 one has to 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 'ps' may
on some systems show the different threads. If one thread aborts the
whole process aborts. Most system calls are threadsafe and should
require very little overhead. Solaris, HP/UX, AIX and OSF1 has 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'.
Go to the first, previous, next, last section, table of contents.