进程和线程

原创 2016年08月29日 20:21:10

什么是进程?

计算机程序只不过是磁盘中可执行的二进制(或者其他类型)的数据。它们只是在被读取到内存中被操作系统调用的时候才开始它们的生命周期。
进程(有时候被称为重量级进程)是程序的一次执行。每一个进程都有自己的地址空间、内存、数据栈以及其他记录起运行轨迹的辅助数据。操作系统管理其上运行的所有进程,并为这些进程公平的分配时间、进程也可以通过fork和spawn操作类完成其他的任务。不过各个进程有自己的内存空间、数据栈等,所以只能使用进程间通讯(interprocess communication, IPC),而不能直接共享信息。

什么是线程?

线程(有时候被称为轻量级进程)和进程有些相似,不同的是,所有的线程运行在同一个进程中, 共享相同的运行环境。他们可以被想象成实在主进程或者“主线程”中并行运行的“迷你进程”。

线程有开始顺序执行结束三部分。它有一个自己的指令指针,记录自己运行到什么地方。线程的运行可能被占用(中断),或者暂时的被挂起(睡眠),让其他的线程运行,这叫做让步。一个进程中的各个线程之间共享同一片数据空间,所以线程之间可以比进程之间更加方便的共享数据以及相互通讯。

线程一般都是并发执行的。正式由于这种并发和数据共享的机制使得多个任务合作变为可能。实际上,在单CPU的系统中,真正的并发是不可能的,每个线程会被安排成每次只运行一小会儿,然后就把CPU让出来,让其他的线程去运行。在进程的整个运行过程中,每个线程都只做自己的事,在需要的时候跟其他的线程共享运行的结果。

当然,这样的共享并不是完全没有风险的。如果多个线程共同访问同一片数据,则由于数据访问的顺序不一样,有可能导致数据结果的不一致的问题,这叫做竞态条件(race condition)。幸运的是,大多数的线程库都带有一系列的同步原语,来控制线程的执行和数据的访问。

另一个要注意的地方时,由于函数会在完成之前阻塞住,在没有特别为多线程做修改的情况下,这种“贪婪”的函数会让CPU的时间分配有所倾斜,导致各个线程分配到的时间可能不尽相同,不尽公平。【1】

具体的关于线程和进程,可以参考《现代操作系统》第二章。

接下来一段时间会详细的记录关于线程和进程的相关知识点。

参考文献:

【1】Python核心编程(第二版)

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java进阶(四十三)线程与进程的区别

Java进阶(四十三)线程与进程的区别1、线程的基本概念  概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2016年09月28日 08:50
  • 44742

进程线程面试题总结

1.什么是进程?什么是线程? 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。...
  • wujiafei_njgcxy
  • wujiafei_njgcxy
  • 2017年08月11日 15:55
  • 1212

进程和线程关系及区别

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

java 进程和线程的区别与联系

程序:一段静态的代码,一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,是应用软件执行的蓝本。    进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的...
  • hp_yangpeng
  • hp_yangpeng
  • 2016年12月27日 21:12
  • 502

c++:线程和进程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2)资源...
  • ming2453755227
  • ming2453755227
  • 2017年03月10日 13:23
  • 1487

Android进程和线程的区别

恩恩,今天参加阿里的面试,被问到Android中进程和线程的区别,着实把我伤脑了,表示平时开发的时候只知道线程,并没有去仔细关注过进程,所以下来特地去查了以下资料,先说说线程: (1)在Androi...
  • qq_17475155
  • qq_17475155
  • 2016年03月15日 20:02
  • 5066

Android进程与线程区别

进程,常被定义为程序的执行,可以把一个进程看成一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于他自己。          线程,某一进程中一路单独运行的程序...
  • u014297278
  • u014297278
  • 2015年07月05日 12:04
  • 1273

程序、进程、线程的区别与联系

程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程,也就是说进程是系统进行资源分配和调度的一个独立单位,每个进程都有自己单独的地址空间。所以说程序与进程...
  • woaigaolaoshi
  • woaigaolaoshi
  • 2016年04月01日 21:08
  • 8286

JAVA 进程与线程之间的区别

什么是进程,什么是线程 系统要做一件事,运行一个任务,所有运行的任务通常就是一个程序; 每个运行中的程序就是一个进程,这一点在任务管理器上面可以形象的看到。 当一个程序运行时,内部可能会包含多个...
  • zidan_2011
  • zidan_2011
  • 2012年02月21日 14:06
  • 19364

作业、进程、线程

1. 基本概念 作业:用户在一次解决或是一个事务处理过程中要求计算机系统所做的工作的集合,它包括用户程序、所需要的数据集控制命令等。作业是由一系列有序的步骤组成的。作业的完成要经过作业提交、作业收容、...
  • hguisu
  • hguisu
  • 2007年12月01日 17:00
  • 10756
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程和线程
举报原因:
原因补充:

(最多只允许输入30个字)