购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 多线程的状态和线程调度

线程是操作系统能够进行运算调度的最小单位。大部分情况下,线程包含在进程中,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流,一个进程中可以并发执行多个线程,每个线程执行不同的任务。

同一进程中的多个线程共享该进程中的全部系统资源,如虚拟地址空间、文件描述符、信号处理等。但同一进程中的多个线程有各自的调用栈(Call Stack)、寄存器环境(Register Context),以及独立的线程本地存储(Thread-local Storage)。

在多核或多路处理器以及支持超线程(Hyper-threading)的处理器上使用多线程程序设计的好处是显而易见的,即这样的设计可提高程序的执行吞吐率。即使是在单核处理器的计算机上,使用多线程技术也可以把进程中负责输入/输出(I/O)处理、人机交互而常被阻塞的部分与密集计算的部分分开执行,编写专门的工作线程执行密集计算,从而提高程序的执行效率。

线程从创建、运行到结束包括下面5个状态:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。线程状态之间的关系如图1-1所示。

图1-1 线程状态之间的关系

一旦线程进入可执行状态,就会在就绪状态与运行状态下转换,同时也有可能进入等待状态或死亡状态(线程执行完毕即进入死亡状态)。如果一个线程在运行状态下发出输入/输出请求,该线程将进入阻塞状态;在其等待输入/输出结束时,线程进入就绪状态。对于阻塞线程来说,即使系统资源空闲,线程依然不能回到运行状态。当run函数执行完毕时,线程进入死亡状态。

计算机通常只有一个CPU,如果是单核CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令。所谓多线程的并发运行,从宏观上来看,指各个线程轮流获得CPU的使用权,分别执行各自的任务。在运行池中,会有多个处于就绪状态的线程在等待CPU。线程调度是指按照特定机制为多个线程分配CPU的使用权。

线程调度有下面两种方式。

● 分时调度(系统级别):所有线程轮流拥有CPU的使用权,平均分配每个线程占用 CPU 的时间。

● 抢占式调度(语言级别):优先级高的线程先使用CPU,如果可运行线程池中的线程优先级相同,就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至其放弃CPU。 Oz0ooV86CeT384V6nLqo4Smv78t+wYWmlBaUUGB+sAT1ZdlnPfhQ6tkYHzbsJw6C

点击中间区域
呼出菜单
上一章
目录
下一章
×