Linux 线程实现模型

1、Linux 线程的调度实现可以有两种模型,

一种是完全由进程负责,进程内启动一个线程调度器,由进程内的线程调度器完成调度。

缺点是:(1)各个线程自己加主动释放cpu的流程

(2)进程可能阻塞,达不到多线程时让进程多头并进的效果。因为当一个线程调用了阻塞性的系统调用,则会导致整个进程挂住,因为进程内的线程调度器得不到运行机会,所以,根本没法调度其他线程进行运行。

另外一种是由内核完成调度。

  缺点是:(1)内核完成调度,内核负担大。

2、Linux 的线程实现,历史上出现过Linux Thread 和 现代版的NPTL。Linux Thread虽然也能实现多线程的效果,但是局限比较多,而NPTL则更加符合Posix 标准,在一个进程内启动多个线程时性能更好。极端情况下,一个进程内可以启动10万个线程,而使用传统的Linux Thread则大约启动几千个线程。从Linux 2.6开始,以及glibc 新版本中都是默认开启NPTL。

3、NPTL=native posix thread library

4、NPTL的线程实现模型如下:

Linux 线程实现模型

5、java 的多线程实现,是由JVM实现的,内核并不关心,而是由JVM完成多线程调度,JVM内部维护一个程序运行指令的个数计数器,从而知道线程的运行时间,当达到一定指令条数后,则强行剥夺线程运行,以便调度其他线程运行,java线程的优先级为10个,默认为5, 可以指定1~10.

基本原理是:基于优先级的时间片轮转调度。

6、python的多线程实现,待完善。

上一篇:坚持使用GNU/Linux


下一篇:Apache系列:Centos7.2下安装与配置apache