操作系统——线程

线程

线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成它与属于同一进程的其他线程共享代码段,数据段和其他操作系统资源,如打开文件和信号。一个传统重量级的进程只有单个控制线程,如果进程有多个控制线程,那么它能够同时做多个任务。

多线程的优点

多线程编程的优点:

  1. 响应度高: 如果对一个交互程序采用多线程,那么即使其部分阻塞或执行较冗长的操作,该程序仍能继续执行,从而增加对用户的响应程度。
  2. 资源共享:线程默认共享他们所属进程的内存和资源。代码和数据共享的优点是它能允许一个应用程序在同一个地址空间有多个不同的活动线程。
  3. 经济:进程创建所需要的内存和资源的分配比较昂贵。由于线程能共享他们所属进程的资源,所以创建和切换线程会更为经济。
  4. 多处理器体系结构的利用: 多线程的优点之一是能够充分使用多处理器体系结构,以便每个进程能够并行在不同的处理器上,不管有多少CPU ,单线程进程只能运行在一个CPU上,在多CPU上使用多线程加强了并发功能。

多线程模型

有两种方法来提供线程支持:用户层的用户线程或内核层的内核线程。用户线程受内核支持,而无须内核管理,而内核线程由操作系统直接支持和管理。

多对一模型

多对一模型将许多用户级线程映射到一个内核线程,线程管理是由线程库在用户空间进行的,因而效率比较高,但是如果一个线程执行了阻塞系统调用,那么整个进程会阻塞,而且,因为在任一时刻只有一个线程能访问内核,多个线程不能并行运行在多处理器上。

  • 优点:线程管理是由线程库在用户空间进行的,因而效率比较高
  • 缺点:任意时刻只有一个线程能够访问内核,多个线程不能并发运行在多出理器上

一对一模型 (更好的提供高并发功能

一对一模型将每个用户线程映射到一个内核线程。该模型在一个线程执行阻塞系统调用时,能允许另一个线程继续执行,所以它提供了比多一模型更好的并发功能; 它允许多个线程能并行的运行在多处理器系统上,这种模型的唯一缺点是创建一个用户线程就需要创建一个相应的内存线程。由于创建内核线程的开销会影响应用程序的性能,所以这种模型的绝大多数实现限制了系统所支持的线程数量。

  • 优点:提供了更好的并发性,运行多个线程能并行的运行在多处理器系统上。
  • 缺点:创建一个用户线程就需要创建一个相应的内存线程,所以支持数量有限。

多对多模型

多对多模型多路复用了许多用户线程到同样数量或更小的内核线程中,内核线程的数量可能与特定应用程序或特定机器有关(位于多处理器上的应用程序比单处理器上分配更多数量),虽然多对一模型允许开发人员创建,任意多的用户线程,但是,但是因为内核线程只能一次调度一个线程,所以并没有增加并发性。

坚持原创技术分享,您的支持将鼓励我继续创作!