potplayer 多个进程_来,搞懂进程与线程

不知道有没有小伙伴和我一样,对进程和线程对概念一直很模糊,说不太清楚,知道一些,反正就是那么回事? 模糊的记得进程是一个独立的程序,线程是cpu运行的单位 。

上面说的又对又不对,都是很片面的且不准确的,我想从计算机操作系统说起,对这两个概念进行详细介绍,希望看了这篇文章的朋友,在下次别人问你“进程和线程是什么” ,你能够侃侃而谈,滔滔不绝哈,直接让他震撼,觉得你的功力很深哈。

1

进程 

进程起源

为啥会有进程这个概念呢?这得从计算机操作系统的发展史说起,最早的计算机系统只能事先把程序装进系统中,一次只能运行一个程序;后来出现了批处理系统—— 把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序(Monitor),使得作业能够持续进行,来提升效率。先是单批道处理系统,再到多批道处理系统,区别就在于内存中运行作业的数量,单批道内存只有一个作业,多批道就不止一个,作业会交替运行,比如说内存中某个作业因请求I/O被阻塞,这时候系统会调度其他的作业,然后cpu执行。

好,记住上面说的多道处理系统特点,内存中存在多个作业,且cpu可以按需进行调度作业。这里我们强调 “多个作业” 同时运行,换句话说 并发。再来搞清楚一个概念:通常我们说的程序,其只能顺序执行,比如说 有一个计算程序和一个I/O程序,两者只能是顺序执行,即只有在计算程序执行告一段落后,才允许 I/O 程 序执行;反之,在程序执行 I/O 操作时,计算程序也不能执行,这意味着处理机处于空闲状 态,这样就浪费了cpu资源。

为了避免上述情况出现,在程序的概念上引入了进程概念。所以说引入进程本质是为了并发,提升效率。那进程又是如何做到能够并发的呢?

那是因为进程中有一些控制信息,能够在程序在并发运行时保持其可控性和结果的可再现性。由此 进程的组成就是= 程序 + 数据 + 进程控制块。对比程序,多了进程控制块,而这个进程控制块就是核心点:记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位。

进程定义

现在可以对进程是什么下一个定义了:

在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性及不可再现性的特征。为了对并发执行的程序加以描述和控制。引入进程:

进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆 栈等组成的,是一个能独立运行的活动实体。

其具有以下特征:

(1) 进程是程序的一次执行。

(2) 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。  

(3) 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

注意:这是在多道批处理系统中,而我们现在所使用的微机系统,发生了一些变化。下面就来看看在微机系统有什么区别?

2

线程 

我们现在使用的pc 计算机,所搭载的硬件设备其实刚刚够个人使用,如果系统以进程作为调度单位,其代价是很大的,需要很好的硬件设备来支持。所以这时候就引入了“线程”,这个轻量级的进程。这样就引入了要讨论的第二个概念——线程。线程,我们可以理解为轻量级进程。再从系统的角度出发分析:

  1. 调度:

    在传统的操作系统中,作为拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分派的基本单位,而进程作为资源拥有的基本单位,把传统进程的两个属性分开,使线程基本上不拥有资源,这样线程便能 轻装前进,从而可显著地提高系统的并发程度。

  2. 并发:

在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,使得操作系统具有更好的并发性,从而能更加有效地提高系统资源的利用率和系统的吞吐量。

拥有资源:

进程拥有资源,线程不拥有资源,但线程可以访问它隶属的进程的资源;

系统开销:

在创建或撤消进程时,系统都要为之创建和回收进程控制块,分配或回收资源,如内存空间和 I/O 设备等,操作系统所付出的开销明显大于线程创建或撤消时的开销。类似地,在进程切换时,涉及到当前进程 CPU 环境的保存及新被调度运行进程的 CPU 环境的设置,而线程的切换则仅需保存和设置少量寄存器内容,不涉及存储器管理方面的操作,所以就 切换代价而言,进程也是远高于线程的。

现在,对比线程和进程是不是有了更深入的理解,我们从系统的角度出发,你可能会有疑问:为什么我们现在使用的pc 机不是多进程操作系统吗?

回答这个问题,如果严格按照进程的定义,其实还真不是多进程操作系统,应该说是多任务多线程系统,这时把进程和任务的概念混用了。在linux 内核中管理进程的控制块叫“TCB” task contral block ,而不是PCB。不过我们已经习惯称呼为多进程了。其实和学术上的进程不太一样。这一点也不必深究。

任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个或多个进程,也可以是一个或多个线程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。

微内核操作系统实际上进程和线程的功能发生了变化:进程不再是系统调度的基本单位,只是资源分配的独立单位;线程作为系统调度的基本单位,线程不具备系统资源,但可以使用其所属的进程资源。

好了,你现在明白了 进程和线程 的含义了。而且是站在一个比较高的角度,操作体系的层面,其实本来就要从这个角度去看,才能彻彻底底的明白别人说的零零散散的东西,否则,你每次都记一点别人说的,博客上看的,但压根不成体系,其实是在害了你。

后面的文章会去分析,他们的状态转换,这样你就再也不怕面试官问你:说说线程的状态转换? 同样的,看了我写的之后,一定让你大彻大悟。

一个有趣的android 开发人员,大红色 ——爱阅读,爱写作。

点个在看 你最好看

083d83ec8c55e49f8569fc9357ed83b9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值