1、进程与线程的概念
来源百度百科:
- 进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。
- 线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
2、什么是进程管理
- 到底什么是进程呢?
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。 - 那么什么是程序呢?
程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。 - 那我们换一种说法:
- 程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合。
- 进程是正在执行中的程序。程序被执行时,执行人的权限和属性、以及程序的代码都会被加载如内存,操作系统给这个进程分配一个ID号,我们成为PID(进程ID)
3、进程管理的作用
- 判断服务器健康状态:运维工程师最主要的工作就是保证服务器安全稳定的运行。理想的状态是,在服务器出现问题,但是还没有造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的CPU占用率、内存占用率过高,就需要人为介入解决问题了。
- 查看系统中所有的进程:我们需要查看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务,是否有非法服务运行。
-
杀死进程:这是进程管理中最不常用的手段,当我需要停止服务时,会通过正确关闭命令来停止服务(如
apache
服务可以通过service httpd stop
来关闭)。只有当正确终止进程的手段失效的情况下,才会考虑使用kill
命令杀死进程(你不是杀手,不要什么进程都用kill来终止,否则非常容易导致服务器崩溃)
4、Linux进程的几种状态
-
D
:不可被唤醒的睡眠状态,通常用于I/O
情况。 -
R
:该进程正在运行。 -
S
:该进程在睡眠状态,可被唤醒。 -
T
:停止状态,可能是在后台暂停或进程在除错状态。 -
W
:内存交互状态(从2.6内核开始无效)。 -
X
:死掉的进程(应该不会出现)。 -
Z
:僵尸进程。进程已经终止,但是部分程序还在内存当中。 -
<
:高优先级(以下状态在BSD格式当中出现)。 -
N
:低优先级。 -
L
:被锁入内存。 -
s
:包含子进程。 -
l
:多线程(小写L)。 -
+
:位于后台。
5、进程与线程的关系
(1)线程与进程的关系
比如电脑同时进行着200个进程:
- 线程与进程概念
- 线程: 每个进程中至少包含一个线程,而这些线程都在共享进程的资源空间等,当线程发生变化的时候只会引起CPU执行的过程发生变化,不会改变进程所拥有的资源。同理一个程序中至少包含一个进程。进程中执行运算的最小单位,亦是执行处理机调度的基本单位
- 进程: 每个进程都有自己的地址空间,资源如,内存,I/O,CPU,同一个进程里的 线程共享本进程里的地址空间,那能不能使用别人家进程的地址空间呢,显然这是不可以的。由于进程的独立性,当某一个进程崩溃之后,在保护模式下不会对别的进程进行影响。资源分配的基本单位,运行调度的基本单位,系统中并发执行的单位。
- 两者的比较
- 调度
同一个进程中,线程的切换不会引起进程的切换。
由一个进程的线程切换到另一个线程的进程时,引起进程的切换。 - 并发性
进程可以并发执行,而一个进程中的线程也可以并发执行。 - 拥有的资源
一般来说,线程并不会拥有自己的资源,但是它可以访问自己本进程中的资源。比如,一个进程打开的文件等,进程中的其他线程是可以共享的。
- 调度
(2)总结
我们简单总结下:
- 进程:指在系统中正在运行的一个应用程序,程序一旦运行就是进程,进程是资源分配的最小单位。
- 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流,线程是程序执行的最小单位。
参考: