面试题整理5----进程、线程、协程区别及僵尸进程处理
面试题整理5----进程、线程、协程区别及僵尸进程处理
- 1. 进程、线程与协程的区别
- 1.1 进程(Process)
- 1.2 线程(Thread)
- 1.3 协程(Coroutine)
- 2. 总结对比
- 3. 僵尸进程
- 3.1 什么是僵尸进程?
- 3.2 僵尸进程的产生原因
- 3.3 如何处理僵尸进程?
- 4. 结论
在计算机编程领域,进程、线程和协程是经常被提及的概念,它们在并发执行、资源利用以及程序设计等方面都起着至关重要的作用。本文将详细探讨这三个概念的区别,并深入解析僵尸进程的产生原因及处理方法。
1. 进程、线程与协程的区别
1.1 进程(Process)
- 定义与概念:进程是操作系统分配资源的基本单位,是正在执行的程序的实例。每个进程都有自己独立的地址空间和系统资源。
- 特点:独立性强,资源分配单元,隔离性高。
- 状态:包括创建、就绪、运行、等待和终止等状态。
1.2 线程(Thread)
- 定义与概念:线程是进程中的一个执行单元,是CPU调度和分配的基本单位。一个进程可以包含多个线程,它们共享进程的资源。
- 特点:轻量级,共享资源,适合并发执行。
- 状态:与进程类似,包括创建、就绪、运行、等待和终止等状态。
1.3 协程(Coroutine)
- 定义与概念:协程是一种比线程更轻量级的执行单元,能够在单线程中实现并发操作。协程由程序自身调度,而非操作系统。
- 特点:更轻量,协作式调度,适合I/O密集型任务。
- 状态:包括创建、就绪、运行、挂起和终止等状态。
2. 总结对比
| 特性 | 进程 | 线程 | 协程 |
|---|---|---|---|
| 资源隔离 | 完全隔离 | 部分共享 | 完全共享 |
| 调度方式 | 操作系统内核 | 操作系统内核 | 用户态或编程语言 |
| 开销 | 较大 | 较小 | 极小 |
| 适用场景 | 需要隔离的任务 | 需要并发的任务 | I/O密集型任务 |
3. 僵尸进程
3.1 什么是僵尸进程?
僵尸进程(Zombie Process)是已经完成执行并退出,但其进程表条目并未被删除的进程。这些进程虽然不再执行任何操作,但仍占用进程表中的一个位置。
3.2 僵尸进程的产生原因
当子进程退出时,如果父进程没有读取子进程的退出状态(即没有调用wait()或waitpid()),子进程就会成为僵尸进程。
3.3 如何处理僵尸进程?
-
父进程调用
wait()或waitpid():这是清理僵尸进程的标准方法,父进程应及时调用这些函数来读取子进程的退出状态。 -
处理
SIGCHLD信号:父进程可以设置SIGCHLD信号的处理函数来自动处理子进程的退出状态。 -
创建孤儿进程:当父进程终止时,其所有的子进程将被init进程接管,init进程会自动清理这些子进程。
-
双重fork:父进程fork一个子进程,子进程再fork一个孙子进程并退出,孙子进程成为孤儿进程,由init进程接管。
-
重启服务器:虽然这是最简单的方法,但也是代价最大的,应尽量避免。
4. 结论
进程、线程和协程各有其独特的优势和适用场景。合理选择和使用这些并发执行单元,可以显著提高程序的性能和资源利用率。同时,正确处理僵尸进程,可以避免系统资源的浪费和潜在的系统问题。
希望本文能帮助你更好地理解这些概念,并在实际开发中做出更合适的选择!如有任何疑问或建议,请随时留言交流!😊
相关文章:
面试题整理5----进程、线程、协程区别及僵尸进程处理
面试题整理5----进程、线程、协程区别及僵尸进程处理 1. 进程、线程与协程的区别1.1 进程(Process)1.2 线程(Thread)1.3 协程(Coroutine)2. 总结对比 3. 僵尸进程3.1 什么是僵尸进程?3.2 僵尸进…...
OpenTK 中帧缓存的深度解析与应用实践
摘要: 本文深入探讨了 OpenTK 中帧缓存的使用。首先介绍了帧缓存的基本概念与在图形渲染管线中的关键地位,包括其与颜色缓存、深度缓存、模板缓存等各类缓存的关联。接着详细阐述了帧缓存对象(FBO)的创建、绑定与解绑等操作,深入分析了纹理附件、渲染缓冲区附件在 FBO 中的…...
第2节-Test Case如何调用Object Repository中的请求并关联参数
前提: 已经创建好了project(File -> New -> Project,Type:API/WebService),object repository中已经创建了RESTful endpoint(Object Repository -> New -> Web Service Request&am…...
【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯
关键词:鸿蒙、ArkTs、Web组件、通讯、数据 官方文档Web组件用法介绍:文档中心 Web 组件加载沙箱中页面可参考我的另一篇文章:【HarmonyOS NEXT】 如何将rawfile中文件复制到沙箱中_鸿蒙rawfile 复制到沙箱-CSDN博客 目录 如何在鸿蒙应用中加…...
Android学习(六)-Kotlin编程语言-数据类与单例类
假设我们要创建一个表示书籍的数据类 Book,包含书名和作者两个字段。在 Java 中,代码如下: public class Book { String title; String author; public Book(String title, String author) { this.title title; this.author author; } Ove…...
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
论文标题 An Empirical Study of Scaling Law for OCR OCR 缩放定律的实证研究 论文链接: An Empirical Study of Scaling Law for OCR论文下载 论文作者 Miao Rang, Zhenni Bi, Chuanjian Liu, Yunhe Wang, Kai Han 内容简介 本论文在光学字符识别…...
力扣274. H 指数
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发…...
挑战一个月基本掌握C++(第五天)了解运算符,循环,判断
一 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 1.1 算术运算符 假设变量 A 的值为 10,变量 B 的值为…...
Python的sklearn中的RandomForestRegressor使用详解
文章目录 Python的sklearn中的RandomForestRegressor使用详解一、引言二、RandomForestRegressor简介1、随机森林回归原理2、RandomForestRegressor的主要参数 三、构建和训练模型1、数据准备2、数据划分3、模型训练 四、模型评估1、预测2、评估指标 五、特征重要性分析六、可视…...
ReactPress 1.6.0:重塑博客体验,引领内容创新
ReactPress 是一个基于Next.js的博客&CMS系统, Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 体验地址:http://blog.gaoredu.com/ 今天,我们自豪地宣布ReactPress 1.6.0版本的正式发布,…...
人脸生成3d模型 Era3D
从单视图图像进行3D重建是计算机视觉和图形学中的一项基本任务,因为它在游戏设计、虚拟现实和机器人技术中具有潜在的应用价值。早期的研究主要依赖于直接在体素上进行3D回归,这往往会导致过于平滑的结果,并且由于3D训练数据的限制࿰…...
kubeadm搭建k8s集群
前置环境: 准备三台虚拟机 192.168.1.104(用来做k8s的mater节点) 192.168.1.105(节点node2) 192.168.1.109(节点node3) 关闭防火墙 systemctl stop firewalld systemctl disable firewalld安装…...
centOS系统进程管理基础知识
进程的概念与属性 1.进程是系统中正在执行的代码片段,也可以称为一个程序。 2.操作系统通过分配进程编号(PID)来管理进程。 3.进程属性包括PID、PPID、UID、GID、状态、优先级、终端名和资源占用等。 PS命令与进程查看 1.PS命令用于查看进程…...
STM32中ADC模数转换器
一、ADC简介 ADC模拟-数字转换器 ADC可以将引脚连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC,1us转换时间 输入电压范围: 0~3.3V,转换结果范围:0~4095 18个输入…...
初学stm32 --- 外部中断
目录 STM32 IO 口中断基础知识 相关库函数: 使用 IO 口外部中断的一般步骤 STM32 IO 口中断基础知识 STM32 的每个 IO 都可以作为外部中断的中断输入口。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立…...
wordpress调用指定分类ID下 相同标签的内容
要在WordPress中调用分类ID为1、3、7的分类下,具有相同标签的前10个内容,可以使用自定义的WordPress查询(WP_Query)。以下是实现此功能的步骤和示例代码: 步骤: 确定共同标签: 首先,你需要确定分类1、3、…...
SQL语法基础知识总结
一、引言 在当今数字化时代,数据的存储和管理至关重要。SQL(Structured Query Language),即结构化查询语言,是用于管理关系型数据库的强大工具。无论是开发 Web 应用、进行数据分析还是处理企业级数据,掌握…...
css 实现呼吸灯效果
先看效果: 动画的结果就想实在呼吸,完整的代码如下: <template><div class"container"><div class"long-breath"></div></div> </template><style lang"less"> html, body{h…...
IMX6ULL开发板如何关掉自带的QT的GUI界面和poky的界面的方法
重要说明:其实最后发现根本没必要去关掉自带的QT的GUI界面,直接把屏幕先刷黑就可以看到测试效果了,把屏蔽先刷黑的代码见博文: https://blog.csdn.net/wenhao_ir/article/details/144594705 不过,既然花了时间摸索如何…...
几种广泛使用的 C++ 编译器
C 编译器有很多种,它们在不同的操作系统和开发环境中提供服务。以下是几种广泛使用的 C 编译器: 1. GCC (GNU Compiler Collection) 平台:跨平台(Linux, macOS, Windows)特点:GCC 是一个自由软件编译器套…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
