代潇瑞博客

进程和线程的区别以及孤儿、僵尸、守护进程

| 点击次数:9668

本文通过一个以表格形式的对比来理解、比较进程和线程。并且还会介绍父进程、子进程、孤儿进程、僵尸进程、守护进程的一些概念。


多进程和多线程的区别:


对比维度多进程多线程总结

数据共享

进程之间空间独立,不能共享内存数据

能共享内存数据

各有优势

内存、CPU

占用内存多,切换复杂,CPU利用率低

占用内存少,切换简单,CPU利用率高

线程占优

创建销毁、切换

创建销毁、切换复杂,速度慢

创建销毁、切换简单,速度很快

线程占优

编程、调试

编程简单,调试简单

编程复杂,调试复杂

进程占优

可靠性

进程间不会互相影响

一个线程挂掉将导致整个进程挂掉

进程占优

场景

强相关的处理(一个挂了其他还在);

弱相关的处理;

需要频繁创建销毁的;

进行大量计算的;

各有优势

备注:一个进程可以有一个或者多个线程。 


父进程、子进程

父进程和子进程的关系是:子进程是父进程的一个副本,一个父进程能创建多个子进程,创建子进程能并发执行。一般来说,子进程先结束执行,然后父进程负责子进程的一些善后工作(回收资源)。


孤儿进程

父进程运行结束,但子进程还在运行(未运行结束)的子进程就称为孤儿进程。孤儿进程最终会被init进程(进程号为1)所收养,因此init进程此时变成孤儿进程的父进程,并由init进程对它们完成状态收集工作。(linux下,init是内核启动的第一个用户级进程,init有许多很重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤立进程。)


僵尸进程

一个进程使用fork创建子进程,如果子进程退出执行后,父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。

如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。所以僵尸进程是有危害的。


守护进程:

守护进程也就是通常说的Daemon进程(精灵进程),是Linux中的后台服务进程,是个特殊的孤儿进程。它是一个生存期较长的进程,通常独立于控制终端(不会因为控制终端被关闭而中断)并且周期性地执行某种任务或等待处理某些发生的事件。举例:nignx、mysql、cron都是守护进程。

【相关推荐】

触屏版 | 电脑版

Copyright © 2013 代潇瑞博客手机版

QQ: 446673330

粤ICP备13071969号-1