1.进程
- 进程是系统正在运行的程序
- 进程之间互不影响,一个进程挂了,另一个进程能继续运行(同一级别互不影响)
主进程 | 程序执行的入口,可以理解为常用的main 函数 |
父进程 | 对于子进程而言, 子进程的创造者,可有多个子进程。 任何进程都有父进程,追根溯源是系统启动程序。对于我们一般写的程序,主进程是最初始的父进程。 |
子进程 | 对于父进程而言, 父进程创建的进程, 子进程只能对应一个父进程。 |
守护进程 | 我们常言的daemon 进程,是子进程的一种状态,标记子进程与父进程同死。如果没有标记daemon , 则杀死父进程,与子进程的运行状态没有半分影响。 |
僵尸进程 | 因为某些子进程没有设置daemon 属性,如果杀死父进程,其子进程将会变成“僵尸进程”。僵尸进程的父进程将成为init 进程的子进程。 |
- 进程是系统分配资源的最小单元,资源包括:网络、cpu、磁盘等
- 一个进程至少有一个线程(主线程),可以有多线程
- 进程之间比较难实现数据共享
- 是系统调度
比如:windows操作系统,打开微信,系统会自动产生一个微信进程,并为其分配资源
2.线程
- 线程是操作系统能够进行运算调度的最小单位
- 线程隶属于进程
- 线程之间的切换比较容易,且线程可以较容易的实现数据共享
- 是系统调度
比如:windows操作系统,在微信内,打开朋友圈,又打开收藏,这是两条线程
扩展
- 开进程比开线程耗费的资源更多~
- php是单线程语言,n个用户访问进来会开n个进程,每个进程一个线程,根据服务器的情况,配置php的性能(fpm进程池,php-fpm.conf,ps:可用grep找一下该文件),比如:
max_children | *允许创建的最大子进程数 |
start_servers | *起始进程数(服务启动后初始进程数量) |
min_spare_servers | *最小空闲进程数(清理空闲进程后的保留数量) |
max_spare_servers | *最大空闲进程数(当空闲进程达到此值时清理) |
- php也可以多开线程,可以添加pthread扩展