关于进程和线程的描述,这里有一篇比较有意思的类比描述http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
一、什么是进程
进程是程序在一次数据集合上的一次执行过程,每个进程都有自己的地址空间,内存,数据栈及其他记录其运行轨迹的辅助数据。所以一个程序在不同数据集合上的运行,乃至一个程序在同样数据集合上的多次运行都是不同的进程。
操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间、进程也可以通过fork和spawn操作来完成其他任务。
不过各个进程有自己地内存空间、数据栈等,所以只能使用进程间通讯(inter process communication,IPC),而不能直接共享信息。常见的进程间通讯方式有信号、信号量、消息队列和共享内存
二、什么是线程
线程也被称为轻量级进程,所有线程运行在同一进程中,共享相同的运行环境。线程是进程中的一个实体,是被系统独立调度和执行的基本单位。
三、进程和线程的区别
- 进程是独立的,这表现在内存空间,上下文环境上;线程运行在进程空间内。一般来讲(不使用特殊技术),进程无法突破进程边界存取其他进程内的存储空间;而线程处于进程空间内,所以同一进程所产生的线程共享同一内存空间。
- 同一进程中的两段代码不能够同时执行,除非引入线程。
线程是属于进程的,当进程退出时,该进程产生的所有线程都会被强制退出并清除。 - 线程占用的资源要少于进程所占用的资源。
- 进程和线程都可以有优先级
- 进程间可以通过IPC通信,但线程不可以