现在的位置: 首页 -> LAMP学习 -> linux学习 -> 进程和线程的区别以及孤儿、僵尸、守护进程

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

2018-04-21 20:15评论数 0 ⁄ 被浏览 9593 views+

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


多进程和多线程的区别:


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

数据共享

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

能共享内存数据

各有优势

内存、CPU

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

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

线程占优

创建销毁、切换

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

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

线程占优

编程、调试

编程简单,调试简单

编程复杂,调试复杂

进程占优

可靠性

进程间不会互相影响

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

进程占优

场景

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

弱相关的处理;

需要频繁创建销毁的;

进行大量计算的;

各有优势

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


父进程、子进程

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


孤儿进程

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


僵尸进程

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

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


守护进程:

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

 

文章出自:https://www.daixiaorui.com/read/271.html 本站所有文章,除注明出处外皆为原创,转载请注明本文地址,版权所有。

目前有 0 条评论  @我要评论

    您的每一个评论都是对我的一份支持

     博客二维码

    昵称 *

    邮箱 *