本文通过一个以表格形式的对比来理解、比较进程和线程。并且还会介绍父进程、子进程、孤儿进程、僵尸进程、守护进程的一些概念。
多进程和多线程的区别:
对比维度 | 多进程 | 多线程 | 总结 |
---|---|---|---|
数据共享 | 进程之间空间独立,不能共享内存数据 | 能共享内存数据 | 各有优势 |
内存、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 本站所有文章,除注明出处外皆为原创,转载请注明本文地址,版权所有。
蛋仔派对无限蛋币http://www.wzryzs.com/
666
666
很好的方法值得推荐
gg修改器https://www.guiyangtax.com/ 葫芦侠http://www.booj.net/ 八门神器http://www.tusovok.net/
gg修改器https://www.guiyangtax.com/ 葫芦侠http://www.booj.net/ 八门神器http://www.tusovok.net/