转载请注明出处:http://blog.csdn.net/li0978/article/details/52054320

进程是指在操作系统中正在运行的一个应用程序,线程是指进程内独立执行某个任务的一个单元。

线程与进程有很多类似的性质,因此人们习惯上也称线程为轻量级进程( lightweightprocess, LWP),也是CPU调度和分派的基本单元;而传统意义上的进程则被称为重量级进程(heavyweight process, HWP),从现代的角度来看,它就是只拥有一个线程的进程。如果进程有多个控制线程,那么它就能同时执行多个任务。他们之间的关系可以简单的由下图表示:

下面,我们主要从调度、并发性、系统开销、拥有资源等方面来对线程和进程进行比较。

调度

在传统的操作系统中,CPU调度和分派的基本单位是进程。而在引入线程的操作系统中,则把线程作为CPU调度和分派的基本单位,进程则作为资源拥有的基本单位,从而使传统进程的两个属性分开,线程便能轻装运行,这样可以显著地提高系统的并发性。同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用。但是在由一个进程中的线程切换到另一进程中的线程时,依然会引起进程切换。

并发性

在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的并发性,从而能更有效地使用系统资源和提高系统的吞吐量。例如,在一个未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被封锁时,便没有其他的文件服务进程来提供服务。在引入了线程的操作系统中,可以在一个文件服务进程中设置多个服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程封锁时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统的吞吐量。

系统开销

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

拥有资源

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

PS:

1、在单核计算机里,有一个资源是无法被多个程序并行使用的:cpu。
没有操作系统的情况下,一个程序一直独占着全都cpu。
如果要有两个任务来共享同一个CPU,程序员就需要仔细地为程序安排好运行计划--某时刻cpu和由程序A来独享,下一时刻cpu由程序B来独享
而这种安排计划后来成为OS的核心组件,被单独名命为“scheduler”,即“调度器”,它关心的只是怎样把单个cpu的运行拆分成一段一段的“运行片”,轮流分给不同的程序去使用,而在宏观上,因为分配切换的速度极快,就制造出多程序并行在一个cpu上的假象。

2、在单核计算机里,有一个资源可以被多个程序共用,然而会引出麻烦:内存。
在一个只有调度器,没有内存管理组件的操作系统上,程序员需要手工为每个程序安排运行的空间 -- 程序A使用物理地址0x00-0xff,程序B使用物理地址0x100-0x1ff,等等。
然而这样做有个很大的问题:每个程序都要协调商量好怎样使用同一个内存上的不同空间,软件系统和硬件系统千差万别,使这种定制的方案没有可行性。
为了解决这个麻烦,计算机系统引入了“虚拟地址”的概念,从三方面入手来做:
a、硬件上,CPU增加了一个专门的模块叫MMU,负责转换虚拟地址和物理地址。
b、操作系统上,操作系统增加了另一个核心组件:memory management,即内存管理模块,它管理物理内存、虚拟内存相关的一系列事务。
c、应用程序上,发明了一个叫做【进程】的模型,(注意)每个进程都用【完全一样的】虚拟地址空间,然而经由操作系统和硬件MMU协作,映射到不同的物理地址空间上。不同的【进程】,都有各自独立的物理内存空间,不用一些特殊手段,是无法访问别的进程的物理内存的。

3、现在,不同的应用程序,可以不关心底层的物理内存分配,也不关心CPU的协调共享了。然而还有一个问题存在:有一些程序,想要共享CPU,【并且还要共享同样的物理内存】,这时候,一个叫【线程】的模型就出现了,它们被包裹在进程里面,在调度器的管理下共享CPU,拥有同样的虚拟地址空间,同时也共享同一个物理地址空间,然而,它们无法越过包裹自己的进程,去访问别一个进程的物理地址空间。

4、进程之间怎样共享同一个物理地址空间呢?不同的系统方法各异,符合posix规范的操作系统都提供了一个接口,叫mmap,可以把一个物理地址空间映射到不同的进程中,由不同的进程来共享。

参考:

进程与线程的一个简单解释 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

什么是进程,什么是线程相关推荐

  1. python线程池模块_python并发编程之进程池,线程池,协程

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  2. 分布式锁,进程锁,线程锁到底是什么

    在分布式集群系统的开发中,线程锁往往并不能支持全部场景的使用,必须引入新的技术方案分布式锁. 线程锁:大家都不陌生,主要用来给方法.代码块加锁.当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一 ...

  3. 一句话说清分布式锁,进程锁,线程锁

    一句话说清分布式锁,进程锁,线程锁 在分布式集群系统的开发中,线程锁往往并不能支持全部场景的使用,必须引入新的技术方案分布式锁. 线程锁,进程锁,分布式锁 线程锁:大家都不陌生,主要用来给方法.代码块 ...

  4. 进程process与线程thread

    进程:process是一个外理过程,即然是外理过程,那么它就有生命周期,从进程的启动,运行,直到运行结束,进程终止.进程是程序的执行实例,即运行中的程序,同时也是程序的一个副本,程序是放置于磁盘的,而 ...

  5. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  6. 【Linux 线程】同一个进程中的线程共享哪些资源

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

  7. 26.进程空间和线程空间

    概念 进程:是资源分配和调度的基本单位. 线程:是进程的一个实体,是cpu进行调度的基本单位,是比进程更小的独立运行的基本单位. 线程运行需要内存空间,包括线程程序的数据空间.存储空间.运行空间等. ...

  8. Python3高并发定时更新任务进程池和线程池的使用

    Python3高并发定时更新任务进程池和线程池的使用 背景:需要定时对数据库的某一张表做更新 不管用多线程还是多进程只能利用当前一台机器的计算能力,可以考虑使用celery这样的工具,后期可以横向扩展 ...

  9. 什么是进程什么是线程,他们的区别是什么

    定义 进程是程序的一次运行过程,进程可以看成程序执行的一个实例,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是进程的一条执行路径,是CPU调度和分派的基本单位,它是比进程更小的 ...

  10. 进程(process)和线程(thread)

    进程(process)和线程(thread) 来源:阮一峰 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 其实做一个很好的类比,就可以把它们解释地清 ...

最新文章

  1. 关于VS项目平台的x86,x64,Any CPU以及Debug和Release
  2. linux磁盘管理相关命令,Linux | 磁盘管理命令
  3. ES6_入门(2)_const命令
  4. Android 5中不同效果的Toast
  5. 强制ul中li不换行
  6. 云计算:企业商业模式创新的新战线
  7. Linux内核网络协议栈3-创建socket(1)
  8. 使用接口更改已装箱的值类型中的字段
  9. pytorch visdom蓝屏和无法启动
  10. springmvc错点集结
  11. excel vlookup多个条件匹配多列_Excel教程第12课:VLOOKUP函数近似匹配到底怎么回事,原理+操作...
  12. 精心整理了40个Python办公自动化真实案例,一口一个,高效办公!
  13. GD32实战6__串口读写
  14. Windows7 64位安装EPLAN P8 2.6教程
  15. Ubuntu下配置源地址/本地源/官方源
  16. 微软全球最有价值专家(MVP) - 中国区2008年7月最有价值专家名录
  17. html:button按钮背景图片设置
  18. Python脚本操作Excel实现批量替换
  19. Android应用开发期末复习题
  20. 计算机二级office——word字处理第一套习题

热门文章

  1. python画画用哪个软件_如何用python画韦恩图? 使用python的tutul工具,画一朵雏菊花...
  2. Linux启动重启mysql
  3. 中继器的使用方法~~
  4. KCF跟踪算法原理 入门详解
  5. 公开课丨硬核vue实战:码出炫酷宇宙星系
  6. 客户服务,阿里云客户服务方式有哪些
  7. 使用实时频谱分析仪解决方案为无线研究进行强大的信号分析
  8. php 数组转为字符串 或者字符串转为数组
  9. 荣耀7 android 耗电,华为荣耀7续航长评测:“耗电门”谣言不攻自破
  10. 网页支付宝支付,通过form表单提交,在苹果手机上无法跳转