进程与线程的区别


前言


  前段时间无意间从一个朋友那得到了一个微信公众号——“开发者头条”

  因为并不是我的本意想要的,但是因为我实在够懒也没有取消关注就这么一直放着了。

  

  但是现在看了看,还是挺好的,所以在这推荐给大家这个公众号


  然后今天正巧看到了一篇文章—— 一道面试题:说说进程和线程的区别


  我就试着自己总结一下这个知识点


正文


  对于进程与线程,网络上也是百家争鸣,各有各的观点。


  我也只是将我比较能理解和接受的加以调整分享给大家


  还没有比较深入的自己的理解。


  百科释义


  进程(Process)是计算机中的程序关于数据集合上的一次运动活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

  在早期面向进程设计的计算机接口中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。

  程序是指令、数据及其组织形式的描述,进程是程序的实体。


  线程(Thread)是“进程”中某个单一顺序的控制流。也称为轻量级进程。

  线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程的实际运行单位。

  一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程并行执行不同的任务。


  知乎讨论


  首先听到这个名词,下意识的就会去想在一个程序中如何体现、如何运用的。


  而且又重新温习了一遍那个多线程的小demo。


  先说一句总的概括:进程和线程都是一个时间段的描述,是对CPU工作时间的描述


  下面细说背景:

  CPU+RAM+各种资源(比如显卡、光驱、键盘、GPS等外设)构成了我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情


  一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来都是轮流着来。


  一个必须知道的事实:执行一段程序代码,实现一个功能的过程介绍,当得到CPU的时候,相关的资源必须也已经到位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外所有的 就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那他就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次他被CPU临幸的运行环境,必须保存。


  串联起来的事实:前面讲过在CPU看起来所有的任务都是一个一个轮流执行的,具体的轮流方法就是:先加载程序A的上下文,然后在开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文.....


   ======重要的东西出现了======

  进程和线程就是这样的背景出来的,两个名词不过是对应的CPU时间段的描述,名词就是这样的功能。


  进程就是包括上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文


  线程是什么呢?

  进程的粒度太大了,每次都要有上下的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成a,b,c等多个块组合而成。那么这里具体的执行就可能变成:


  程序A得到CPU -> CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行程序A的c小段,最后CPU保存A的上下文。


  这里a,b,c的执行共享了A的上下文,CPU在执行的时候没有进行上下文切换的。这里的a,b,c就是线程,也就是说线程是共享进程的上下文环境的更为细小的CPU时间段。


  到此全文结束,在一个总结:


  进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是粒度大小不同


  温故课本


  然后再次翻看了《操作系统》的自考书,整本书对于线程没有过多的描述。

  但是其中的描述还是挺好的。


  线程是进程中可以独立执行的子任务。

  一个进程中可以有一个或多个线程。每个线程都有一个唯一的标识符

  举例:

  假设一个用户要求执行一个数据库应用程序 ,从数据库产生一份工资单报表,并把报表传送到一个文件中,在等待生成工资单报表时又向系统提出一个数据库查询请求。


  对比,操作系统首先为该用户创建一个数据库进程,接着按用户要求生成工资单报表。在生成该报表的过程中,又根据用户的查询请求进行查询。这时系统中有两个请求(工资单报表和数据库查询),操作系统就把这两个请求表示为数据库进程中的两个独立的线程。


  有时在一个进程中同时有多个请求。操作系统就把每个请求表示为该进程中的一个独立的线程,即一个进程中可同时又多个独立的线程。



结语


     需要一个触发点和出发点


  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值