详细介绍线程与进程的区别与产生

目录

一、进程(Process)

二、线程(Thread)

三、进程线程的举例解释

四、进程与线程的区别

五、扩展

1、进程的由来

2、线程的由来


在我们去看他们的区别之前,首先,我们要了解什么是线程与进程?

一、进程(Process)

      简单来说进程是在系统中正在运行的一个应用程序,程序一旦运行就是进程,比如正在运行的QQ是一个进程、正在运行的浏览器也是一个进程。详细一点就是说:进程是计算机中程序关于某数据集合上的一个运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的继承。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。系统可以分配给每个进程一段有限使用的CPU的时间(又称CPU时间片),CPU在这段时间中执行某个进程,然后下一个时间片又跳到另一个进程中去执行(注意:此时上一个进程中任务可以未执行完)。由于CPU转换较快(对于我们人类来说),所以使得每个进程好像同时执行一样。

二、线程(Thread)

     线程包含在进程中,是进程中的实际运作单位,是程序执行的最小单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发执行多个线程,每条线程并行执行不同的任务。

三、进程线程的举例解释

       可能你在看完上面进程线程的概念后,依然不是太理解它们。那咱们就用一个简单的例子来解释一下,大家都喜欢用一个工厂的例子,我感觉这个例子也是很好的。

      首先,计算机的核心是CPU,它承担了所以的计算任务。我们现在把它比作一个工厂,假设工厂的电力有限,一个只能供给一个车间使用(此处表示该工厂是单CPU的,单个CPU,一次只能运行一个任务)。也就是说一个车间开工,其他车间就得停工。

       进程就好比工厂的车间,它代表CPU所能处理的任务。任何时刻,单个CPU总是只能运行一个进程,其他进程处于非运行状态,但是这个CPU可以让这个车间工作一会后,再让另一个车间工作一会。

       一个车间里,可以有很多的工人,线程就好比车间里的工人。一个进程可以包括多个线程。

       车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

       可是,有些房间最多只能允许一个人在里面,比如厕所。里面有人的时候,其他人就不能进去了,这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这块内存。如何防治其他人进入呢?加一把锁。先到的人锁上门,后面的人只能等锁打开才能进入,这个就叫“互斥锁”(Mutual exclusion ,缩写Mutex),目的是为了防止多个线程同时读写某一块内存区域。

       还有一些房间,可以同时容纳 n 个人,多出来的人只能在外面等着,这就像某些内存区域,只能供给固定数目的线程使用。那这防止其他人进入的方法就是挂 n 把锁,进去的人取一把钥匙,出来的时候再把钥匙挂回原处,当钥匙被拿完后,后面的人就不能进了,只能等着。这种做法叫做“信号量”(Semaphore),用来保证多个线程不会互相冲突。

      看完这个例子,希望可以让你对进程与线程理解的更清晰,至于后面说到的锁,暂时知道就可以了,先不用理解。这个例子是在单CPU下的。目前,我们的计算机都是多CPU的,可以同时运行多个进程。另外,再附加一个链接,这是意外发现的一个比较有趣的讲线程的故事《我是一个线程》。

        我是一个线程

四、进程与线程的区别

区别进程线程
根本区别作为资源分配的基本单位执行和调度的基本单位
所处环境在操作系统中能同时运行多个程序(多进程)在同一应用程序中有多个顺序流同时执行(多线程)
分配内存系统在运行时会为每一个进程分配不同的内存区域系统不会为线程分配内存,线程所使用的资源是它所属的进程的资源,线程组只能共享资源,也就是说,线程除了在运行时要占用CPU资源之外,计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
包含关系没有线程的进程可以被看作是一个单线程,如果一个进程内拥有多个线程,则进程的执行过程是由多条线程共同完成的。线程是进程的一部分,如果没有某一个进程也就不会存在这个进程里的线程。线程又被称为轻量级进程或轻权进程。
开销大小每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销。线程可以看成是轻量级的进程,属于同一进程的线程共享代码和数据空间,每个线程有独立的运行栈和程序计算器(PC),线程之间的切换开销小。

五、扩展

1、进程的由来

       这个就要追述到电脑刚刚发明出来的时候,那时候是没有操作系统的,电脑处理的任务都是顺序的,一个任务在处理期间是独占了整个电脑资源。任务的运行需要CPU、输入输出设备等一起协同工作,但是由于CPU运行的很快,而输入输出设备运行的很慢,所以往往大部分时间CPU都处于空闲状态,等待输入输出的完成,就像排队买饭,排队2小时,吃饭5分钟,这样就太慢太浪费资源了。所以就出现了支持多道程序运行的系统(多道批处理系统):电脑一次可以处理多个任务,当一个任务需要I/O时,就会执行其他需要CPU处理的任务,如此循环处理直到执行完所有任务。这样提高了CPU的利用率,也提高了效率。就这样一步一步发展成了如今的操作系统。(由来这部分是操作系统中的内容,我只是粗略的简单讲述了一下)

      在多道批处理系统中引申出了一个非常重要的模式,即:允许多个任务金如意内存并运行,由于在内存中存储了多个任务,那么那么多任务如何进行区分?当某个任务因为等待I/O暂停时,怎么恢复到之前的运行状态?所以,人们就发明了进程这一概念,用进程来保存每个任务的数据和运行状态,同时对每个进程划分对应的内存地址空间(代码、数据、进程空间、打开的文件),并且要求进程只能使用它自己的内存空间,从而来达到任务的区分和恢复。

2、线程的由来

       在此时,我们要知道一个名词:并发。什么是并发呢?其实很好了解,就是同时完成多件事。比如我们可以使用电脑边听歌边聊天。在现实生活中,很多很多是都是同时进行的,程序中也会出现同时进行的任务。

       多道批处理系统所引入的进程的概念,提高了计算机的运行效率,但是单单使用进程来处理程序的并发(并发,宏观上可以理解为:同一个时间段有多个任务在计算机中执行)的弊端也越来越突出,因为一个进程在一个时间段内只能做一件事。如果某个程序有多个任务,只能逐个执行这些任务,由前面我们说进程与线程的区别时,我们知道进程间的切换开销是比较大的。

      举个例子吧:我喜欢在吃饭的时候看电视下饭,那我们就以吃饭为例:假设现在我们希望计算机一边执行吃饭的任务,一边执行看电视的任务。我们知道计算机是以进程为调度单位的,那么我们想一边吃饭,一边看电视的行为,只能拆分为两个进程,但是我们知道进程中存储了大量信息,那么当计算机进行进程切换的时候,就会有很大的时间消耗和空间消耗(因为每个进程对应不同的内存地址空间,进程切换,实际上是处理器处理不同的地址空间)。如果不拆分为两个进程,我们让这两个任务在同一个进程中,那么这两个任务必然是依次执行的,但是这样就违背了我们要同时吃饭看电视的要求。所以,问题来了,我们是否可以实现进程中任务的切换,有可以避免进程切换内存地址空间呢?

      因此:线程这一概念就被发明了。用线程表示进程中不同的任务,同时又将计算机实际的调度单元转到线程。这样就避免了进程的内存地址空间的切换,也达到了多任务的并发执行。

 

 

      

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值