MySQL非常依赖使用中的线程软件包。 所以当为MySQL选择一个好平台的时候,线程软件包就非常重要。
至少有三种线程软件包:
用户线程在单个进程中。线程切换用警报管理,线程库用锁管理所有非线程安全函数。读,写和选择操作通常被线程专有的切换器管理, 如果运行中的线程要等待数据,这个切换器就会切换操作到另一个线程。如果用户线程软件包集成在标准库(FreeBSD 和 BSDI 线程软件包)里,这样的 线程软件包比那些不得不映射所有不安全调用(MIT-pthreads, FSU Pthreads 和 RTS 线程软件包)的线程软件包需要更少的系统开销。在某些环境下(如SCO),所有系统调用都是线程安全的,所以映射非常容易(SCO上的FSU Pthreads包)。不足之处是:所有映射的调用占用很少的时间,于是想要能处理所有的情况就相当繁杂。有一些系统调用通常不被线程软件包(类似MIT-pthreads and sockets包)处理。线程计划不总是最优化的。
在分离进程中的用户线程。线程切换是由内核来做,且所有的数据在线程之间共享。线程软件包管理标准线程调用,允许在线程之间共享数据。LinuxThreads包就使用这种方法。不足之处:太多进程。线程创建得慢,如果一个线程死掉了,其余得线程通常就挂起来,你必须在重启之前杀掉这些挂起的线程。线程切换开销有些大。
内核线程。线程切换由线程库或内核来做,并且非常快。一个进程就可以了。但在一些系统中ps可能显示不同线程。如果一个线程终止,整个进程就终止了。多数系统 调用是线程安全的,并且只要非常小的系统开销。Solaris, HP-UX, AIX 和OSF/1 都有内核线程。
在一些系统中内核线程被系统库中整合用户级线程管理。在这种情况下,线程切换只能由线程库来做,而内核并不是真正的“线程感知”的。