进程、线程的理解

河南妞

关注

阅读 100

2022-04-02

##整体理解:

1.进程:

    我们写的代码只是描述了程序应该怎么运行,它是一份死的“说明书”。在实际应用场景中,我们想要的是按照这些代码的执行逻辑去处理和输出我们希望的数据。

    而进程就是来完成这个处理过程的,它是很多代码 的一次执行过程,它操作和输出我们需要的各种数据,是一个动态的演变过程,有自己的生命周期。它是一个执行过程,每一段代码的执行“小过程”组成了进程执行的“大过程”。

    应用程序是运行在操作系统里的,一个应用程序由一个或多个进程组成, 代码执行过程需要内存、外设等资源来提供支持, 而进程是操作系统分配这些资源(除了CPU时间片)的最小单位。

2.线程:

    线程是分配CPU时间片的最小单位。它归属于某个进程,和进程中的其它线程共享进程分配到的系统资源,但是每个线程独自占用自己分配到的CPU时间片资源。

   也就是说,多线程机制能够 低成本地实现程序的并发执行。它不需要像进程那样重新分配大量系统资源,但是又能够让很多段代码并发执行。

##一、从概念的本质来看

          对于进程,百度百科上的解释就很好,“ 进程 (Process)是计算机中的程序关于某数据集合上的一次运行活动”。也就是说,它是一个过程。然而,我们很难就此得到一个直观的认知图像。

          你可以把它看做,一个生命体的生命过程,它毕生都在完成某项任务。

          程序代码和工程中的各种资源文件,只是这个生命体的各种设计,它们描述了这个生命体有什么DNA序列、长什么样、做什么任务、有什么特点、怎么去完成任务,最终所有的描述加在一起,等同于描述了这个生命体生命的每一个过程会如何渡过。

          一句话,程序代码是“生命结构”的静态的描述说明,而进程则是对应的一个活的动态的“生命过程”。

          人们要完成某个任务,是通过创造这些鲜活的生命过程来完成的,而程序代码只是相当于这些生命过程的描述文字。    

          例如,人们描述了“狗”生命体的生命过程,然后就依托于这种描述,可以生成很多条狗,它们按照这种描述渡过其一生,完成看家护院的任务。

         

          程序员们的工作,正是完成这些生命过程的设计与描述。对于这个虚拟的电子生命世界,他们是上帝般的存在者。

          不过,这群“上帝”并非可以自由自在地玩弄这个世界,因为“上帝们”头上是有产品经理和老板的,若前者是“神”,则后者是“主神”,而“主神们”又会被更高层次的神控制。然而即便是最高权力的神,也不是全无掣肘,就算他强大到足以脱离“社会规律”的束缚,还有一个叫做“自然法则”的东西来控制他的生老病死。对此,不禁让人想起一首诗:

           棋子们并不知道其实是棋手

          伸舒手臂主宰着自己的命运

          棋子们并不知道严苛的规则

          在约束着自己的意志和退进

          黑夜与白天组成另一张棋盘

          牢牢将棋手囚禁在了中间

          上帝操纵棋手,棋手摆布棋子

          上帝背后,又有哪位神祗设下

          尘埃,时光,梦境和苦痛的羁绊

          ——博尔赫斯《棋》

          

          至于比喻,任何比喻中的喻体都只能恰当地说明本体的一部分特点,而非全部。但是好的比喻能让你快速了解一个事物的大致面貌。(在一篇笔记中,我具体阐述了相应观点。参见: 对于通过比喻来讲解事物。)。

二、从在操作系统、计算机系统中的定位来看

     

     进程是操作系统分配资源的最小单位;

     线程是CPU时间片分配的最小单位。

参考剪藏:

      计算机操作系统之进程与线程 - loveyakamoz - 博客园

     

三、进程、线程的生命周期与状态机

#.进程和线程的生命周期状态非常相似,都是五种状态:

创建            就绪        

            阻塞        执行        死亡

解析:

除了前后两个尾巴,其生命的大部分时间其实可以认为处于两种状态:执行状态、非执行状态;

而为什么 非执行状态要分为  “阻塞”、“就绪”两种呢?

1.阻塞状态:因为有时候线程执行到某一步,必须等待某个事件执行完或者睡眠时间结束之后(依赖关系)(此类事件还包括外设I/O请求、外设资源分配、同步锁释放等),它才能恢复继续执行,此所谓阻塞,即无法立即转为“执行”状态;

2.就绪状态:而其它时候,线程并不需要等待什么事情完成,它随时都准备着被调度执行相关代码,此所谓“就绪”状态;

3.执行状态:一旦线程开始被调度执行相关代码,就进入了“执行”状态。

                     要么执行中途被打断,再次进入阻塞状态;要么完全执行完毕,进入死亡环节。

线程的五种状态转化,可以参考笔记:

Java线程总结

1.进程的生命周期状态机:

2.线程生命周期状态图

                      

参考剪藏:

关于进程、线程生命周期的总结 - amosilin的博客 - CSDN博客

Java总结篇系列:Java多线程(一) - Windstep - 博客园

了解基本概念可参考: 进程与线程的一个简单解释 - 阮一峰的网络日志

声明:部分图片是获取自网络,这里只是用于学习分享,侵删!

     

精彩评论(0)

0 0 举报