进程
操作系统中进行资源分配的基本单位,进程就是进行中的程序,处于运行过程中的。
三个基本特征:
- 独立性:进程是独立运行,独立获取资源,独立接收调度的基本单。没有进程本身的统一,其他进程不能访问到该进程所有的地址空间。
- 动态性:程序是静态的指令集合,进程就是活动在系统中的指令集合,进程有自己的生命周期和状态,程序没有。
- 并发性:多个进程在单处理器上并发执行。
并发:同一时刻,只有一个指令执行,多个进程被快速轮换,使宏观上有多个进程同时在执行的效果。
并行:同一时刻,有多个指令在多个处理器上同时执行。
形象一点:发:突突突;行:一排人齐步走;
线程
线程扩展了进程的概念,同一个进程可以并发出多个任务。
线程是进程的执行单元,是进程的组成部分,进程有多个线程,线程有一个父进程。
线程是独立运行的,不知道进程中其他线程的存在,运行的线程被挂起,另一个线程变可以运行。
一个线程可以创建和撤销另一个线程。
进程线程模型:
进程从操作系统中获得基本的内存空间,所有的线程共享进程的内存地址空间。每个线程也有自己私有的内存地址范围,其他线程不能访问。
所有的线程共享进程的内存地址空间,线程间的通信很容易,通过共享进程级全局变量实现。
在没有引入多线程概念之前,并发是发生在进程之间的,每一次的进程上下文切换都将导致系统调度算法的运行,以及各种 CPU 上下文的信息保存,非常耗时。线程级并发没有系统调度,进程分配到 CPU 使用时间,并发给其内部的各个线程使用。
和进程的时间片切换雷同,当进程中的线程拥有的时间片结束时保存 CPU 及寄存器中的线程上下文并交出 CPU,完成一次线程间切换。当然,当进程的 CPU 时间使用结束时,所有的线程必然被阻塞。
多线程优势
- 进程之间不能共享内存,线程之间共享内存很简单,
- 系统创建进程需要分配系统资源,创建线程代价小很多,使用多线程来实现多个任务并发比多进程的效率高。
- java语言内置了多线程功能支持,简化了java的多线程编程。