操作系统——多线程

简介: 操作系统——多线程

1,什么是线程(Thread)


  • 线程是处理代码的执行流,有着自己的程序计数器,用来追踪下一次执行的指令,系统寄存器持有它的变量,栈包含了它的执行历史。
  • 线程间可进行数据共享。当一个线程改变了内存,其他线程亦可以看到。
  • 线程也叫做轻量级进程。线程基于并行工作提高应用程序的性能。线程是一种提高操作系统性能的软件方法,但是其开销小于多进程。
  • 每一个线程都存在一个特定的进程中。没有任何一个线程可存在于一个进程外。线程成功地被用于实现网络服务器和web服务器。


下图就是单进程单线程和单进程多线程示意图。

image.png


2,进程和线程的不同


序号 进程 线程
1 进程是重量级,资源密集型 轻量级,消耗更小的资源(与进程比)
2 进程切换需要操作系统交互 线程切换不需要操作系统交互
3 多进程,相同代码,但每个进程拥有自己的资源 所有的线程可共用资源
4 当一个进程阻塞,其他进程等待 当一个线程阻塞,后续线程可执行
5 多进程中不用线程会用更多的资源 多线程进程用更傻少的资源
6 多进程中,每个进程都是相互独立的 一个线程可以改变读,写,改变其它线程的数据


3,线程的优点


  • 线程降低了上下文切换的时间
  • 多线程使得在进程中并发执行任务
  • 有效的通信
  • 线程的创建和切换上下文更加经济
  • 线程使得多处理器架构伸缩性更高、更有效


4,线程的类别


  • 用户级线程——用户管理的线程
  • 内核级线程——操作系统管理线程


4.1 用户级线程


在这种情况下,线程管理内核没有意识到线程的存在。线程库包含了创建和销毁线程的代码,包含了在线程间传递消息和数据的代码,以及调度线程执行和保存、恢复线程上下文的代码。应用被一个线程启动。下图是该类线程的示意图。

image.png


4.1.1,优点


  • 线程切换不需要内核模式权限
  • 用户级线程可以在任何操作系统上运行
  • 用户级线程可以快速创建和管理
  • 根据应用特定需要允许进程选择线程调度算法


4.1.2,缺点

  • 多线程程序没有利用多处理器的优势
  • 在传统的操作系统中,大多数系统调用被阻塞


4.2,内核级线程

该线程被操作系统的内核管理,在应用程序中没有线程管理代码。线程的创建、调度、销毁等操作均由内核来管理。内核维护了进程上下文切换以及单个进程中线程间的上下文切换。


4.2.1,优点


  • 内核可以同时调度同一进程的多个线程
  • 如果一个线程被阻塞,内核可以调度另一个
  • 内核本身就是多线程的


4.2.2,缺点


  • 线程创建和管理速度慢
  • 统一进程的线程间的控制传输需要内核的模式切换


5,多线程模型


一些操作系统提供了上述两种线程,比如Solaris系统。在混合操作系统中,同一程序中多个线程可以并行地运行于多个处理器上,一个阻塞的系统调用不会阻塞整个进程进行。多线程模型有三种。


  • 多对多关系
  • 多对一关系
  • 一对一关系


5.1,多对多关系


多对多关系线程模型是任意数量N的用户线程到相等或者小于N的内核线程的多路复用。

下图显示了多对多线程模型,其中6个用户级线程与6个内核级线程进行多路复用。在此模型中,开发人员可以根据需要创建任意数量的用户线程,并且相应的内核线程可以在多处理器计算机上并行运行。此模型提供了并发的最佳准确性,当线程执行阻塞系统调用时,内核可以调度另一个线程来执行。

image.png


5.2,多对一关系


多对一模型将许多用户级线程映射到一个内核级线程。线程管理由在用户空间由线程库中完成。当线程进行阻塞系统调用时,整个进程将被阻止。 一次只有一个线程可以访问内核,因此多个线程无法在多处理器上并行运行。

如果用户级线程库在操作系统中以系统不支持它们的方式实现的,则内核线程使用多对一关系模式。

image.png


5.3,一对一关系

用户级线程与内核级线程之间存在一对一的关系。与多对一模型相比,此模型提供更多并发性。 当线程进行阻塞系统调用时,它还允许另一个线程运行。 它支持多个线程在微处理器上并行执行。

该模型的缺点是创建用户线程时需要相应的内核线程。 OS / 2,Windows NT和Windows 2000使用一对一的关系模型。

image.png


相关文章
|
3月前
|
UED 开发者 Python
探索操作系统的心脏:理解进程与线程
【8月更文挑战第31天】在数字世界的海洋中,操作系统犹如一艘巨轮,其稳定航行依赖于精密的进程与线程机制。本文将揭开这一机制的神秘面纱,通过深入浅出的语言和直观的代码示例,引领读者从理论到实践,体验进程与线程的魅力。我们将从基础概念出发,逐步深入到它们之间的联系与区别,最后探讨如何在编程实践中高效运用这些知识。无论你是初学者还是有经验的开发者,这篇文章都将为你的技术之旅增添新的航标。
|
16天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
18天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
36 2
|
20天前
|
调度 Python
深入浅出操作系统:进程与线程的奥秘
【10月更文挑战第28天】在数字世界的幕后,操作系统悄无声息地扮演着关键角色。本文将拨开迷雾,深入探讨操作系统中的两个基本概念——进程和线程。我们将通过生动的比喻和直观的解释,揭示它们之间的差异与联系,并展示如何在实际应用中灵活运用这些知识。准备好了吗?让我们开始这段揭秘之旅!
|
2月前
|
存储 消息中间件 资源调度
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
|
1月前
|
算法 安全 调度
深入理解操作系统:进程与线程的管理
【10月更文挑战第9天】在数字世界的心脏跳动着的,不是别的,正是操作系统。它如同一位无形的指挥家,协调着硬件与软件的和谐合作。本文将揭开操作系统中进程与线程管理的神秘面纱,通过浅显易懂的语言和生动的比喻,带你走进这一复杂而又精妙的世界。我们将从进程的诞生讲起,探索线程的微妙关系,直至深入内核,理解调度算法的智慧。让我们一起跟随代码的脚步,解锁操作系统的更多秘密。
37 1
|
24天前
|
Linux 调度
探索操作系统核心:进程与线程管理
【10月更文挑战第24天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是计算机硬件与软件之间的桥梁,更是管理和调度资源的大管家。本文将深入探讨操作系统的两大基石——进程与线程,揭示它们如何协同工作以确保系统运行得井井有条。通过深入浅出的解释和直观的代码示例,我们将一起解锁操作系统的管理奥秘,理解其对计算任务高效执行的影响。
|
2月前
|
资源调度 算法 调度
深入浅出操作系统之进程与线程管理
【9月更文挑战第29天】在数字世界的庞大舞台上,操作系统扮演着不可或缺的角色,它如同一位精通多门艺术的导演,精心指挥着每一个进程和线程的演出。本文将通过浅显的语言,带你走进操作系统的内心世界,探索进程和线程的管理奥秘,让你对这位幕后英雄有更深的了解。
|
1月前
|
算法 调度 UED
探索操作系统中的多线程编程
【8月更文挑战第78天】在数字世界的复杂迷宫中,操作系统扮演着至关重要的角色。本文旨在揭开操作系统中多线程编程的神秘面纱,引导读者理解其概念、实现及应用。通过深入浅出的方式,我们将探讨如何在程序设计中运用多线程,以及这一技术如何优化软件性能和提升用户体验。文章将结合具体代码示例,展示多线程在实际应用中的魔力。无论你是编程新手还是资深开发者,这篇文章都将为你提供新的视角和思考路径。
|
2月前
|
开发者 Python
深入浅出操作系统:进程与线程的奥秘
【8月更文挑战第46天】在数字世界的幕后,操作系统扮演着至关重要的角色。本文将揭开进程与线程这两个核心概念的神秘面纱,通过生动的比喻和实际代码示例,带领读者理解它们的定义、区别以及如何在编程中运用这些知识来优化软件的性能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技巧。