chengqishang的博客

就是记录一些自己的日常看论文,写代码,遇到的问题,以及自己的资料的总结。...

进程和线程

什么是进程?

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

什么是线程?

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

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

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

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

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

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

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

参考文献:

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqishang110/article/details/52356225
个人分类: 现代操作系统
上一篇关于caffe的python写的层多GPU训练
想对作者说点什么? 我来说一句

进程 线程 linux

2010年09月07日 405KB 下载

线程进程的区别.txt

2009年08月15日 3KB 下载

linux unix下多线程进程

2011年04月08日 87KB 下载

操作系统PPT(关于线程进程的)

2009年12月30日 1.24MB 下载

C++模拟查看进程线程

2011年06月13日 53KB 下载

进程线程的区别

2011年09月29日 367KB 下载

进程线程的分析,很有用

2009年03月25日 631KB 下载

没有更多推荐了,返回首页

关闭
关闭