【第22期】观点:IT 行业加班,到底有没有价值?

进程和线程

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

什么是进程?

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

什么是线程?

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

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

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

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

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

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

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

参考文献:

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

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

相关文章推荐

进程与线程

阮一峰的网络日志 » 首页 » 档案 上一篇:熵的社会学意义     下一篇:字符串匹配的KMP算法 ...

进程与线程

[b][size=large]本文围绕以下三个部分展开: [/size][/b] [b][size=large]一、进程的定义、特征和基本状态[/size][/b] [b][size=large]二、进程通信[/size][/b] [b][size=large]三、线程[/size][/b] [b][size=large]四、进程与线程的比较[/size][/b] [b][size=large]一、进程的定义、特征和基本状态[/size][/b] [size=medium][b]1. 定义[/b][/size]

Java进程&线程(一)

Java进程&线程

进程与线程的一个简单解释

点击打开链接 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。 ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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