一、进程

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

注意,进程一般有三个状态:就绪状态、执行状态和等待状态【或称阻塞状态】;进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出。

进程控制块(PCB):PCB不但可以记录进程的属性信息,以便操作系统对进程进行控制和管理,而且PCB标志着进程的存在,操作系统根据系统中是否有该进程的进程控制块PCB而知道该进程存在与否。系统建立进程的同时就建立该进程的PCB,在撤销一个进程时,也就撤销其PCB,故进程的PCB对进程来说是它存在的具体的物理标志和体现。一般PCB包括以下三类信息:进程标识信息;处理器状态信息;进程控制信息。

由程序段、相关的数据段和PCB三部分构成了进程实体(又称进程印像),一般,我们把进程实体就简称为进程。

进程的特征:
1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。
2.并发性:任何进程都可以同其他进程一起并发执行。
3.独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
4.异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。

二、线程

线程:线程是进程中的一个实体,作为系统调度和分派的基本单位。Linux下的线程看作轻量级进程。

线程的性质:
1.线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
2.由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
3.进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
4.线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
5.由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。

多线程使用的情形:前台和后台工作情况;异步处理工作情况;需要加快执行速度情况;组织复杂工作的情况;同时有多个用户服务请求的情况等。
 
线程机制的优点:
多线程运行在同一个进程的相同的地址空间内,和采用多进程相比有以下优点:
1.创建和撤销线程的开销较之进程要少。创建线程时只需要建立线程控制表相应的表目,或有关队列,而创建进程时,要创建PCB表和初始化,进入有关进程队列,建立它的地址空间和所需资源等。
2.CPU在线程之间开关时的开销远比进程要少得多。因开关线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。
3.线程机制也增加了通讯的有效性。进程间的通讯往往要求内核的参与,以提供通讯机制和保护机制,而线程间的通讯是在同一进程的地址空间内,共享主存和文件,无需内核参与。

三、进程和线程的区别

(1)调度:
        在传统的操作系统中,CPU调度和分派的基本单位是进程。而在引入线程的操作系统中,则把线程作为CPU调度和分派的基本单位,进程则作为资源拥有的基本单位,从而使传统进程的两个属性分开,线程编程轻装运行,这样可以显著地提高系统的并发性。同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用,但是在由一个进程中的线程切换到另一进程中的线程,依然会引起进程切换。
 
(2)并发性:
      在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的并发性,从而更有效地提高系统资源和系统的吞吐量。例如,在一个为引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被封锁时,便没有其他的文件服务进程来提供服务。在引入线程的操作系统中,可以在一个文件服务进程设置多个服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程封锁时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统的吞吐量。

(3)拥有资源:
      不论是引入了线程的操作系统,还是传统的操作系统,进程都是拥有系统资源的一个独立单位,他可以拥有自己的资源。一般地说,线程自己不能拥有资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源,亦即一个进程的代码段、数据段以及系统资源(如已打开的文件、I/O设备等),可供同一个进程的其他所有线程共享。

(4)独立性:
        在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。这是因为

为防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其它资源,除了共享全局变量外,不允许其它进程的访问。但是同一进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,它们共享进程的内存地址空间和资源,如每个线程都可以访问它们所属进程地址空间中的所有地址,如一个线程的堆栈可以被其它线程读、写,甚至完全清除。

(5)系统开销:

由于在创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。类似的,在进程切换时,涉及到整个当前进程CPU环境的保存环境的设置以及新被调度运行的CPU环境的设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使他们之间的同步和通信的实现也变得比较容易。在有的系统中,现成的切换、同步、和通信都无需操作系统内核的干预。

(6)支持多处理机系统:
       在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上。但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使它们并行执行,这无疑将加速进程的完成。因此,现代处理机OS都无一例外地引入了多线程。

转载于:https://www.cnblogs.com/terryguan/p/6679527.html

进程和线程的定义、区别与联系相关推荐

  1. C语言笔试线程和进程的区别,进程和线程的定义和区别

    进程和线程的定义和区别 1.进程定义 进程:是具有一定独立功能的程序关于某个数据集合上的一次进行活动,是系统进行资源分配和调度的一个独立单位. 2.线程定义 线程:是进程的一个实体,是cpu调度和分派 ...

  2. Java进程和线程关系及区别

    1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基 ...

  3. apply_async进程不执行_c/c++面试精选题(八)简单回答,进程和线程关系及区别...

    1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基 ...

  4. 管程,进程及线程之间的区别

    1,首先我们先了解进程.线程.管程各自的概念: 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基 ...

  5. 进程和线程关系及区别

    1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基 ...

  6. 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期

    1 程序.进程.线程之间的区别与联系 三者之间的形象化理解: * 程序:代码实现了功能,就是程序,是静态的: * 进程:执行中的程序就是进程,是动态的: * 线程:进程内的一个执行单元,也是进程内的可 ...

  7. 进程和线程的定义和区别

    进程:进程是系统分配资源和调度的基本单位,也就是说进程可以单独运行一段程序. 线程:线程是cpu调度和分派的最小基本单位. 区别: 1.一个进程可以包含至少一个线程,一般来说也就是主线程,而一个线程只 ...

  8. 进程与线程之间的区别及联系

    一.定义:     1.进程:进程是一个具有独立功能的程序关于某个数据集合的以此运行活动. 是系统进行资源分配和调度的独立单位,也是基本的执行单元.是一个动态的概念,是一个活动的实体.它不只是程序的代 ...

  9. 程序、进程、线程之间的区别

    1.   .net的公共语言运行时(CLR)能够区别两种不同类型的线程:前台线程和后台线程.前台线程与后台线程的区别: 应用程序必须运行完所有的前台线程才可以退出.而对于后台线程,应用程序则可以不考虑 ...

最新文章

  1. 损坏防浪涌电插排内部电路
  2. 设置/修改centos上的swap交换分区的方法
  3. 孩子大了真是不好管了
  4. C++学习之路 | PTA乙级—— 1006 换个格式输出整数 (15分)(精简)
  5. 关于angularjs指令
  6. Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】
  7. 【Flink】No key set. This method should not be called outside of a keyed context.
  8. 不止鸿蒙 OS,华为的备用操作系统还有“极光”?
  9. 利用fidder发送request
  10. 如何选择适合的伺服电机?
  11. 苹果ipadmini1 主板 电路图 超清
  12. 点击电脑桌面图标就点计算机图标老是出现是否删除快捷方式,电脑点击桌面图标提示缺少快捷方式怎么办...
  13. ARM开发初级-Windows环境下的STM32开发环境搭建(包含missing compiler version 5的解决方法)-学习笔记02
  14. win7取消计算机密码怎么设置,Windows7取消开机密码怎么设置_Win7怎么取消开机密码?-192路由网...
  15. 【Tips】如何批量安装和导出Python项目的依赖库?
  16. 磊科路由器信号按键_怎样隐藏磊科路由器WiFi信号
  17. 索尼发布新Bravia液晶电视 84英寸4K分辨率!
  18. 教你成为抖音玩家高手
  19. 为什么北半球的旋涡都是逆时针的
  20. 虚拟机安装Linux(ubuntu)

热门文章

  1. 微软推补丁服务器,微软再推稳定性补丁 为即将到来功能更新做准备
  2. Lc123验证是不是回文序列
  3. Python入门--字符串的切片操作
  4. SonarQube遇到的启动问题及解决方案
  5. 块状树(bzoj 3720: Gty的妹子树)
  6. 图像形态学运算之图像开闭运算 含python实现
  7. C语言实现成块数据读写操作 fread() fwrite()
  8. 机器学习案例系列教程——距离度量方法总结
  9. 【架构】大型网站优化技术思路
  10. GitHub 新增并上传