进程和线程

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

什么是进程?

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

什么是线程?

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

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

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

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

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

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

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

参考文献:

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

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

相关文章推荐

线程与进程

  • 2015年05月11日 20:08
  • 306KB
  • 下载

线程与进程大全

  • 2016年02月25日 14:45
  • 328KB
  • 下载

如何设置进程(线程)在指定的CPU上运行

实现方法 进程与指定cpu绑定:SetProcessAffinityMask(GetCurrentProcess(), dwMask); 线程与指定cpu绑定:SetThreadAffinit...

进程线程区别

  • 2012年12月13日 14:28
  • 190KB
  • 下载

进程线程笔记

  • 2014年09月23日 22:04
  • 12KB
  • 下载

拦截API-通过远程线程dll注入目标进程

转自:http://www.cnblogs.com/cfas/p/5121614.html(侵删) 本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需...

进程与线程详解

  • 2014年03月12日 14:10
  • 617KB
  • 下载

服务器客户端-socket(进程线程)

  • 2015年10月13日 09:04
  • 1.73MB
  • 下载

java后台进程和线程优先级

1. 后台线程:处于后台运行,任务是为其他线程提供服务。也称为“守护线程”或“精灵线程”。JVM的垃圾回收就是典型的后台线程。 特点:若所有的前台线程都死亡,后台线程自动死亡。 设置后台线程:Th...

进程和线程之间的关系

  • 2015年07月05日 17:59
  • 860B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程和线程
举报原因:
原因补充:

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