OS之多线程

简介: os中引入进程的目的是,为了描述和实现多个程序的并发执行,以改善资源利用率及提高系统的吞吐量。   为什么要引入线程?这是为了减少程序并发执行时系统所付出的额外开销(堆栈切换的开销等),使os具有更好的并发性。

os中引入进程的目的是,为了描述和实现多个程序的并发执行,以改善资源利用率及提高系统的吞吐量。

  为什么要引入线程?这是为了减少程序并发执行时系统所付出的额外开销(堆栈切换的开销等),使os具有更好的并发性。

 进程的两个基本属性:

    1、进程是一个拥有资源的独立单位;

    2、进程同时又是一个可以独立调度的基本单位;

系统为进程进行的操作:

  创建进程、 撤销进程、进程切换

进程作为资源的拥有者和系统的调度对象,需要花费系统较大的额外开销,故,系统中同时存咋的进程数目不宜过多,进程切换的频率也不宜过高,而这也就限制了并发度的进一步提高;

目标:既能提高进程并发度,又能降低系统的额外开销;

实现:将进程的资源申请和调度属性分开,即进程作为资源的申请和拥有者,但不作为调度的基本单位。这样,就产生了线程的概念;

  线程是进程中的一个实体,是独立调度和分派的基本单位;

线程自身基本上不拥有资源,只拥有少许运行中必不可少的私有资源。线程可与同属一个进程的其他线程共享进程的全部资源;

  进程中的所有线程共享该进程的状态;

线程具有三种基本状态:就绪、执行和阻塞;一般没有挂起状态;

一个进程可以创建和撤销一个或多个线程,同一进程的多个线程可以并发执行;

  对线程的操作包括:

    1、派生(spawn),当系统创建一个进程时,同时也为该进程派生一个线程(主线程),同一进程中的线程可以再派生其他线程;

    2、阻塞(Block), 当线程需要等待其他事件,它将被阻塞,释放处理机执行其他线程;

    3、解除阻塞(Unblock),当线程的阻塞事件发生,其状态转换为就绪,并插入到就绪队列,等待调度执行;

    4、结束(Finish),当线程执行完毕,释放其私有资源,(共享资源没有权限释放)

 注意:线程阻塞不一定会引起整个进程的阻塞,否则,引入线程带来的并发性就不会提高;(有时候线程阻塞会引起进程的阻塞,比如: )

  传统os,一个进程可以创建一个线程;MS DOS就是一个单用户,单进程,单线程的os,unix是一个多用户,多进程,单线程的os;

  现代os,windows和linux 都是多进程、多线程技术;java虚拟机是一个单进程、多线程的运行环境;

 

  引入线程的os中,线程是独立调度的基本单位(进程也要被调度);进程是资源拥有的基本单位,从而可以显著提高os的并发程度;

  同一进程中的线程间切换不会引起进程切换;但当一个进程中的线程切换到另一进程中的线程时,将会引起进程切换;

  进程之间可以并发执行;

  同属于一个进程的多个线程之间,也可并发执行;

  因而使os具有更好的并发性,从而更有效地使用系统资源和提高os吞吐量;

思考:不同进程之间的线程能否并发执行;

进程与线程  ----拥有资源

  进程是拥有资源的独立单位,它有权申请系统的各类资源;

线程除了拥有很少的私有资源以外,不能申请系统资源,可以共享其所属今晨的资源,即,进程的代码段、数据段以及系统资源,如已打开的文件,I/O设备等,都可被其内的所有线程共享;

    

  

 

 

 

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