进程:它是执行中程序的一个实例;程序总是运行在某个进程的上下文中。每个进程都有自己独立的地址
空间。每次用户通过shell输入一个可执行文件的名字运行一个程序或在windows下通过鼠标双击一个可执
行文件时,系统会创建一个新的进程。
程序:它是代码和数据的集合;程序可以作为目标模块存在于磁盘上,或者做为段存在于地址空间中。
上下文:是由程序正确运行所需要的状态组成的。这个状态包含存放在存储器中的程序代码和数据,它的
栈,它的通用目的寄存器的内容,程序计数器(PC),环境变量以及打开文件描述符的集合。
进程的优点:每个进程都有自己独立的地址空间,这样一来一个进程就不会不小心覆盖另一个进程的虚拟
存储器。基于进程的多任务处理的特点是允许你的计算机能同时运行两个或更多的程序,进程共享cpu时
间,系统负责进程的切换。
进程的缺点:独立的地址空间是进程共享状态信息变得困难。另外,线程间的切换和通讯开销很大。
线程:一个线程就是运行在一个进程上下文中的一个逻辑流。每个线程都有自己的线程上下文,包括唯一
的整数线程id,栈,栈指针,程序计数器,通用目的寄存器。所有运行在一个进程中的线程共享该进程
的整个虚拟地址空间。
线程执行模型:每个进程开始生命周期时都是单一线程,称为“主线程”,在某一时刻主线程创建一个
对等线程。如果主线程停滞则系统就会切换到其对等线程。
线程优点:线程的上下文要比进程的上下文小的多,所以线程的上下文切换要比进程的上下文切换要快。
线程不像进程按照严格的父子关系来组织。和一个进程相关的线程组成一个对等线程池,一个线程可以
杀死其任意对等线程。每个线程都能读写相同的共享数据。
线程缺点:由于数据共享会带来同步问题,进而会导致死锁的产生。死锁在语言层面上不能解决,需要
一个对程序的良好设计来避免死锁。
参考:<<Computer Systems,A Programmer's Perspective>>
<<Java2参考大全,第4版>>
注:本文仅是简单介绍,详细有待补充,或者更改错误。