什么是进程?什么是线程?
进程:进程是并发执行程序在执行过程中资源分配和管理的基本单位(资源分配的最小单位)。进程可以理解为一个应用程序的执行过程,应用程序一旦可执行,就是一个进程。每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。
线程:程序执行的最小单位。
为什么要有线程?
每个进程都有自己的地址空间,即进程空间。在网络或多用户换机下,一个服务器通常需要接受大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大相应用户请求效率低),因此操作系统中线程概念被引进。
进程与线程的区别?
- 1.地址空间:同一进程的所有线程共享本进程的地址空间,而不同的进程之间的地址空间是独立的。
- 2.资源拥有:同一进程的所有线程共享本进程的资源,如内存,cpu,io等。进程之间的资源是独立的,无法共享。
- 3.执行过程:每一个进程可以说就是一个可执行的应用程序,每一个独立的进程都有一个程序执行的入口,顺序执行序列。但是线程不能独立执行,必须依存在应用程序中,由程序的多线程控制机制进行控制。
- 4.健壮性:因为同一进程的所有线程共享此线程的资源,因此当一个线程发生崩溃时,此进程也会发生崩溃。但是各个进程之间的资源是独立的,因此当一个进程崩溃时,不会影响其他进程。因此进程比线层“健壮”。
- 5.开销:线程执行开销小,但不利于资源的管理与保护。进程执行开销大,但可以进行资源的管理与保护。进程可以跨机器前移。
一个形象的例子解释进程和线程的区别
这副图是一个双向多车道的道路图,假如我们把整个道路看成是一个“进程”的话,那么图中的由白色虚线分隔凯来的各个车道就是进程中的各个“线程”了。
- 这些线程(车道)共享了进程(道路)的公共资源(土地资源)
- 这些线程(车道)必须依赖于进程(道路),也就是说,线程不能脱离于进程而存在(就像离开了道路,车道也就没有意义了)
- 这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或者转弯,必须等待其他车道的车辆通行完毕)。
- 这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。
- 这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到cpu时间片(交通灯变化)的那一刻才能知道。
进程与线程选择取决条件?
因为进程是资源分配的基本单位,线程是执行的最小单位。以及进程与线程之间的健壮性来考虑。
- 1.在程序中,如果需要频繁创建和销毁的使用线程。因为进程创建和销毁开销很大(需要不停地分配资源),但是线程频繁的调用只是改变CPU的执行,开销小。
- 2.如果需要程序更加稳定安全时,可以选择进程。如果追求速度,就选择线程。