线程的魔法:揭开现代操作系统并发执行的面纱

简介: 线程的魔法:揭开现代操作系统并发执行的面纱

线程

线程概念

现代操作系统中,进程作为资源拥有者,而调度和运行的属性赋予新的实体——线程

线程(Thread)是进程中实施调度和分派的基本单位。

线程引入

传统进程的两个基本属性:
资源的拥有者:

每个进程有自己的地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级、调度

调度单位

进程是一个执行轨迹

以上两个属性构成进程并发执行的基础


系统管理传统进程必须完成的操作:

  • 创建进程
  • 撤消进程
  • 进程切换

缺点:负载重,时间空间开销大,限制并发度的提高

将进程的上述两个属性分开,线程因而产生。

引人进程的目的是为了使多个程序并发执行,以改善资源利用率、提高系统吞吐量。

线程的引人是为了减少程序并发执行时的所付出的时空开销。

1.线程的组成

  • 每个线程有一个thread结构,即线程控制块TCB用于保存自己私有的信息,主要由以下4个基本部分组成:

  • 线程必须在某个进程内执行
  • 一个进程可以包含一个线程或多个线程

2.线程的状态

与进程相似,线程也有若干种状态

  • 运行状态:线程在CPU上执行
  • 就绪状态:具备运行条件,一旦分到CPU,可以马上投入运行
  • 阻塞状态:线程在等待某个事件发生
  • 终止状态:线程完成任务后

线程的状态转换是在一定的条件下实现的

3.线程的管理

线程创建:调用thread_create创建新线程,建立thread结构,分配栈结构等,设置为就绪状态,放入就绪队列

线程终止:线程完成工作后,调用thread_exit终止自身

线程等待:调用thread wait等待指定线程终止此时该线程处于阻塞状态,指定线程终止时转为就绪态

线程让权:调用thread_yield放弃CPU,让给另外的线程运行

4.线程和进程的关系

  1. 一个进程可以有多个线程,但至少要有一个线程;而一个线程只能在一个进程的地址空间内活动。
  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  3. 处理机分配给线程,即真正在处理机上运行的是线程。
  4. 线程在执行过程中需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
  • 由于线程拥有较少的资源,但又具有传统进程的许多特性,有的把线程叫做轻型进程(light weightprocess, LWP),
  • 把传统的进程叫做重型进程(heavy weightprocess,HWP),可把它看成拥有一个线程的进程。

5.引入线程的好处

①线程切换开销少。
②提高并发性。
③提升响应能力。
④利于充分发挥多处理器的效能。

线程的引用使系统设计变得复杂

无论是采用多进程还是一个进程的多线程来实现其并发性都是合理的,用哪一种结构更有效则取决于应用程序的要求。

线程的实现

很多系统中已经实现线程,如Solaris2,Windows2000,Linux,Java语言

实现线程的方式主要有:

  • 在用户空间实现
  • 在核心空间实现
  • 组合方式:将用户级线程和核心级线程结合在一起,取长补短

1.在用户空间实现线程

把线程库整个地放在用户空间,内核对线程一无所知。

在用户空间实现线程的优点
  1. 线程切换速度很快。
  2. 调度算法可以是应用程序专用的。
  3. 用户级线程可以运行在任何操作系统上,包括不支持线程机制的操作系统。
用户级线程的主要缺点
  1. 系统调用的阻塞问题
  2. 在单纯用户级线程方式中,多线程应用程序不具有多处理器的优点。

2.在内核空间实现线程

内核知道线程存在,并对它们实施管理。

  1. 在多处理器系统中,内核可以同时调度同一进程的多个线程
  2. 如果一个进程的某个线程阻塞了,内核可以调度同一个进程的另一个线程。
  • 优点:克服了用户级线程方式的主要缺陷;内核线程本身也可以是多线程的。
  • 主要缺点:控制转移开销大。

3.组合方式

把用户级线程和内核级线程两种方式结合在一起,吸收二者优点,克服各自不足

内核只知道内核级线程,也只对它们实施调度

实现组合方式有不同的模型:

  • 多对一模型
  • 一对一模型
  • 多对多模型

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

目录
相关文章
|
21天前
|
供应链 安全 数据处理
操作系统高级议题:并发控制与进程互斥技术
操作系统高级议题:并发控制与进程互斥技术
39 0
|
5天前
|
存储 调度 C++
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
27 1
|
5天前
|
Java
Java Socket编程与多线程:提升客户端-服务器通信的并发性能
【6月更文挑战第21天】Java网络编程中,Socket结合多线程提升并发性能,服务器对每个客户端连接启动新线程处理,如示例所示,实现每个客户端的独立操作。多线程利用多核处理器能力,避免串行等待,提升响应速度。防止死锁需减少共享资源,统一锁定顺序,使用超时和重试策略。使用synchronized、ReentrantLock等维持数据一致性。多线程带来性能提升的同时,也伴随复杂性和挑战。
|
14天前
|
安全 Java API
Java并发基础-启动和终止线程
Java并发基础-启动和终止线程
23 0
|
14天前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
17 0
|
2天前
|
Java
Java中的`synchronized`关键字是一个用于并发控制的关键字,它提供了一种简单的加锁机制来确保多线程环境下的数据一致性。
【6月更文挑战第24天】Java的`synchronized`关键字确保多线程数据一致性,通过锁定代码块或方法防止并发冲突。同步方法整个方法体为临界区,同步代码块则锁定特定对象。示例展示了如何在`Counter`类中使用`synchronized`保证原子操作和可见性,同时指出过度使用可能影响性能。
11 4
|
1天前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
7 1
|
7天前
|
监控 程序员 调度
协程实现单线程并发(入门)
协程实现单线程并发(入门)
12 1
|
12天前
|
消息中间件 分布式计算 物联网
深入理解操作系统之进程与线程管理
操作系统的核心职责之一是进程与线程管理,它关乎系统的效率和稳定性。本文将剖析进程与线程的基本概念、生命周期以及它们在现代操作系统中的实现机制。通过对比分析,我们将揭示进程与线程的区别、优势及其适用场景,并探讨它们对系统性能的具体影响。进一步,文章将讨论进程间通信(IPC)的几种方式,以及同步和异步处理在多任务环境中的重要性。最后,我们将展望未来操作系统在进程与线程管理方面可能的发展趋势。
|
2天前
|
Java
synchronized关键字在Java中为多线程编程提供了一种简便的方式来管理并发,防止数据竞争和死锁等问题
Java的`synchronized`关键字确保多线程环境中的数据一致性,通过锁定代码段或方法防止并发冲突。它可修饰方法(整个方法为临界区)或代码块(指定对象锁)。例如,同步方法只允许一个线程执行,同步代码块则更灵活,可锁定特定对象。使用时需谨慎,以避免性能影响和死锁。
9 0