* 进程
一个进程就是一个执行中程序,而每一个进程都有自己独立的一块内存空间、一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的。
* 线程
线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序控制的流程,但与进程不同的是:
同类的`多个线程是 共享一块内存空间和一组系统资源。` 所以系统在各个线程之间切换时,`开销要比进程小`得多。所以线程好似 轻量级的进程。一个进程可以包含多个线程。
不管进程还是线程,都是context of execution。在linux中,无论进程还是线程,根本上都是通过clone一个已经存在的task(进程/线程)来实现的,两者的差别就在于clone时flags的传递,当共享地址空间设置时(clone_VM位),创建线程,当没设置时则创建进程。
* java程序主线程
Java程序至少会有一个线程,这就是主线程,程序启动后是由 JVM创建主线程,程序结束是由JVM停止主线程。 主线程负责管理 子线程,即子线程的 启动、挂起、停止等等操作。**java的主线程会等待子线程执行完毕才会关闭主线程。**
对于Sun JDK来说,它的Windows版与Linux版都是使用一对一的线程模型实现的,一条Java线程就映射到一条轻量级进程之中,因为Windows和Linux系统提供的线程模型就是一对一的。