每个运行中的程序就是一个进程,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。
1.线程和进程
几乎所有操作系统都支持进程的概念,当一个程序进入内存中运行时,就变成了一个进程。它具有一定的独立功能,进程时系统进行资源分配和调度的一个独立单位。
进程的特征:
* 独立性:是系统中独立存在的实体,可以拥有自己独立的资源,都有自己私有的地址空间。没经过进程本身允许的情况下,一个进程不可以直接访问其他进程的地址空间。
* 动态性:进程与程序的区别在于,程序只是一个静态的指令合集,而进程是一个正在系统中活动的指令合集。进程中有着时间的概念,有自己的生命周期和不同的状态。
* 并发性:多个进程可以在单个处理器上并发执行,不会相互影响。
对于一个CPU而言,它在某个时间点只能执行一个程序,也就是说,只能运行一个进程,CPU不断地在这些进程之间轮换执行。用户之所以感觉不到中断现象,是因为CPU的执行速度相对人的感觉来说太快了,像是同时在运行。多线程则扩展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程是进程的执行单元。线程在程序中是独立的、并发的执行流。当进程被初始化后,主线程就被创建了。
线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。线程是独立运行的,它不知道进程中是否还有其他线程存在。线程的执行是抢占式的,也就是说,当前运行的线程在任何时候都可能被挂起,以便另外一个线程可以运行。
总结,一个程序运行后至少有一个进程,一个进程里至少要包含一个线程。
2.多线程的优点
* 进程之间不能共享内存,但线程之间共享内存非常容易。
* 系统创建进程时需要为该进程重新分配系统资源,但创建线程则带价小得多,因此使用多线程来实现多任务并发比多进程的效率高。
* java语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了java的多线程编程。
|
|